web2py-1.99.7.orig/0000755000175000017500000000000011727360024012454 5ustar josejoseweb2py-1.99.7.orig/CHANGELOG0000644000175000017500000012551411724764235013707 0ustar josejose## 1.99.5 - admin in Russian (Bulat), Japanese (Omi) and Slovenian (Robert Valentak) - included web-based debugger (experimental, thanks Mariano) - def index(): return dict(a=gluon.tools.Expose(folder)) - db.table.field.like(...,case_sensitive=False) (thanks Floyd) - db.table.field.regexp(...) for sqlite and postgres - db(...,ignore_common_filters=True) - db(db.dog_id.belongs(db.dogs.owner=='james')).select() - db(...).select().group_by_value(db.table.field) (thanks Yair) - db = DAL('imap://user:password@server:port') support (thanks Alan Etkin) - db = DAL('teradata://DSN=dsn;UID=user;PWD=pass; DATABASE=database') (thanks Adrew Willmott) - db = DAL('mongodb://127.0.0.1:5984/db') (experimental, thanks Mark Breedveld) - db = DAL('cubrid') (experimental) - db = DAL('postgres:pg8000:...') and DAL('postgres:psycopg2:...') - pg8000 now ships with web2py (thanks Mariano) - reponse.delimiters = ('\\[','\\]') (thanks Denes) - auth.user_groups stores user groups - auth.is_impersonating() - populate can now deal with computed fields (thanks Tsvi Mostovicz) - new rediscache (thanks niphold) - sync languages capability (thanks Yair) - improved markmin auto-links - improved ldap support (thanks Omi) - added TimeCollector (thanks Caleb) - better cpdb.py (thanks pasxidis) - conditional menu items (reponse.menu=[(title,bool,link,[],condition)] - scripts/services/service.py (thanks Ross) - gluon/contrib/login_methods/browserid_account.py (thanks Pai) - gluon/contrib/htmlmin.py for html minimization (thanks kerncece) - web2py_component has timeout parameter, thanks Alan - 100's of small bug fixes and small improvements ## 1.99.4 Improved mobile admin, thanks Angelo Improved examples page, thanks Anthony fixed a SQLCustomField bug ## 1.99.3 This is a major revision in peparation for web2py 2.0 - moved to GitHub and abandoned Lanchpad - new web site layout, thanks Anthony - new welcome app using skeleton, thanks Anthony - jQuery 1.7.1 - modernizr 2.0.6 (customized) - ``define_table('thing', singluar='thing',plural='things')`` - CAS 1.0 and 2.0 compliant, thanks Olivier - fixed validate_and_insert and validate_and_update, thanks Anthony - ``request.user_agent().is_mobile`` etc., thanks Ross and Angelo - better router, thanks Jonathan - app on/off buttons - support for dropbox_login - improved markmin recognizes qr code, supports auto audio/video/embed - ``response.optimize_css = 'concat,minify,inline'``, thanks Ross - ``response.optimize_js = 'concat,minify,inline'`` thanks Ross - ``db.define_table(...,common_filter=query)``, thanks Yair - ``db(...,ignore_common_filter=True)`` - support for stripe payments - support for DowCommerce payments, thanks Dave - experimental PyPy support - experimental mongodb support, thanks Mark - tickets in db now accessible from admin, thanks Niphlod - many grid improvements and bug fixes ## 1.99.1-1.99.2 - gluon/contrib/simplejsonrpc.py - gluon/contrib/redis_cache.py - support for A(name,callback=url,target='id',delete='tr') - support for A(name,component=url,target='id',delete='tr') - new pip installer, thanks Chris Steel - isapiwsgihandler.py - dal expression.coalesce(*options) - gluon/contrib/simplejsonrpc.py, thanks Mariano - expire_sessions.py respects expiration time, thanks iceberg - addressed this issue: http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ - x509 support (thanks Michele) - form.process() and for.validate() - rocket upgrade (1.2.4) - jQuery upgrade (1.6.3) - new syntax rows[i]('tablename.fieldname') - new query syntax field.contains(list,all=True or False) - new SQLFORM.grid and SQLFORM.smartgrid (should replace crud.search and crud.select) - support for natural language queries (english only) in SQLFORM.grid - support for computed columns and additional links in SQLFORM.grid - new style virtual fields (experimental): db.table.field=Field.Lazy(...) - request.utcnow - cleaner/simpler welcome/models/db.py and welcome layout.html - response.include_meta() and response.include_files(), thanks Denes - dal auto-reconnect on time-out connections - COL and COLGROUP helpers - addresed OWASP #10, thanks Anthony and Eric - auth.settings.login_after_registration=True - detection of mobile devices and @mobilize helper (view.mobile.html), thanks Angelo - experimental gluon/scheduler.py - scripts/make_min_web2py.py - crud.search has more options, thanks Denes - many bug fixes (thanks Jonathan, Michele, Fran and others) ## 1.98.1-1.98.2 - fixed some problems with LOAD(ajax=False), thanks Anthony - jquery 1.6.2 - gevent.pywsgi adds ssl support, thanks Vasile - import/export of blobs are base64 encoded - max number of login attemts in admin, thanks Ross - fixed joins with alias tables - new field.custom_delete attribute - removed resctions on large 'text fields, thanks Martin - field.represent = lambda value,record: .... (record is optional) - FORM.validate() and FORM.process(), thanks Bruno - faster visrtualfields, thanks Howsec - mail has ssl support separate from tls, thanks Eric - TAG objects are now pickable - new CAT tag for no tags - request.user_agent(), thanks Ross - fixed fawps support - SQLFORM(...,separator=': ') now customizable - many small bug fixes ## 1.97.1 - validate_and_update, thanks Bruno - fixed problem with new custom import, thanks Mart - fixed pyamf 0.6, thanks Alexei and Nickd - fixed "+ =" bug in wizard - fixed problem with allowed_patterns - fixed problems with LOAD and vars and ajax - closed lots of google code tickets - checkboxes should now work with list:string - web2py works on Android, thanks Corne Dickens - new cpdb.py, thanks Mart - improved translation (frech in particuler), thanks Pierre - improved cas_auth.py, thanks Sergio - IS_DATE and IS_DATETIME validators now work with native types - better description of --shell, thanks Anthony - extra SQLTABLE columns, thanks Martin - fixed toolbar conflics, thanks Simon - GAE password shows with **** ## 1.96.2-1.96.4 - bug fixes ## 1.96.1 - "from gluon import *" imports in every python module a web2py environment (A, DIV,..SQLFORM, DAL, Field,...) including current.request, current.response, current.session, current.T, current.cache, thanks Jonathan. - conditional models in models//a.py and models///a.py - from mymodule import *, looks for mymodule in applications/thisapp/modules first and then in sys.path. No more need for local_import. Thanks Pierre. - usage of generic.* views is - by default - restricted to localhost for security. This can be changed in a granular way with: response.generic_patterns=['*']. This is a slight change of behavior for new app but a major security fix. - all applications have cas 2.0 provider at http://.../user/cas/login - all applications can delegate to login to external provider Auth(...,cas_provider='http://.../other_app/default/user/cas') - A(...,callback=URL(...),larget='id') does Ajax - URL(...,user_signature=True), LOAD(...,user_signature=True) can sign urls and @auth.requires_signature() will check the signature for any decorated action. - DAL(...,migrate_enabled=False) to disable all migrations - DAL(...,fake_migrate_all=True) to rebuild all corrupted metadata - new DAL metadata format (databases/*.table) - DAL(...,adapter_arg={}) allows support for alternate drivers - DAL now allows circular table defintions - DAL(..,auto_import=True) automatically imports tables from metadata without need to db.define_table(...)s. - new alterante syntax for inner joins: db(...).select(join=...) - experimental cubrid database support - DAL 'request_tenant' fields are special, the altomatically filer all records based on their default value. - db._common_fields.append(Field('owner')) allows to add fields to ALL tables - DAL ignores repeated fields with same names - web2py_ajax.html is more modular, thanks Anthony - request.is_local - request.is_http - new sessions2trash.py thanks Jim Karsten - corrupted cache files are automatically deleted - new simpler API gluon.contrib.AuthorizeNet.procss(...) - fixed recaptcha (as they released new API) - messages in validators have default internationalization - No more Auth(globals(),db), just Auth(db). Same for Crud and Service. - scripts/access.wsgi allows apache+mod_wsgi to delegate authentication of any URL to any web2py app - json now supports T(...) - scripts/setup-web2py-nginx-uwsgi-ubuntu.sh - web2py HTTP responses now set: "X-Powered-By: web2py", thanks Bruno - mostly fixed generic.pdf. You can view any page in PDF if you have pdflatex installed or if your html follows the pyfpdf convention. - auth.settings.extra_fields['auth_user'].append(Field('country')) allows to extend auth_* tables without need of definiting a custom auth_* table. Must be placed before auth.define_tables() - {{=response.toolbar()}} to help you debug applications - web based shell now supports object modifications (but no redefinitions of non-serializable types) - jQuery 1.6.1 - Lots of bug fixes ## 1.95.1 - Google MySQL support (experimental) - pip support, thanks lifeeth - better setup_exe.py, thanks meredyk - importved pyfpdf - domain check in email_auth.py, thanks Gyuris - added change_password_onvalidation and change_password_onaccept - DAL(...,migrate_enabled=True) - login_methods/loginza.py, thanks Vladimir - bpython shell support, thanks Arun - request.uuid and response.uuid (for a future toolbar) - db._timings contains database query timing info - efficient db(...).isempty() - setup-web2py-nginx-uwsgi-ubuntu.sh - Many bug fixes, thanks Jonathan ## 1.94.6 - fixed a number of minor bugs including adding some missing files - better session handling on session._unlock(..), thanks Jonathan - added experimental pip support, thanks Lifeeth - added experimental SAP DB support ## 1.94.5 - fixed a major bug with session introdued in 1.94.1 ## 1.94.4 - removed debug print statement that caused problems on GAE and mod_wsgi ## 1.94.3 - fixed major bug in auth redirection ## 1.94.2 - reverted wrong behavior of auth.requires(condition) in 1.94.1 ## 1.94.1 - moderniz 1.17 - web2py no longer saves session if no change, this makes it up up to 10x faster for simple actions - experimental REST API - better support for MSSQL NOT NULL - small bug fixes ## 1.93.1-2 - support for multiple interfaces, thanks Jonathan - jquery 1.5.1 - simplejson 2.1.3 - customizable simplejson - leaner app.yaml - css3 buttons in welcome - android support (experimental) - Field(':hidden'), Field('.readonly'), Field('name=value') - combined expressions print db.data.body.len().sum() - wizard can download plugins - better json serilization (object.custom_json) - better xml serialization (object.custom_xml) - better formstyle support - better comet_messaging.py (needs more testing) - many bug fixes ## 1.92.1 - much improved routing (thanks Jonathan) - Expression.__mod__ (thanks Denes) - admin has MULTI_USER_MODE (admin/models/0.py) - support for count(distinct=...) - has_permissions(...,group_id) - IS_MATCH(...,strict=True) - URL(...,scheme=,host=,port=), thanks Jonathan - admin in Afrikaans, thanks Caleb - auth.signature (experimental) - many other bug fixes ## 1.91.6 - web2py comet via gluon/contrib/comet_messaging.py (html5 websockets) experimental - fixed problem with services (broken in 1.91.5), thanks Vollrath - customizable uploadwidget, thanks Fran - fixed problem with mail unicode support, thanks Richard - fixed problem with linkto=None and references fields in SQLTABLE, thanks villas - no more upgrade button on windows since does not work - better remember-me login, thanks Martin Weissenboeck - support for recatcha options - support for GAE namespaces via DAL('gae://namespace') - new rocket (1.2.2), thanks Tim - many other bug fixes and improvements (thanks Jonathan) ## 1.91.2-1.91.5 - fixed a problem with deplyment on GAE - other new dal bug fixes ## 1.91.1 - LICENSE CHANGE FROM GPLv2 to LGPLv3 - URL(...,hash_vars=...) allows to specify which vars need to be signed - fixed bug with aliasing in new DAL ## 1.90.6 - fix issue with pickling new dal Row and Rows. ## 1.90.5 - set poll = False in rocket because of poll python thread bug often unfixed, thanks Jonathan - fixes issue with crud and reCaptcha ## 1.90.2-4 - pymysql no longer requires ssl (if not used) - fixed bug with virtualfields - fixed bug in truncate (new dal) - fixed bug in select with alternate primary key (new dal) - fixed bug with IS_IN_DB and self refences (also new dal) ## 1.90.1 - new DAL (complete rewrite of the web2py DAL is more modular) - rewrite has fail safe reload, thanks Jonathan - better CAS with v2 support, thanks Olivier ROCH VILATO - better markmin2latex - session.connect(separate=True) to handle many session files, thanks huaiyu wang - changed bahvior of impersonate (more secure, can generate form or used as API) - new rocket, thanks Tim - new pyfpdf - no more old style classes - experimental couchdb support in new dal (only insert, select, update by id) - mysql support out of the box via pymysql - SQLITABLE(...,headers='labels') thanks Bruno - optional: digitally signed URLs, thanks Brian Meredyk - minor bug fixes ## 1.89.1-.5 - new admin layout (thanks Branko Vukelic) - new admin search - new admin language selector (thanks Yair) - new Welcome app (thanks Martin Mulone) - better wizard - admin support for DEMO_MODE=True - admin exposes GAE deployment button (always) - MENU support None links (thanks Michael Wolfe) - web2py.py -J for running cron (thanks Jonathan Lundell) - fixed ~db.table.id on GAE (thanks MicLee) - service.jsonrpc supports service.JsonRpcException (thanks Matt) - bug fixes ## 1.88.1-2 - better list: string support, thanks Bob - jquery 1.4.3 - scripts/autoroutes.py - new admin wizard - added retrieve_username to navbar (if username) - internal rewrite for arbitrary paths (abspath), thanks Jonathan - populate support for list: and decimal, thanks Chirstian - markmin2latex has extra attribute - better mercual admin allows list of files, versions and retrieve - new error report system, thanks Thadeus and Selecta - SQLFORM.accepts(detect_record_change).record_changed - fixed cron for bytecode compiled apps, thanks Álvaro J. Iradier Muro - other bugs fixes and pep8 compliant fixes ## 1.87.3 - fixed a major bug introduced in 1.87.1 that prevents appadmin from working for new apps created with 1.87.1-2. - upgraded to clockpick 1.28, thanks villas ## 1.87.1-2 - new layout for examples, thanks Bruno and Martin - admin allow ``DEMO_MODE=True`` and ``FILTER_APPS=['welcome']`` - fixed a possible problem with CRON and paths ## 1.86.3 - Error reporting on save, thanks Mariano recalled ## 1.86.1-1.86.3 - markmin2latex - markmin2pdf - fixed some bugs - Storage getfirst, getlast, getall by Kevin and Nathan - db(db.table), db(db.table.id) both suported and equivalent to db(db.table.id>0) - postresql ssl support - less un-necessary logging and warnings on GAE - IS_DECIMAL_IN_RANGE and IS_FLOAT_IN_RANGE support dot="," (dot="." is default) - on_failed_authorization can be a function, thanks Niphold - gluon/contrib/login_methods/cas_auth.py for integration between CAS and Auth. ## 1.85.1-3 - fixed some bugs - added pyfpdf, thank Mariano ## 1.84.1-4 - flash now stays put in the top right corner - improved behavior for URL and T objects - new app level logging with logging.conf (thanks Jonathan) - improved OpenID (thanks Michele) - web2py_ajax handles prepend, append, hide (thanks Juris) - web2py_ajax also handels pre-validation of decimal fields - ru-ru translation (thanks Michele) - sk-sk translation (thanks Julius) - migrations save .table only if changed and after each ALTER TABLE (no more mysql inconsistencies) - fixed bugs in SQLCustomField, Field(default=...), IS_IMAGE, IS_DECIMAL_IN_RANGE and a few more. - Better validators (IS_DECIMAL_IN_RANGE, IS_INT_IN_RANGE, etc) thanks Jonatham - Polymmodel support on GAE - Experimental ListWidget - moved DAL and routes to thread.local (thanks Jonathan, again) - scripts/extract_mysql_models.py, thanks Falko Krause and Ron McOuat - scripts/dbsessions2trash.py, thanks Scott ## 1.83.2 - mostly cleanup ## 1.83.1 - New error reporting mechanism (thanks Mariano) - New routing system with app level routing (thanks Jonathan) - Integrated GAE appstat and GAE precompilation (thanks Scott) - New Field types "list:string", "list:integer", "list:reference" - request.cid, request.ajax, A(cid=request.cid), response.js ## 1.82.1 - request.ajax to detect if action is called via ajax, tahnks Jonathan and David Mako - more captcha options, thanks Vidul - openid and oauth2 thanks Michele and Keith - better PluginManager and load components - new template system, thanks Thadeus - new db.table(id,[field=value]) and db.table(query) syntax - URL('index') (no more r=request), thanks Thadeus - mail.send(message='...', ....) - DAL([....]) for load balancing - @service.soap(...) with mysimplesoap, thanks Mariano - hideerror ## 1.81.5 - Fixed a few bugs. The most important bugs we fixed are in memcache (thanks Scott) and in a process starvation issue with Rocket (thanks Mike Ellis and Tim). ## 1.81.4 - Fixed gluon.tools to work work with load and base.css to nowrap labels ## 1.81.3 - fixed bug in label names in formstyle - fixed id names in admin test.html page ## 1.81.2 - fixed bug in Auth ## 1.81.1 - rpx (janrain) support out of the box, allows login with Facebook, MySpace, etc. Thanks Mr Freeze - Increased security (escape single and double quotes, thanks Craig" - Fixed a bug with db.table.field.uploadseparate=True and autodelete - New welcome app with superfish and jQuery 1.4.2 - Deleted openwysiwyg from admin - In XML and xmlescape quote defaults to True. Both ' and " are escaped. Thanks Craig Younkins ## 1.80.1 - MARKMIN helper (no backward compatibility promise yet) - self._last_reference, thanks Dave (no backward compatibility promise yet) - IS_EQUAL_TO - zh-tw and better internationalization page, thanks Daniel Lin and Iceberg - better crud.search, thanks MrFreeze - Rocket interfaces, thanks Nik Klever - db.table.field.uploadseparate=True, thanks Gyuris - SCOPE_IDENITY for MSSQL, thanks Jose - fixed email attachment issue, thanks Bob_in_Comox - fixed problem with groupby and IS_IN_DB - other bug fixes - new implementation for local_import - ajax(..,...,null) - fixed Chrome bug in calendar.js, thanks Iceberg - experimental scrips/web2py-setup-fedora.sh - generic.load, thanks Iceberg ## 1.79.2 - solved simplejson imcompatibility problem ## 1.79.1 - x509 emails, thanks Gyuris - attachment and html in Mail on GAE, thanks PanosJee - fixed docstring in SQLTABLE, thanks aabelyakov - TAG(html) parese html into helpers (experimental, still some problems with unicode, , thanks RobertVa for unicode help) - DIV.elements(find=re.compile(....)) - DIV.flatten() - DIV.elements('....') supports jQuery syntax in '....' - better it-it.py and it.py, thanks Marcello Della Longa - Many Bug fixes: - improved support for DAL and joins in postgresql/oracle, thanks Nico de Groot - bux fixex in html.py, thanks Ian - fixed an issue with registration_key==None, thanks Jay Kelkar - fixed bug in gql.py, thanks NoNoNo - fixed problem with multiple and checkboxes, thanks MIchael Howden - fixed bug in gae, thanks NoNoNo - restored 2.4 compatibility, thanks Paolo Gasparello - auth.update() when pictures in profile - formstyle can be a function, thanks Howden - escape in sanitizer, thanks Howes - add missing settings, thanks Hamdy - find and exclude return empty Rows instead of [], thanks iceberg - simplejson 2.1.1 should fix compatibility problems - added sms_utils and Authorize.net in contrib ## 1.78.3 - reverted temporarily to old template system because of backward compatibility issues ## 1.78.1 - new template system allows {{block name}}{{end}}, thanks Thadeus - fixed mime headers in emails, included PGP in emails, thanks Gyuris - automatic database retry connect when pooling and lost connections - OPTGROUP helper, thanks Iceberg - web2py_ajax_trap captures all form submissions, thank you Skiros - multicolumn checkwidget and arbitrary chars in multiple is_in_set, thanks hy - Québécois for welcome, thanks Chris - crud.search(), thanks Mr Freeze - DAL(...migrate,fake_migrate), thanks Thadeus ## 1.77.3 - some cleanup of code in compileapp ## 1.77.2 - fixed x-index in calendar ## 1.77.1 - Replaced CherryPy with Rocket web server, thanks Tim - CacheOnDisk allows to specify a folder - IS_DATE/DATETIME can handle any year since 0 - SQLTABLE(...,headers='fieldname:capitalize') - Field().with_alias, thanks Nathan and Mengu - has_membership(group=...,role=...), thank Jonathan - db.define_table(username=True), thanks Jonathan - gluon.tools.prettydate - can specify hostname in routes_out (same syntax as routes in), thanks Martin - db.table.bulk_insert([...records...]) now works on GAE, thanks Jon - IS_EMAIL validates on 'localhost', thanks Jonathan - welcome/views/layout.html uses ez.css, thanks Yarko - mail attachments support utf8, thanks szimszon - works with PyPy, thanks Joe - better Firebird support, thanks Jose - better Oracle support, thanks Gabriele - cron supports days of week - SQLFORM(...,formstyle="table3cols") or "table2cols" or "divs" or "ul" - crud.settings.formstyle - web2py.py -f folder allows to specify locations of applications, thanks Iceberg - better/faster regex in template works in Jython - fixed lots of small bugs ## 1.76.5 - Fixed a typo in auth that created some registration problems ## 1.76.4 - SQLTABLE(db(db.auth_user.id>0).select(),headers='fieldname:capitalize') - Oracle limitby improved (thanks Sergey) - fixed migrations in Firebird, thanks Jose Jachuf - gluon/contrib/login_methods/linkedin_account.py (to be tested) ## 1.76.2-1.76.3 - major fix in cron (will I ever get this 100% right?) - fix in delete for GAE - auth.settings.login_captcha and auth.settings.register_captcha - crud.settings.create_captcha and crud.settings.update_captcha - automatic update button in admin ## 1.76.1 - editarea 0.8.2 + zencoding - new (better) cron locking meachnism - no storing session cookies on session.forget(), thank you Alvaro - routes_apps_raw allows disabling of request.args validation, thanks Jonathan and Denes - fixed problem with edit_languages ad multiple tabs, thanks Iceberg - crud captcha, thanks you Nathan - softcron disabled by default in wsgihandler and fcgihandler ## 1.75.5 - fixed behaviour with languages.py, thanks Iceberg - added chinese (thanks Iceberg) and Hungarian (thanks Gyuris) - fixed problem with GAE deleted by id (thanks what_ho) - fixed bug in LOAD with custom views, thanks vhang - improved IS_IN_SET takes iterator, dict, list and list of tuples, thanks Iceberg - Auth(...,controller='default') - Fixed major bug in parsing repeated request.vars, thanks Ben - IS_DATE and IS_DATETIME can now handle any 0Rows, DALRef->Reference - Experimental serializarion of Row and Rows (get serialized to dict and list of dict) - DAL(...,folder) and template.render(content=, context=) make it more modular ## 1.70.1 - Fixed bug with Rows.as_list and DALRef - Added Rows.as_dict (thanks Mr Freeze and Thedeus) - Added request.wsgi (thanks hcvst) allows running wsgi apps under web2py and applying wegi middleware to regular web2py actions that return strings. - Experimental distributed transactions between postgresql, mysql and firebird - Finally local_import is here! ## 1.69.1 - Fixed a bug introduced in 1.68 about inserting unicode in DAL - Fixed other small bugs - Better support for legacy databases (thank Denes) - response.meta replaces response.author, response.keywords, response.description - response.files stets dependes in plugins - better admin for packing/unpacking plugins - reference fiels nor evaluate to DALRef with lazy evaluation (cool, thanks Mr Freeze) - can insert a record in place of a reference - record[e] instead of record._extra[e] (tentatively!) - record.update_record() with no args - rows.find() (thanks Mr Freeze) - rows.exclude() - rows.sort() - rows[:] ## 1.68.2 - Fixing bug with admin and missing crontab - Fixing bug with rewrite.load on GAE (thanks Willian Wang) ## 1.68.1 - New official markdown with security fix - rows.first() - rows.last() - New cron - New hindi and spanish translation - cached uploads allow for progress bars (thanks AndCycle) - ingres support (thanks Chris) - legacy database support for db2, mssql with non-int primary keys (thanks Denes) - default setting of content-type (this may cause strange behavior in old apps when downloading images) - IS_UPPER and IS_LOWER works with unicode - CLENUP not takes regex of allowed/now allowed chartares - New rewrite.py allows dynamic routes - Better error messages for IS_INT_* and IS_FLOAT_* ## 1.67.2 - Security fix in markdown ## 1.67.1 - Bux fixed ## 1.67.0 - Python 2.4 support (again) - New layout for welcome - changed defauld field sizes to 512 - Field(uploadfolder="...") - appadmin works on GAE (again, somehting got broken at some point) - new wsgiserver 3.2.0 should fix recurrent broken download problems ## 1.66 - new doctypes - form.vars.newfilename - new HTML and XHTML helpers - better IS_LENGTH ## 1.65.13 - request.url (thanks Jonathan) - restored uploadfield_newfilename - new examples layout nad logo (thanks Mateusz) ## 1.65.12 - lables in auth auto-translate (thanks Alvaro) - better ldap_auth (thanks Fran) - auth chacks locally for blocked accounts even for alternate login methods (thanks Fran) ## 1.65.11 - Fixed a sqlhtml bug with image upload ## 1.65.3-10 - Fixed some small bugs and typos in the docstrings - Fixed AMF3 support ## 1.65.2 - Fixed some small auth bugs - Field.store(...) ## 1.65.1 - spreadsheet - shell history, thanks sherdim - crontab editor, thanks Angelo - gluon/contrib/login_methods/cas_auth.py (thanks Hans) - DAL(...) instead of SQLDB(...) - DAL('gae') instead of GQLDB() - Field instead of SQLField - (the old syntax still works) ## 1.65 - reST docstrings for Sphinx, thanks Hans - gluon/conrtib/login_methods/gae_google_account.py for google CAS login on GAE, thanks Hans - fixed problem with Auth and Firebird 'password' issue - new auth.settings.create_user_groups - tickets stored on datastore on GAE and also logged, thanks Hans - imporved IS_LENGTH with max and min, thanks Mateusz - improved IS_EMAIL with filters, thanks Mateusz - new IS_IMAGE checks for format and size, thanks Mateusz - new IS_IPV4, thanks Mateusz ## 1.64.4 - Som bug fixes - Informix Support - response.render(stream) - SQLFORM.factory - SQLFORM.widgets.radio and SQLFORM.widgets.checkboxes ## 1.64.3 - Some bug fixes ## 1.64.2 - New IS_COMPLEX validator, thank Mr. Freeze - Experimental Informix support - Autologin on registration ## 1.64 - Models 2-3 times faster (thanks Alexey) - Better LDAP support - Works with Jython (including sqlite and postgresql with zxJDBC): - download jython-2.5rc3.jar - download qlite-jdbc-3.6.14.2.jar - java -jar jython-xxx.jar - export CLASSPATH=$CLASSPATH:/Users/mdipierro/jython2.5rc3/sqlite-jdbc-3.6.14.2.jar - cd web2py - ../jython2.5rc3/jython web2py.py ## 1.63.5 - You can do jQuery.noConflict() without breaking web2py_ajax - Wigets can have attributes (thanks Hans) - Lots of internal cleanup and better code reusage (thanks Hans) ## 1.63-1.63.4 - no more import gluon. - support for generic.xxx - simplejson can handle datetime date and time ## 1.62 - SQLFORMS and crud now show readble fields - Better WingIDE support - Languages are automatically translated - T.force and lazyT works better, optional T.lazy=False - gluon.storage.Messages are now translated without T - if routes.py then request.env.web2py_original_uri - db.table.field.isattachment = True - internationalizaiton of admin by Yair - admin.py by Alvaro - new MENU helper - new w2p file format - new welcome app with auth, service and crud turned on ## 1.61 - fixed some typos - auth.add_permissions(0,....) 0 indicates group of current user - crud.update has deletable=True or False - fixed issue with GAE detection -> gluon.settings.web2py_runtime -> request ## 1.59-1.60 - fixed lots of small bugs - routes_in can filter by http_host ## 1.58 - Fixed some CRON bugs - Fixed a bug with new ajax edit - Experimental DB2 support in DAL - Customizable font size in admin edit page - New welcome/models/db.py shows how to memcache sessions on GAE with MEMDB - More expressive titles in admin - DB2 support. Thanks Denes! ## 1.57 - New ajax edit with keepalive (no longer logged out when editing code) - Fixed conflict resolution page. - Removed /user/bin/python from models/controllers ## 1.56.1-1.56.4 - fixing lots of small bugs with tool and languages - jquery.1.3.2 ## - One more feature in trunk.... - db.define_table('image',SQLField('file','upload')) - db.image.file.authorize=lambda row: True or False - then controller - def download(): return response.download(request,db) - id' is now a hidden field sqlform - gql references converted to long - admin login has autofocus - new notation proposed by Robin, db.table[id] - new UploadWidget shows images - new generic.html shows request, response, session - new LEGEND helper (thanks Marcus) - fixed doctests in sql (thanks Robin) - new notation for DB - record=db.table[id] - db.table[id]=dict(...) - del db.table[id] - request.env.web2py_version - new class gluon.storage.Settings has lock_keys, lock_values - jquery 1.3.1 - PEP8 compliance - new examples application - runs on jython (no database drivers yet, thanks Phyo) - fixed bugs in tests - passes all unittest but test_rewite (not sure it should pass that one) - Lots of patches from Fran Boone (about tools) and Dougla Soares de Andarde (Python 2.6 compliance, user use of hashlib instead of md5, new markdown2.py) - db.define_table('mytable',db.Field('somefield'),timestamp) Example: `` timestamp=SQLTable(None,'timestamp', SQLField('created_on','datetime', writable=False, default=request.now), SQLField('modified_on','datetime', writable=False, default=request.now,update=request.now)) `` and use it in all your tables - form=SQLFORM(db.circle,request.args[-1]) - and you get a create form if the URL ends in /0, you get an update - form if the URL ends in /[valid_record_id] make a display form in two possible ways: - form=SQLFORM(db.circle,record,readonly=True) - form=SQLFORM(db.circle,record_id,readonly=True) make an update form in two possible ways: - form=SQLFORM(db.circle,record) - form=SQLFORM(db.circle,record_id) make a create form in two possible ways: - form=SQLFORM(db.circle) - form=SQLFORM(db.circle,0) make a form that automatically computes area - pi=3.1415 - form=SQLFOM(db.circle) - if form.accepts(request.vars, - onvalidation=lambda form: form.vars.area=pi*form.vars.radius**2): ... make the radius appear in bold in display and table - db.circle.radius.represent=lambda value: B(value) automatically timestamp when record is modified - db.circle.modified_on.update=request.now automatically timestamp when record cretaed - db.circle.modified_on.default=request.now do not show now in display forms - db.circle.modified_on.readable=False do not show area in create/edit forms - db.circle.area.writable=False add a comment in the forms - db.circle.area.comment="(this is a comment)" ## 1.56 - Now you can do: `` db.define_table('cirlce', db.Field('radius','double'), db.Field('area','double'), db.Field('modified_on','datetime')) `` ## 1.55 - rowcount - fixed bug when IS_IN_DB involved multiple fields on GAE - T.set_current_languages - better unittests - response.custom_commit and response.custom_rollback - you can next cache calls (like cache a controller that caches a select). Thanks Iceberg - db(....id==None).select() no longer returns an error but an empty SQLRows on GAE - db(...).delete(delete_uploads=True) and SQLFORM.accepts(....delete_uploads=True) will delete all referenced uploaded files - DIV.element and DIV.update - sqlrows.json() - SQLFORM.widgets - URL(r=request,args=0) - IS_IN_DB(...,multiple=True) for Many2Many (sort of) - In URL(...,f) f is url encoded - In routes_in=[['a/b/c/','a/b/c/?var=value']] - simplejson 2.0.7 ## 1.54 - fixed minor bugs ## 1.53 - On GAE upload data goes automatically in datastore (blob created automatically) - New appadmin runs on GAE (most of it, not all) - Martin Hufsky patch allow slicing of fields in DAL expressions ## 1.52 - Fixed a minor bug with _extra[key] and key not str. - check for upgrade via ajax ## 1.51 - Fixed more bugs introduced in 1.49 (sql _extra and html select) - support for sqlite:memory: ## 1.50 - Fixed some bugs introduced in 1.49 ## 1.49 - fixed a bug with taskbar widget, thanks Mark - fixed a bug with form.latest - made many DIV methods private (_) ## 1.43-1.48 - html.py rewrite (better support for custom forms) (Bill Ferrett) - new stickers in examples (thanks Mateusz) - on windows can run in taskbar (Mark Larsen) - in admin|edit page link to edit|controller (Nathan Freeze) - better error codes and routes_onerror (Timothy Farrell) - DAL support for groupy and having - DAL support for expressions instead of values - DAL has experimental Informix support - fixed bug with non-printable chars in DAL - 'text' fields limited to 2**16 (to avoid mysql problems) - widget has -quiet and -debug (Attila Csipa) - web2py_session uses BLOB instead of TEXT - improved IS_URL - Runs with python 2.6 (Tim) - On GAE uses GAE for static files (Robin) ## 1.42 - fixed security issue by removing slash escape in mysql - removed random everywhere - use uuid for session and tickets - use http_x_forward_for to figure out the client causing a ticket - use longtext and longblob for mysql - main now really catches all exceptions - no more warnings on GAE ## web2py 1.31-1.41 - some bug fixes, mostly better appengine support - mssql support - firebird support - widgets support - connection pools ## web2py 1.30 - added flv to contenttype - added support for appengine ## web2py 1.29 - Now selet mutliple works with get, so does is IS_LENGTH - Added IS_LIST_OF - fixed problem with admin from windows and localhost ## web2py 1.28 - fixed bug with belongs, faster sql.py - included jquery.js - minor aestetical fixes - sortable.js is gone ## web2py 1.27 - IS_NULL_OR now works will all fields - admin creates paths to static files - wsgiserver options are passed to HttpServer - faking limitby for oracle to make appadmin work - all objects inherit from object - fixed bug in app names with . - fixed bug in created RestrictedError object on windows - shell is now in gluon and accessible via web2py.py ## web2py 1.26 - added shell.py (thanks Limodou!) - added memcache support ## web2py 1.22-1.25 - fixed minor bugs, added IS_NULL_OR ## web2py 1.21 - replaced paste.httpserver with cherrypy.wsgi server - temporary sessions are no longer saved - widget has [stop] button and graph - logging is done by main by appfactory - fixed a bug in sql belongs ## web2py 1.20 - new IFRAME, LABEL, FIELDSET validators - P(..cr2br=True) option - FORM and SQLFORM have hidden=dict(...) option for REST - testing framework. - improved examples pages ## web2py 1.19 - minor typos ## web2py v1.18 - removed vulnerability in accept_languages and session_id - Minor bug fixes. Typos and cleanup cache. Textarea now clears. - Support for PyAMF. - T returns a class, not a string - new template parser (faster?) - got rid of sintaxhighlighter in favor of server side CODE - fix problem with cacheondisk locking - fix 'None' instead of NULL in IS_NOT_IN_DB (I think) - gluon.contrib.markdown - notnull and unique in SQLField now supported (tested on sqlite mysql and postgresql) - Storage now has __getstate__ and __setstate__ needed for pickling. - session files are now locked to make it work better with asynchronous requests - cxoracle should work, apart for limitby - .../examples is now mapped to .../examples/default/index etc. - .../init is now mapped to .../welcome if init is not present ## web2py v1.17 - I posted v1.16 too soon. v1.17 was released after 1h to fix some bugs. ## web2py v1.16 - yes we changed the name! Turns out Gluon was trademarked by somebody else. - Although we are not infringing the trademark since this is a non-commercial - product we could have run into some issues. So we have been professional - and changed the name to web2py. - Now SQLFORMs and FORM can have a formname and multiple forms are allowed - per page. - A new examples/default/index page. - web2py.py instead of runme.py - mysql sets utf8 encoding. - input integer field values are automatically converted int(). ## Gluon v1.15 - New try:... except. in gluon/main.py for when sessions cannot be saved - Now validator/formatter method allows IS_DATE('%d/%m/%Y') ## Gluon v1.14 - Fixed a bug fix in URLs ## Gluon v1.13 - (this is one of the biggest revisions ever) - Improved sql.py has support MySQL, cxOracle (experimental), extract, like and better testing - SQLDB.tables and SQLTable.fields are now SQLCalableList objects - Fixed bug with editing integer fields storing zero - Admin interface now says "insert new [tablename]" and display insert, select or update properly in the title. - Added a cache mechamism. Works for data, controllers, views and SQLRows. - main.py now uses a request.folder absolute path when not os.name in ['nt','posix']. Seems to work on windowsce devices, except no file locking has consequences. - Now you can put modules in applications/[anyapp]/modules and import them with - import applications.[anyapp].modules.[module] as [module] - Fixed problem with init - New applications/examples/controller/global.py controller for docs. ## Gluon v1.12 - in sql.py - handles NULL values properly - unicode support (data always stored in utf-8) - 'date' -> datetime.date ,'time' -> datetime.time, 'datetime' -> datetime.datetime, 'boolean' -> True/False - most types have default validators - SQLField(...,required=True) option. - SQLRows has __str__ that serializes in CSV and xml() that serializes in HTML - SQLTable has import_from_csv_file(...) - gluon.simplejson for AJAX - in validators.py - IS_IN_DB(db,..) - db can be an SQLSet or an SQLDB - better error messages - in admin - new import/export in csv, update and delete interface. - in appadmin - edit form allows to keep stored encrypted password - in main.py - http://host not defaults to http://host/init/default/index - New third party modules - gluon.simplejson(.dumps, .loads) - gluon.pyrtf(.dumps) - gluon.rss2(.dumps) ## Gluon v1.11 - appadmin allows to keep or delete uploaded files ## Gluon v1.10 - fixed concurrency problems with SQLDB._instances and SQLDB._folders, now use lock - now, by default, edit SQLFORMs retain uploaded files ## Gluon v1.9 - allow "count(*)" in select - db.execute() - fixed problem with continue and return in template - removed try: ... except in sql.py - fixed '\t' ## Gluon v1.8 - no more chdir (thread unsafe) - no more sys.stdout (thread unsafe) - response.body is StringIO() - admin/default/site informs about upgrade - response.locker (optional) ## Gluon v1.5 -
-> in errors.html - replace('//','////') in sub in template.py ## Gluon v1.4 - fixed problem with IS_INT_IN_RANGE and IS_FLOAT_IN_RANGE. Now an error in a validator is reported as a ticket. Good validators should not raise Exceptions. - IS_IN_DB displays "label (id)" - it can upload files without extension - migration is now optional (define_table has migrate=False option) ## Gluon v1.3 - added IS_IN_DB, IS_NOT_IN_DB and updated examples accordingly ## Gluon v1.1 -> v1.2 - fixed some typos in examples - IS_IN_SET now supports labels - cleanup in sql.py does not cleanup, just checks valid field and table names ## Gluon v1.0 -> v1.1 - bug in sqlhtml with JOINS queries ## EWF v1.7 -> Gluon v1.0 - Name change - Improved layout.html ## EWF v1.6 -> v1.7 - in paths replace '\' with '/' to fix problem with windows paths - using limitby in database administration - replaced mime/miltupart with multipart/form-data to fix a windows problem ## EWF v1.5 -> v1.6 (2007) - load and save .py in ascii, avoids problem with LF+CR on windows - added path.join in compileapp, fixed problem with Windows compileapp web2py-1.99.7.orig/logging.example.conf0000644000175000017500000000612411724764235016417 0ustar josejose# Configure the Python logging facility. # To use this file, copy it to logging.conf and edit logging.conf as required. # See http://docs.python.org/library/logging.html for details of the logging facility. # Note that this is not the newer logging.config facility. # # The default configuration is console-based (stdout) for backward compatibility; # edit the [handlers] section to choose a different logging destination. # # Note that file-based handlers are thread-safe but not mp-safe; # for mp-safe logging, configure the appropriate syslog handler. # # To create a configurable logger for application 'myapp', add myapp to # the [loggers] keys list and add a [logger_myapp] section, using # [logger_welcome] as a starting point. # # In your application, create your logger in your model or in a controller: # # import logging # logger = logging.getLogger("web2py.app.myapp") # logger.setLevel(logging.DEBUG) # # To log a message: # # logger.debug("You ought to know that %s" % details) # # Note that a logging call will be governed by the most restrictive level # set by the setLevel call, the [logger_myapp] section, and the [handler_...] # section. For example, you will not see DEBUG messages unless all three are # set to DEBUG. [loggers] keys=root,rocket,markdown,web2py,rewrite,app,welcome [handlers] keys=consoleHandler #keys=consoleHandler,rotatingFileHandler #keys=osxSysLogHandler [formatters] keys=simpleFormatter [logger_root] level=WARNING handlers=consoleHandler [logger_web2py] level=WARNING handlers=consoleHandler qualname=web2py propagate=0 [logger_rewrite] level=WARNING qualname=web2py.rewrite handlers=consoleHandler propagate=0 # generic app handler [logger_app] level=WARNING qualname=web2py.app handlers=consoleHandler propagate=0 # welcome app handler [logger_welcome] level=WARNING qualname=web2py.app.welcome handlers=consoleHandler propagate=0 # loggers for legacy getLogger calls: Rocket and markdown [logger_rocket] level=WARNING handlers=consoleHandler qualname=Rocket propagate=0 [logger_markdown] level=WARNING handlers=consoleHandler qualname=markdown propagate=0 [handler_consoleHandler] class=StreamHandler level=WARNING formatter=simpleFormatter args=(sys.stdout,) # Rotating file handler # mkdir logs in the web2py base directory if not already present # args: (filename[, mode[, maxBytes[, backupCount[, encoding[, delay]]]]]) # [handler_rotatingFileHandler] class=handlers.RotatingFileHandler level=INFO formatter=simpleFormatter args=("logs/web2py.log", "a", 1000000, 5) [handler_osxSysLogHandler] class=handlers.SysLogHandler level=WARNING formatter=simpleFormatter args=("/var/run/syslog", handlers.SysLogHandler.LOG_DAEMON) [handler_linuxSysLogHandler] class=handlers.SysLogHandler level=WARNING formatter=simpleFormatter args=("/dev/log", handlers.SysLogHandler.LOG_DAEMON) [handler_remoteSysLogHandler] class=handlers.SysLogHandler level=WARNING formatter=simpleFormatter args=(('sysloghost.domain.com', handlers.SYSLOG_UDP_PORT), handlers.SysLogHandler.LOG_DAEMON) [formatter_simpleFormatter] format=%(asctime)s - %(name)s - %(levelname)s - %(message)s datefmt= web2py-1.99.7.orig/scripts/0000755000175000017500000000000011727360024014143 5ustar josejoseweb2py-1.99.7.orig/scripts/update-web2py.sh0000755000175000017500000000236411724764235017210 0ustar josejose#!/bin/bash # # update-web2py.sh # 2009-12-16 # # install in web2py/.. or web2py/ or web2py/scripts as update-web2py.sh # make executable: chmod +x web2py.sh # # save a snapshot of current web2py/ as web2py/../web2py-version.zip # download the current stable version of web2py # unzip downloaded version over web2py/ # TARGET=web2py if [ ! -d $TARGET ]; then # in case we're in web2py/ if [ -f ../$TARGET/VERSION ]; then cd .. # in case we're in web2py/scripts elif [ -f ../../$TARGET/VERSION ]; then cd ../.. fi fi read a VERSION c < $TARGET/VERSION SAVE=$TARGET-$VERSION URL=http://www.web2py.com/examples/static/web2py_src.zip ZIP=`basename $URL` SAVED="" # Save a zip archive of the current version, # but don't overwrite a previous save of the same version. # if [ -f $SAVE.zip ]; then echo "Remove or rename $SAVE.zip first" >&2 exit 1 fi if [ -d $TARGET ]; then echo -n ">>Save old version: " >&2 cat $TARGET/VERSION >&2 zip -q -r $SAVE.zip $TARGET SAVED=$SAVE.zip fi # # Download the new version. # echo ">>Download latest web2py release:" >&2 curl -O $URL # # Unzip into web2py/ # unzip -q -o $ZIP rm $ZIP echo -n ">>New version: " >&2 cat $TARGET/VERSION >&2 if [ "$SAVED" != "" ]; then echo ">>Old version saved as $SAVED" fi web2py-1.99.7.orig/scripts/cpplugin.py0000644000175000017500000000141611724764235016351 0ustar josejoseimport sys, glob, os, shutil name=sys.argv[1] app=sys.argv[2] dest=sys.argv[3] a=glob.glob('applications/%(app)s/*/plugin_%(name)s.*' % dict(app=app,name=name)) b=glob.glob('applications/%(app)s/*/plugin_%(name)s/*' % dict(app=app,name=name)) for f in a: print 'cp %s ...' % f, shutil.copyfile(f,os.path.join('applications',dest,*f.split('/')[2:])) print 'done' for f in b: print 'cp %s ...' % f, path = f.split('/') for i in range(3,len(path)): try: os.mkdir(os.path.join('applications',dest,*path[2:i])) except: pass path = os.path.join('applications',dest,*f.split('/')[2:]) if os.path.isdir(f): if not os.path.exists(path): shutil.copytree(f,path) else: shutil.copyfile(f,path) print 'done' web2py-1.99.7.orig/scripts/web2py.ubuntu.sh0000755000175000017500000001250111724764235017243 0ustar josejose#! /bin/sh ### BEGIN INIT INFO # startup script for Ubuntu and Debian Linux servers # # To use this file # cp ubuntu.sh /etc/init.d/web2py # # To automatitcally start at reboot # sudo update-rc.d web2py defaults # # Provides: web2py # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: S 0 1 6 # Short-Description: web2py initscript # Description: This file starts up the web2py server. ### END INIT INFO # Author: Mark Moore PATH=/usr/sbin:/usr/bin:/sbin:/bin DESC="Web Framework" NAME=web2py PIDDIR=/var/run/$NAME PIDFILE=$PIDDIR/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME DAEMON=/usr/bin/python DAEMON_DIR=/usr/lib/$NAME DAEMON_ARGS="web2py.py --password= --pid_filename=$PIDFILE" DAEMON_USER=web2py # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables [ -f /etc/default/rcS ] && . /etc/default/rcS # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started # The PIDDIR should normally be created during installation. This # fixes things just in case. [ -d $PIDDIR ] || mkdir -p $PIDDIR [ -n "$DAEMON_USER" ] && chown --recursive $DAEMON_USER $PIDDIR # Check to see if the daemon is already running. start-stop-daemon --stop --test --quiet --pidfile $PIDFILE \ && return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE \ ${DAEMON_USER:+--chuid $DAEMON_USER} --chdir $DAEMON_DIR \ --background --exec $DAEMON -- $DAEMON_ARGS \ || return 2 return 0; } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE RETVAL=$? # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } # # Function that restarts the daemon/service # do_restart() { # Return # 0 if daemon was (re-)started # 1 if daemon was not strated or re-started do_stop case "$?" in 0|1) do_start case "$?" in 0) RETVAL=0 ;; 1) RETVAL=1 ;; # Old process is still running *) RETVAL=1 ;; # Failed to start esac ;; *) RETVAL=1 ;; # Failed to stop esac return "$RETVAL" } # # Function that sends a SIGHUP to the daemon/service # do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE return 0 } # # Function that queries the status of the daemon/service # do_status() { # Return # 0 if daemon is responding and OK # 1 if daemon is not responding, but PIDFILE exists # 2 if daemon is not responding, but LOCKFILE exists # 3 if deamon is not running # 4 if daemon status is unknown # Check to see if the daemon is already running. start-stop-daemon --stop --test --quiet --pidfile $PIDFILE \ && return 0 [ -f $PIDFILE ] && return 1 return 3 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start RETVAL=$? [ "$VERBOSE" != no ] && case "$RETVAL" in 0|1) log_end_msg 0 ;; *) log_end_msg 1 ;; esac exit "$RETVAL" ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop RETVAL=$? [ "$VERBOSE" != no ] && case "$RETVAL" in 0|1) log_end_msg 0 ;; *) log_end_msg 1 ;; esac exit "$RETVAL" ;; #reload|force-reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #[ "$VERBOSE" != no ] && log_daemon_msg "Reloading $DESC" "$NAME" #do_reload #RETVAL=$? #[ "$VERBOSE" != no ] && log_end_msg $? #exit "$RETVAL" #;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # [ "$VERBOSE" != no ] && log_daemon_msg "Restarting $DESC" "$NAME" do_restart RETVAL=$? [ "$VERBOSE" != no ] && log_end_msg "$RETVAL" exit "$RETVAL" ;; status) do_status RETVAL=$? [ "$VERBOSE" != no ] && case "$RETVAL" in 0) log_success_msg "$NAME is running" ;; *) log_failure_msg "$NAME is not running" ;; esac exit "$RETVAL" ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2 exit 3 ;; esac : # This was based off /etc/init.d/skeleton from the Ubuntu 8.04 Hardy release. # (md5sum: da0162012b6a916bdbd4e2580282af78). If we notice that changes, we # should re-examine things. # The configuration at the very top seems to be documented as part of the # Linux Standard Base (LSB) Specification. See section 20.6 Facility Names # in particular. This is also where I got the spec for the status parm. # References: # http://refspecs.linux-foundation.org/LSB_3.2.0/LSB-Core-generic/LSB-Core-generic.pdf # Debian Policy SysV init: http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit # Examine files in /usr/share/doc/sysv-rc/ web2py-1.99.7.orig/scripts/tickets2db.py0000755000175000017500000000256111724764235016573 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import os import time import stat import datetime from gluon.utils import md5_hash from gluon.restricted import RestrictedError, TicketStorage from gluon import DAL SLEEP_MINUTES = 5 errors_path = os.path.join(request.folder, 'errors') try: db_string = open(os.path.join(request.folder, 'private', 'ticket_storage.txt')).read().replace('\r','').replace('\n','').strip() except: db_string = 'sqlite://storage.db' db_path = os.path.join(request.folder, 'databases') tk_db = DAL(db_string, folder=db_path, auto_import=True) ts = TicketStorage(db=tk_db) tk_table = ts._get_table(db=tk_db, tablename=ts.tablename, app=request.application) hashes = {} while 1: if request.tickets_db: print "You're storing tickets yet in database" sys.exit(1) for file in os.listdir(errors_path): filename = os.path.join(errors_path, file) modified_time = os.stat(filename)[stat.ST_MTIME] modified_time = datetime.datetime.fromtimestamp(modified_time) ticket_id = file ticket_data = open(filename).read() tk_table.insert(ticket_id=ticket_id, ticket_data=ticket_data, created_datetime=modified_time ) tk_db.commit() os.unlink(filename) time.sleep(SLEEP_MINUTES * 60) web2py-1.99.7.orig/scripts/web2py.archlinux.sh0000755000175000017500000000121211724764235017713 0ustar josejose#!/bin/bash # the script should be run # from WEB2PY root directory prog=`basename $0` cd `pwd` chmod +x $prog function web2py_start { nohup ./$prog -a "" 2>/dev/null & pid=`pgrep $prog | tail -1` if [ $pid -ne $$ ] then echo "WEB2PY has been started." fi } function web2py_stop { kill -15 `pgrep $prog | grep -v $$` 2>/dev/null pid=`pgrep $prog | head -1` if [ $pid -ne $$ ] then echo "WEB2PY has been stopped." fi } case "$1" in start) web2py_start ;; stop) web2py_stop ;; restart) web2py_stop web2py_start ;; *) echo "Usage: $prog [start|stop|restart]" ;; esac exit 0 web2py-1.99.7.orig/scripts/make_min_web2py.py0000644000175000017500000000465711724764235017612 0ustar josejoseUSAGE = """ from web2py main folder python scripts/make_min_web2py.py /path/to/minweb2py it will mkdir minweb2py and build a minimal web2py installation - no admin, no examples, one line welcome - no scripts - drops same rarely used contrib modules - more modules could be dropped but minimal difference """ # files to include from top level folder (default.py will be rebuilt) REQUIRED = """ VERSION web2py.py fcgihandler.py gaehandler.py wsgihandler.py anyserver.py applications/__init__.py applications/welcome/controllers/default.py """ # files and folders to exclude from gluon folder (comment with # if needed) IGNORED = """ gluon/contrib/comet_messaging.py gluon/contrib/feedparser.py gluon/contrib/generics.py gluon/contrib/gql.py gluon/contrib/populate.py gluon/contrib/sms_utils.py gluon/contrib/spreadsheet.py gluon/tests/ gluon/contrib/markdown/ gluon/contrib/pyfpdf/ gluon/contrib/pymysql/ gluon/contrib/pyrtf/ gluon/contrib/pysimplesoap/ """ import sys, os, shutil, glob def main(): global REQUIRED, IGNORED if len(sys.argv)<2: print USAGE # make target folder target = sys.argv[1] os.mkdir(target) # change to os specificsep REQUIRED = REQUIRED.replace('/',os.sep) IGNORED = IGNORED.replace('/',os.sep) # make a list of all files to include files = [x.strip() for x in REQUIRED.split('\n') \ if x and not x[0]=='#'] ignore = [x.strip() for x in IGNORED.split('\n') \ if x and not x[0]=='#'] def accept(filename): for p in ignore: if filename.startswith(p): return False return True pattern = os.path.join('gluon','*.py') while True: newfiles = [x for x in glob.glob(pattern) if accept(x)] if not newfiles: break files += newfiles pattern = os.path.join(pattern[:-3],'*.py') # copy all files, make missing folder, build default.py files.sort() defaultpy = os.path.join('applications','welcome','controllers','default.py') for f in files: dirs = f.split(os.path.sep) for i in range(1,len(dirs)): try: os.mkdir(target+os.sep+os.path.join(*dirs[:i])) except OSError: pass if f==defaultpy: open(os.path.join(target,f),'w').write('def index(): return "hello"\n') else: shutil.copyfile(f,os.path.join(target,f)) if __name__=='__main__': main() web2py-1.99.7.orig/scripts/setup-web2py-ubuntu.sh0000755000175000017500000001071311724764235020403 0ustar josejoseecho "This script will: 1) install all modules need to run web2py on Ubuntu/Debian 2) install web2py in /home/www-data/ 3) create a self signed sll certificate 4) setup web2py with mod_wsgi 5) overwrite /etc/apache2/sites-available/default 6) restart apache. You may want to read this cript before running it. Press a key to continue...[ctrl+C to abort]" read CONFIRM #!/bin/bash # optional # dpkg-reconfigure console-setup # dpkg-reconfigure timezoneconf # nano /etc/hostname # nano /etc/network/interfaces # nano /etc/resolv.conf # reboot now # ifconfig eth0 echo "installing useful packages" echo "==========================" apt-get update apt-get -y install ssh apt-get -y install zip unzip apt-get -y install tar apt-get -y install openssh-server apt-get -y install build-essential apt-get -y install python2.5 apt-get -y install ipython apt-get -y install python-dev apt-get -y install postgresql apt-get -y install apache2 apt-get -y install libapache2-mod-wsgi apt-get -y install python2.5-psycopg2 apt-get -y install postfix apt-get -y install wget apt-get -y install python-matplotlib apt-get -y install python-reportlab apt-get -y install mercurial /etc/init.d/postgresql restart # optional, uncomment for emacs # apt-get -y install emacs # optional, uncomment for backups using samba # apt-get -y install samba # apt-get -y install smbfs echo "downloading, installing and starting web2py" echo "===========================================" cd /home mkdir www-data cd www-data rm web2py_src.zip* wget http://web2py.com/examples/static/web2py_src.zip unzip web2py_src.zip chown -R www-data:www-data web2py echo "setting up apache modules" echo "=========================" a2enmod ssl a2enmod proxy a2enmod proxy_http a2enmod headers a2enmod expires mkdir /etc/apache2/ssl echo "creating a self signed certificate" echo "==================================" openssl genrsa 1024 > /etc/apache2/ssl/self_signed.key chmod 400 /etc/apache2/ssl/self_signed.key openssl req -new -x509 -nodes -sha1 -days 365 -key /etc/apache2/ssl/self_signed.key > /etc/apache2/ssl/self_signed.cert openssl x509 -noout -fingerprint -text < /etc/apache2/ssl/self_signed.cert > /etc/apache2/ssl/self_signed.info echo "rewriting your apache config file to use mod_wsgi" echo "=================================================" echo ' NameVirtualHost *:80 NameVirtualHost *:443 WSGIDaemonProcess web2py user=www-data group=www-data WSGIProcessGroup web2py WSGIScriptAlias / /home/www-data/web2py/wsgihandler.py AllowOverride None Order Allow,Deny Deny from all Allow from all AliasMatch ^/([^/]+)/static/(.*) \ /home/www-data/web2py/applications/$1/static/$2 Options -Indexes Order Allow,Deny Allow from all Deny from all Deny from all CustomLog /var/log/apache2/access.log common ErrorLog /var/log/apache2/error.log SSLEngine on SSLCertificateFile /etc/apache2/ssl/self_signed.cert SSLCertificateKeyFile /etc/apache2/ssl/self_signed.key WSGIProcessGroup web2py WSGIScriptAlias / /home/www-data/web2py/wsgihandler.py AllowOverride None Order Allow,Deny Deny from all Allow from all AliasMatch ^/([^/]+)/static/(.*) \ /home/www-data/web2py/applications/$1/static/$2 Options -Indexes ExpiresActive On ExpiresDefault "access plus 1 hour" Order Allow,Deny Allow from all CustomLog /var/log/apache2/access.log common ErrorLog /var/log/apache2/error.log ' > /etc/apache2/sites-available/default # echo "setting up PAM" # echo "================" # sudo apt-get install pwauth # sudo ln -s /etc/apache2/mods-available/authnz_external.load /etc/apache2/mods-enabled # ln -s /etc/pam.d/apache2 /etc/pam.d/httpd # usermod -a -G shadow www-data echo "restarting apage" echo "================" /etc/init.d/apache2 restart cd /home/www-data/web2py sudo -u www-data python -c "from gluon.widget import console; console();" sudo -u www-data python -c "from gluon.main import save_password; save_password(raw_input('admin password: '),443)" echo "done!" web2py-1.99.7.orig/scripts/cleancss.py0000755000175000017500000000171111724764235016324 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import re filename = sys.argv[1] datafile = open(filename, 'r') try: data = '\n'+datafile.read() finally: datafile.close() SPACE = '\n ' if '-n' in sys.argv[1:] else ' ' data = re.compile('(?.*)').sub('/* \g */',data) data = re.compile('[ ]+').sub(' ', data) data = re.compile('\s*{\s*').sub(' {'+SPACE, data) data = re.compile('\s*;\s*').sub(';'+SPACE, data) data = re.compile(',\s*').sub(', ', data) data = re.compile('\s*\*/\s*').sub('*/'+SPACE, data) data = re.compile('\s*}\s*').sub(SPACE+'}\n', data) data = re.compile('\n\s*\n').sub('\n', data) data = re.compile(';\s+/\*').sub('; /*',data) data = re.compile('\*/\s+/\*').sub(' ',data) data = re.compile('[ ]+\n').sub('\n', data) data = re.compile('\n\s*/[\*]+(?P.*?)[\*]+/',re.DOTALL).sub( '\n/*\g*/\n',data) data = re.compile('[ \t]+(?P\S.+?){').sub('\g{',data) data = data.replace('}','}\n') print data web2py-1.99.7.orig/scripts/extract_pgsql_models.py0000644000175000017500000002361511724764235020760 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """Create web2py model (python code) to represent PostgreSQL tables. Features: * Uses ANSI Standard INFORMATION_SCHEMA (might work with other RDBMS) * Detects legacy "keyed" tables (not having an "id" PK) * Connects directly to running databases, no need to do a SQL dump * Handles notnull, unique and referential constraints * Detects most common datatypes and default values * Support PostgreSQL columns comments (ie. for documentation) Requeriments: * Needs PostgreSQL pyscopg2 python connector (same as web2py) * If used against other RDBMS, import and use proper connector (remove pg_ code) Created by Mariano Reingart, based on a script to "generate schemas from dbs" (mysql) by Alexandre Andrade """ _author__ = "Mariano Reingart " HELP = """ USAGE: extract_pgsql_models db host port user passwd Call with PostgreSQL database connection parameters, web2py model will be printed on standard output. EXAMPLE: python extract_pgsql_models.py mydb localhost 5432 reingart saraza """ # Config options DEBUG = False # print debug messages to STDERR SCHEMA = 'public' # change if not using default PostgreSQL schema # Constant for Field keyword parameter order (and filter): KWARGS = ('type', 'length', 'default', 'required', 'ondelete', 'notnull', 'unique', 'label', 'comment') import sys def query(conn, sql,*args): "Execute a SQL query and return rows as a list of dicts" cur = conn.cursor() ret = [] try: if DEBUG: print >> sys.stderr, "QUERY: ", sql % args cur.execute(sql, args) for row in cur: dic = {} for i, value in enumerate(row): field = cur.description[i][0] dic[field] = value if DEBUG: print >> sys.stderr, "RET: ", dic ret.append(dic) return ret finally: cur.close() def get_tables(conn, schema=SCHEMA): "List table names in a given schema" rows = query(conn, """SELECT table_name FROM information_schema.tables WHERE table_schema = %s ORDER BY table_name""", schema) return [row['table_name'] for row in rows] def get_fields(conn, table): "Retrieve field list for a given table" if DEBUG: print >> sys.stderr, "Processing TABLE", table rows = query(conn, """ SELECT column_name, data_type, is_nullable, character_maximum_length, numeric_precision, numeric_precision_radix, numeric_scale, column_default FROM information_schema.columns WHERE table_name=%s ORDER BY ordinal_position""", table) return rows def define_field(conn, table, field, pks): "Determine field type, default value, references, etc." f={} ref = references(conn, table, field['column_name']) if ref: f.update(ref) elif field['column_default'] and \ field['column_default'].startswith("nextval") and \ field['column_name'] in pks: # postgresql sequence (SERIAL) and primary key! f['type'] = "'id'" elif field['data_type'].startswith('character'): f['type'] = "'string'" if field['character_maximum_length']: f['length'] = field['character_maximum_length'] elif field['data_type'] in ('text', ): f['type'] = "'text'" elif field['data_type'] in ('boolean', 'bit'): f['type'] = "'boolean'" elif field['data_type'] in ('integer', 'smallint', 'bigint'): f['type'] = "'integer'" elif field['data_type'] in ('double precision', 'real' ): f['type'] = "'double'" elif field['data_type'] in ('timestamp', 'timestamp without time zone'): f['type'] = "'datetime'" elif field['data_type'] in ('date', ): f['type'] = "'date'" elif field['data_type'] in ('time', 'time without time zone'): f['type'] = "'time'" elif field['data_type'] in ('numeric', 'currency'): f['type'] = "'decimal'" f['precision'] = field['numeric_precision'] f['scale'] = field['numeric_scale'] or 0 elif field['data_type'] in ('bytea', ): f['type'] = "'blob'" elif field['data_type'] in ('point', 'lseg', 'polygon', 'unknown', 'USER-DEFINED'): f['type'] = "" # unsupported? else: raise RuntimeError("Data Type not supported: %s " % str(field)) try: if field['column_default']: if field['column_default']=="now()": d = "request.now" elif field['column_default']=="true": d = "True" elif field['column_default']=="false": d = "False" else: d = repr(eval(field['column_default'])) f['default'] = str(d) except (ValueError, SyntaxError): pass except Exception, e: raise RuntimeError("Default unsupported '%s'" % field['column_default']) if not field['is_nullable']: f['notnull'] = "True" comment = get_comment(conn, table, field) if comment is not None: f['comment'] = repr(comment) return f def is_unique(conn, table, field): "Find unique columns (incomplete support)" rows = query(conn, """ SELECT information_schema.constraint_column_usage.column_name FROM information_schema.table_constraints NATURAL JOIN information_schema.constraint_column_usage WHERE information_schema.table_constraints.table_name=%s AND information_schema.constraint_column_usage.column_name=%s AND information_schema.table_constraints.constraint_type='UNIQUE' ;""", table, field['column_name']) return rows and True or False def get_comment(conn, table, field): "Find the column comment (postgres specific)" rows = query(conn, """ SELECT d.description AS comment FROM pg_class c JOIN pg_description d ON c.oid=d.objoid JOIN pg_attribute a ON c.oid = a.attrelid WHERE c.relname=%s AND a.attname=%s AND a.attnum = d.objsubid ;""", table, field['column_name']) return rows and rows[0]['comment'] or None def primarykeys(conn, table): "Find primary keys" rows = query(conn, """ SELECT information_schema.constraint_column_usage.column_name FROM information_schema.table_constraints NATURAL JOIN information_schema.constraint_column_usage WHERE information_schema.table_constraints.table_name=%s AND information_schema.table_constraints.constraint_type='PRIMARY KEY' ;""", table) return [row['column_name'] for row in rows] def references(conn, table, field): "Find a FK (fails if multiple)" rows1 = query(conn, """ SELECT table_name, column_name, constraint_name, update_rule, delete_rule, ordinal_position FROM information_schema.key_column_usage NATURAL JOIN information_schema.referential_constraints NATURAL JOIN information_schema.table_constraints WHERE information_schema.key_column_usage.table_name=%s AND information_schema.key_column_usage.column_name=%s AND information_schema.table_constraints.constraint_type='FOREIGN KEY' ;""", table, field) if len(rows1)==1: rows2 = query(conn, """ SELECT table_name, column_name, * FROM information_schema.constraint_column_usage WHERE constraint_name=%s """, rows1[0]['constraint_name']) row = None if len(rows2)>1: row = rows2[int(rows1[0]['ordinal_position'])-1] keyed = True if len(rows2)==1: row = rows2[0] keyed = False if row: if keyed: # THIS IS BAD, DON'T MIX "id" and primarykey!!! ref = {'type': "'reference %s.%s'" % (row['table_name'], row['column_name'])} else: ref = {'type': "'reference %s'" % (row['table_name'],)} if rows1[0]['delete_rule']!="NO ACTION": ref['ondelete'] = repr(rows1[0]['delete_rule']) return ref elif rows2: raise RuntimeError("Unsupported foreign key reference: %s" % str(rows2)) elif rows1: raise RuntimeError("Unsupported referential constraint: %s" % str(rows1)) def define_table(conn, table): "Output single table definition" fields = get_fields(conn, table) pks = primarykeys(conn, table) print "db.define_table('%s'," % (table, ) for field in fields: fname = field['column_name'] fdef = define_field(conn, table, field, pks) if fname not in pks and is_unique(conn, table, field): fdef['unique'] = "True" if fdef['type']=="'id'" and fname in pks: pks.pop(pks.index(fname)) print " Field('%s', %s)," % (fname, ', '.join(["%s=%s" % (k, fdef[k]) for k in KWARGS if k in fdef and fdef[k]])) if pks: print " primarykey=[%s]," % ", ".join(["'%s'" % pk for pk in pks]) print " migrate=migrate)" print def define_db(conn, db, host, port, user, passwd): "Output database definition (model)" dal = 'db = DAL("postgres://%s:%s@%s:%s/%s", pool_size=10)' print dal % (user, passwd, host, port, db) print print "migrate = False" print for table in get_tables(conn): define_table(conn, table) if __name__ == "__main__": if len(sys.argv) < 6: print HELP else: # Parse arguments from command line: db, host, port, user, passwd = sys.argv[1:6] # Make the database connection (change driver if required) import psycopg2 cnn = psycopg2.connect(database=db, host=host, port=port, user=user, password=passwd, ) # Start model code generation: define_db(cnn, db, host, port, user, passwd) web2py-1.99.7.orig/scripts/cleanhtml.py0000755000175000017500000000443611724764235016507 0ustar josejoseimport sys import re def cleancss(text): text=re.compile('\s+').sub(' ', text) text=re.compile('\s*(?P,|:)\s*').sub('\g ', text) text=re.compile('\s*;\s*').sub(';\n ', text) text=re.compile('\s*\{\s*').sub(' {\n ', text) text=re.compile('\s*\}\s*').sub('\n}\n\n', text) return text def cleanhtml(text): text=text.lower() r=re.compile('\', re.DOTALL) scripts=r.findall(text) text=r.sub(' ' >/etc/uwsgi-python/apps-available/web2py.xml ln -s /etc/uwsgi-python/apps-available/web2py.xml /etc/uwsgi-python/apps-enabled/web2py.xml # Install Web2py apt-get -y install unzip cd /home mkdir www-data cd www-data wget http://web2py.com/examples/static/web2py_src.zip unzip web2py_src.zip rm web2py_src.zip chown -R www-data:www-data web2py cd /home/www-data/web2py sudo -u www-data python -c "from gluon.main import save_password; save_password('$PW',443)" /etc/init.d/uwsgi-python restart /etc/init.d/nginx restart web2py-1.99.7.orig/scripts/setup-web2py-fedora.sh0000644000175000017500000002321111724764235020313 0ustar josejoseecho "This script will: 1) Install modules needed to run web2py on Fedora and CentOS/RHEL 2) Install Python 2.6 to /opt and recompile wsgi if not provided 2) Install web2py in /opt/web-apps/ 3) Configure SELinux and iptables 5) Create a self signed ssl certificate 6) Setup web2py with mod_wsgi 7) Create virtualhost entries so that web2py responds for '/' 8) Restart Apache. You should probably read this script before running it. Although SELinux permissions changes have been made, further SELinux changes will be required for your personal apps. (There may also be additional changes required for the bundled apps.) As a last resort, SELinux can be disabled. A simple iptables configuration has been applied. You may want to review it to verify that it meets your needs. Finally, if you require a proxy to access the Internet, please set up your machine to do so before running this script. (author: berubejd) Press ENTER to continue...[ctrl+C to abort]" read CONFIRM #!/bin/bash ### ### Phase 0 - This may get messy. Lets work from a temporary directory ### current_dir=`pwd` if [ -d /tmp/setup-web2py/ ]; then mv /tmp/setup-web2py/ /tmp/setup-web2py.old/ fi mkdir -p /tmp/setup-web2py cd /tmp/setup-web2py ### ### Phase 1 - Requirements installation ### echo echo " - Installing packages" echo # Verify packages are up to date yum update # Install required packages yum install httpd mod_ssl mod_wsgi wget python # Verify we have at least Python 2.5 typeset -i version_major typeset -i version_minor version=`rpm --qf %{Version} -q python` version_major=`echo ${version} | awk '{split($0, parts, "."); print parts[1]}'` version_minor=`echo ${version} | awk '{split($0, parts, "."); print parts[2]}'` if [ ! ${version_major} -ge 2 -o ! ${version_minor} -ge 5 ]; then # Setup 2.6 in /opt - based upon # http://markkoberlein.com/getting-python-26-with-django-11-together-on # Check for earlier Python 2.6 install if [ -e /opt/python2.6 ]; then # Is Python already installed? RETV=`/opt/python2.6/bin/python -V > /dev/null 2>&1; echo $?` if [ ${RETV} -eq 0 ]; then python_installed='True' else mv /opt/python2.6 /opt/python2.6-old fi fi # Install Python 2.6 if it doesn't exist already if [ ! "${python_installed}" == "True" ]; then # Install requirements for the Python build yum install sqlite-devel zlib-devel mkdir -p /opt/python2.6 # Download and install wget http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tgz tar -xzf Python-2.6.4.tgz cd Python-2.6.4 ./configure --prefix=/opt/python2.6 --with-threads --enable-shared --with-zlib=/usr/include make && make install cd /tmp/setup-web2py fi # Create links for Python 2.6 # even if it was previously installed just to be sure ln -s /opt/python2.6/lib/libpython2.6.so /usr/lib ln -s /opt/python2.6/lib/libpython2.6.so.1.0 /usr/lib ln -s /opt/python2.6/bin/python /usr/local/bin/python ln -s /opt/python2.6/bin/python /usr/bin/python2.6 ln -s /opt/python2.6/lib/python2.6.so /opt/python2.6/lib/python2.6/config/ # Update linker for new libraries /sbin/ldconfig # Rebuild wsgi to take advantage of Python 2.6 yum install httpd-devel cd /tmp/setup-web2py wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz tar -xzf mod_wsgi-3.3.tar.gz cd mod_wsgi-3.3 ./configure --with-python=/usr/local/bin/python make && make install echo "LoadModule wsgi_module modules/mod_wsgi.so" > /etc/httpd/conf.d/wsgi.conf cd /tmp/setup-web2py fi ### MySQL install untested! # Install mysql packages (optional) #yum install mysql mysql-server # Enable mysql to start at boot (optional) #chkconfig --levels 235 mysqld on #service mysqld start # Configure mysql security settings (not really optional if mysql installed) #/usr/bin/mysql_secure_installation ### ### Phase 2 - Install web2py ### echo echo " - Downloading, installing, and starting web2py" echo # Create web-apps directory, if required if [ ! -d "/opt/web-apps" ]; then mkdir -p /opt/web-apps chmod 755 /opt chmod 755 /opt/web-apps fi cd /opt/web-apps # Download web2py if [ -e web2py_src.zip* ]; then rm web2py_src.zip* fi wget http://web2py.com/examples/static/web2py_src.zip unzip web2py_src.zip chown -R apache:apache web2py ### ### Phase 3 - Setup SELinux context ### # Set context for Python libraries if Python 2.6 installed if [ -d /opt/python2.6 ]; then cd /opt/python2.6 chcon -R -t lib_t lib/ fi # Allow http_tmp_exec required for wsgi RETV=`setsebool -P httpd_tmp_exec on > /dev/null 2>&1; echo $?` if [ ! ${RETV} -eq 0 ]; then # CentOS doesn't support httpd_tmp_exec cd /tmp/setup-web2py # Create the SELinux policy cat > httpd.te < iptables.rules < /etc/httpd/ssl/self_signed.key openssl req -new -x509 -nodes -sha1 -days 365 -key /etc/httpd/ssl/self_signed.key > /etc/httpd/ssl/self_signed.cert openssl x509 -noout -fingerprint -text < /etc/httpd/ssl/self_signed.cert > /etc/httpd/ssl/self_signed.info chmod 400 /etc/httpd/ssl/self_signed.* ### ### Phase 6 - Configure Apache ### echo echo " - Configure Apache to use mod_wsgi" echo # Create config if [ -e /etc/httpd/conf.d/welcome.conf ]; then mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.disabled fi cat > /etc/httpd/conf.d/default.conf < WSGIDaemonProcess web2py user=apache group=apache WSGIProcessGroup web2py WSGIScriptAlias / /opt/web-apps/web2py/wsgihandler.py AllowOverride None Order Allow,Deny Deny from all Allow from all AliasMatch ^/([^/]+)/static/(.*) /opt/web-apps/web2py/applications/\$1/static/\$2 Options -Indexes Order Allow,Deny Allow from all Deny from all Deny from all CustomLog /var/log/httpd/access_log common ErrorLog /var/log/httpd/error_log SSLEngine on SSLCertificateFile /etc/httpd/ssl/self_signed.cert SSLCertificateKeyFile /etc/httpd/ssl/self_signed.key WSGIProcessGroup web2py WSGIScriptAlias / /opt/web-apps/web2py/wsgihandler.py AllowOverride None Order Allow,Deny Deny from all Allow from all AliasMatch ^/([^/]+)/static/(.*) /opt/web-apps/web2py/applications/\$1/static/\$2 Options -Indexes ExpiresActive On ExpiresDefault "access plus 1 hour" Order Allow,Deny Allow from all CustomLog /var/log/httpd/access_log common ErrorLog /var/log/httpd/error_log EOF # Fix wsgi socket locations echo "WSGISocketPrefix run/wsgi" >> /etc/httpd/conf.d/wsgi.conf # Restart Apache to pick up changes service httpd restart ### ### Phase 7 - Setup web2py admin password ### echo echo " - Setup web2py admin password" echo cd /opt/web-apps/web2py sudo -u apache python -c "from gluon.main import save_password; save_password(raw_input('admin password: '),443)" ### ### Phase 8 - Verify that required services start at boot ### /sbin/chkconfig iptables on /sbin/chkconfig httpd on ### ### Phase 999 - Done! ### # Change back to original directory cd ${current_directory} echo " - Complete!" echo EOF EOF EOF web2py-1.99.7.orig/setup_app.py0000755000175000017500000000317411724764235015047 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ This is a setup.py script generated by py2applet Usage: python setup.py py2app """ from setuptools import setup from gluon.import_all import base_modules, contributed_modules import os import fnmatch class reglob: def __init__(self, directory, pattern="*"): self.stack = [directory] self.pattern = pattern self.files = [] self.index = 0 def __getitem__(self, index): while 1: try: file = self.files[self.index] self.index = self.index + 1 except IndexError: self.index = 0 self.directory = self.stack.pop() self.files = os.listdir(self.directory) else: fullname = os.path.join(self.directory, file) if os.path.isdir(fullname) and not os.path.islink(fullname): self.stack.append(fullname) if not (file.startswith('.') or file.startswith('#') or file.endswith('~')) \ and fnmatch.fnmatch(file, self.pattern): return fullname setup(app=['web2py.py'], data_files=[ 'NEWINSTALL', 'ABOUT', 'LICENSE', 'VERSION', ] + \ [x for x in reglob('applications/examples')] + \ [x for x in reglob('applications/welcome')] + \ [x for x in reglob('applications/admin')], options={'py2app': { 'argv_emulation': True, 'includes': base_modules, 'packages': contributed_modules, }}, setup_requires=['py2app']) web2py-1.99.7.orig/gaehandler.py0000755000175000017500000000573411724764235015145 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ This file is part of the web2py Web Framework Copyrighted by Massimo Di Pierro License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) """ ############################################################################## # Configuration parameters for Google App Engine ############################################################################## LOG_STATS = False # web2py level log statistics APPSTATS = True # GAE level usage statistics and profiling DEBUG = False # debug mode # # Read more about APPSTATS here # http://googleappengine.blogspot.com/2010/03/easy-performance-profiling-with.html # can be accessed from: # http://localhost:8080/_ah/stats ############################################################################## # All tricks in this file developed by Robin Bhattacharyya ############################################################################## import time import os import sys import logging import cPickle import pickle import wsgiref.handlers import datetime path = os.path.dirname(os.path.abspath(__file__)) sys.path = [path]+[p for p in sys.path if not p==path] sys.modules['cPickle'] = sys.modules['pickle'] from gluon.settings import global_settings from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app global_settings.web2py_runtime_gae = True global_settings.db_sessions = True if os.environ.get('SERVER_SOFTWARE', '').startswith('Devel'): (global_settings.web2py_runtime, DEBUG) = \ ('gae:development', True) else: (global_settings.web2py_runtime, DEBUG) = \ ('gae:production', False) import gluon.main def log_stats(fun): """Function that will act as a decorator to make logging""" def newfun(env, res): """Log the execution time of the passed function""" timer = lambda t: (t.time(), t.clock()) (t0, c0) = timer(time) executed_function = fun(env, res) (t1, c1) = timer(time) log_info = """**** Request: %.2fms/%.2fms (real time/cpu time)""" log_info = log_info % ((t1 - t0) * 1000, (c1 - c0) * 1000) logging.info(log_info) return executed_function return newfun logging.basicConfig(level=logging.INFO) def wsgiapp(env, res): """Return the wsgiapp""" env['PATH_INFO'] = env['PATH_INFO'].decode('latin1').encode('utf8') #this deals with a problem where GAE development server seems to forget # the path between requests if global_settings.web2py_runtime == 'gae:development': gluon.admin.create_missing_folders() from gluon.custom_import import custom_import_install web2py_path = global_settings.applications_parent # backward compatibility custom_import_install(web2py_path) return gluon.main.wsgibase(env, res) if LOG_STATS or DEBUG: wsgiapp = log_stats(wsgiapp) def main(): """Run the wsgi app""" run_wsgi_app(wsgiapp) if __name__ == '__main__': main() web2py-1.99.7.orig/modpythonhandler.py0000755000175000017500000001363611724764235016432 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ This file is part of the web2py Web Framework Copyrighted by Massimo Di Pierro License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) WSGI wrapper for mod_python. Requires Python 2.2 or greater. Part of CherryPy mut modified by Massimo Di Pierro (2008) for web2py SetHandler python-program PythonHandler modpythonhandler PythonPath \"['/path/to/web2py/'] + sys.path\" PythonOption SCRIPT_NAME /myapp Some WSGI implementations assume that the SCRIPT_NAME environ variable will always be equal to 'the root URL of the app'; Apache probably won't act as you expect in that case. You can add another PythonOption directive to tell modpython_gateway to force that behavior: PythonOption SCRIPT_NAME /mcontrol The module.function will be called with no arguments on server shutdown, once for each child process or thread. """ import traceback import sys import os from mod_python import apache path = os.path.dirname(os.path.abspath(__file__)) os.chdir(path) sys.path = [path]+[p for p in sys.path if not p==path] import gluon.main class InputWrapper(object): """ Input wrapper for the wsgi handler """ def __init__(self, req): """ InputWrapper constructor """ self.req = req def close(self): """ """ pass def read(self, size=-1): """ Wrapper for req.read """ return self.req.read(size) def readline(self, size=-1): """ Wrapper for req.readline """ return self.req.readline(size) def readlines(self, hint=-1): """ Wrapper for req.readlines """ return self.req.readlines(hint) def __iter__(self): """ Defines a generator with the req data """ line = self.readline() while line: yield line # Notice this won't prefetch the next line; it only # gets called if the generator is resumed. line = self.readline() class ErrorWrapper(object): """ Error wrapper for the wsgi handler """ def __init__(self, req): """ ErrorWrapper constructor """ self.req = req def flush(self): """ """ pass def write(self, msg): """ Logs the given msg in the log file """ self.req.log_error(msg) def writelines(self, seq): """ Writes various lines in the log file """ self.write(''.join(seq)) bad_value = "You must provide a PythonOption '%s', either 'on' or 'off', when running a version of mod_python < 3.1" class Handler: """ Defines the handler """ def __init__(self, req): """ Handler constructor """ self.started = False options = req.get_options() # Threading and forking try: q = apache.mpm_query threaded = q(apache.AP_MPMQ_IS_THREADED) forked = q(apache.AP_MPMQ_IS_FORKED) except AttributeError: threaded = options.get('multithread', '').lower() if threaded == 'on': threaded = True elif threaded == 'off': threaded = False else: raise ValueError(bad_value % 'multithread') forked = options.get('multiprocess', '').lower() if forked == 'on': forked = True elif forked == 'off': forked = False else: raise ValueError(bad_value % 'multiprocess') env = self.environ = dict(apache.build_cgi_env(req)) if 'SCRIPT_NAME' in options: # Override SCRIPT_NAME and PATH_INFO if requested. env['SCRIPT_NAME'] = options['SCRIPT_NAME'] env['PATH_INFO'] = req.uri[len(options['SCRIPT_NAME']):] env['wsgi.input'] = InputWrapper(req) env['wsgi.errors'] = ErrorWrapper(req) env['wsgi.version'] = (1, 0) env['wsgi.run_once'] = False if env.get('HTTPS') in ('yes', 'on', '1'): env['wsgi.url_scheme'] = 'https' else: env['wsgi.url_scheme'] = 'http' env['wsgi.multithread'] = threaded env['wsgi.multiprocess'] = forked self.request = req def run(self, application): """ Run the application """ try: result = application(self.environ, self.start_response) for data in result: self.write(data) if not self.started: self.request.set_content_length(0) if hasattr(result, 'close'): result.close() except: traceback.print_exc(None, self.environ['wsgi.errors']) if not self.started: self.request.status = 500 self.request.content_type = 'text/plain' data = 'A server error occurred. Please contact the ' + \ 'administrator.' self.request.set_content_length(len(data)) self.request.write(data) def start_response(self, status, headers, exc_info=None): """ Defines the request data """ if exc_info: try: if self.started: raise exc_info[0], exc_info[1], exc_info[2] finally: exc_info = None self.request.status = int(status[:3]) for (key, val) in headers: if key.lower() == 'content-length': self.request.set_content_length(int(val)) elif key.lower() == 'content-type': self.request.content_type = val else: self.request.headers_out.add(key, val) return self.write def write(self, data): """ Write the request data """ if not self.started: self.started = True self.request.write(data) def handler(req): """ Execute the gluon app """ Handler(req).run(gluon.main.wsgibase) return apache.OK web2py-1.99.7.orig/__init__.py0000644000175000017500000000000411724764235014570 0ustar josejose web2py-1.99.7.orig/routes.example.py0000644000175000017500000001531711724764235016021 0ustar josejose#!/usr/bin/python # -*- coding: utf-8 -*- # default_application, default_controller, default_function # are used when the respective element is missing from the # (possibly rewritten) incoming URL # default_application = 'init' # ordinarily set in base routes.py default_controller = 'default' # ordinarily set in app-specific routes.py default_function = 'index' # ordinarily set in app-specific routes.py # routes_app is a tuple of tuples. The first item in each is a regexp that will # be used to match the incoming request URL. The second item in the tuple is # an applicationname. This mechanism allows you to specify the use of an # app-specific routes.py. This entry is meaningful only in the base routes.py. # # Example: support welcome, admin, app and myapp, with myapp the default: routes_app = ((r'/(?Pwelcome|admin|app)\b.*', r'\g'), (r'(.*)', r'myapp'), (r'/?(.*)', r'myapp')) # routes_in is a tuple of tuples. The first item in each is a regexp that will # be used to match the incoming request URL. The second item in the tuple is # what it will be replaced with. This mechanism allows you to redirect incoming # routes to different web2py locations # # Example: If you wish for your entire website to use init's static directory: # # routes_in=( (r'/static/(?P[\w./-]+)', r'/init/static/\g') ) # routes_in = ((r'.*:/favicon.ico', r'/examples/static/favicon.ico'), (r'.*:/robots.txt', r'/examples/static/robots.txt'), ((r'.*http://otherdomain.com.* (?P.*)', r'/app/ctr\g'))) # routes_out, like routes_in translates URL paths created with the web2py URL() # function in the same manner that route_in translates inbound URL paths. # routes_out = ((r'.*http://otherdomain.com.* /app/ctr(?P.*)', r'\g'), (r'/app(?P.*)', r'\g')) # Specify log level for rewrite's debug logging # Possible values: debug, info, warning, error, critical (loglevels), # off, print (print uses print statement rather than logging) # GAE users may want to use 'off' to suppress routine logging. # logging = 'debug' # Error-handling redirects all HTTP errors (status codes >= 400) to a specified # path. If you wish to use error-handling redirects, uncomment the tuple # below. You can customize responses by adding a tuple entry with the first # value in 'appName/HTTPstatusCode' format. ( Only HTTP codes >= 400 are # routed. ) and the value as a path to redirect the user to. You may also use # '*' as a wildcard. # # The error handling page is also passed the error code and ticket as # variables. Traceback information will be stored in the ticket. # # routes_onerror = [ # (r'init/400', r'/init/default/login') # ,(r'init/*', r'/init/static/fail.html') # ,(r'*/404', r'/init/static/cantfind.html') # ,(r'*/*', r'/init/error/index') # ] # specify action in charge of error handling # # error_handler = dict(application='error', # controller='default', # function='index') # In the event that the error-handling page itself returns an error, web2py will # fall back to its old static responses. You can customize them here. # ErrorMessageTicket takes a string format dictionary containing (only) the # "ticket" key. # error_message = '

%s

' # error_message_ticket = '

Internal error

Ticket issued:
%(ticket)s' # specify a list of apps that bypass args-checking and use request.raw_args # #routes_apps_raw=['myapp'] #routes_apps_raw=['myapp', 'myotherapp'] def __routes_doctest(): ''' Dummy function for doctesting routes.py. Use filter_url() to test incoming or outgoing routes; filter_err() for error redirection. filter_url() accepts overrides for method and remote host: filter_url(url, method='get', remote='0.0.0.0', out=False) filter_err() accepts overrides for application and ticket: filter_err(status, application='app', ticket='tkt') >>> import os >>> import gluon.main >>> from gluon.rewrite import regex_select, load, filter_url, regex_filter_out, filter_err, compile_regex >>> regex_select() >>> load(routes=os.path.basename(__file__)) >>> os.path.relpath(filter_url('http://domain.com/favicon.ico')) 'applications/examples/static/favicon.ico' >>> os.path.relpath(filter_url('http://domain.com/robots.txt')) 'applications/examples/static/robots.txt' >>> filter_url('http://domain.com') '/init/default/index' >>> filter_url('http://domain.com/') '/init/default/index' >>> filter_url('http://domain.com/init/default/fcn') '/init/default/fcn' >>> filter_url('http://domain.com/init/default/fcn/') '/init/default/fcn' >>> filter_url('http://domain.com/app/ctr/fcn') '/app/ctr/fcn' >>> filter_url('http://domain.com/app/ctr/fcn/arg1') "/app/ctr/fcn ['arg1']" >>> filter_url('http://domain.com/app/ctr/fcn/arg1/') "/app/ctr/fcn ['arg1']" >>> filter_url('http://domain.com/app/ctr/fcn/arg1//') "/app/ctr/fcn ['arg1', '']" >>> filter_url('http://domain.com/app/ctr/fcn//arg1') "/app/ctr/fcn ['', 'arg1']" >>> filter_url('HTTP://DOMAIN.COM/app/ctr/fcn') '/app/ctr/fcn' >>> filter_url('http://domain.com/app/ctr/fcn?query') '/app/ctr/fcn ?query' >>> filter_url('http://otherdomain.com/fcn') '/app/ctr/fcn' >>> regex_filter_out('/app/ctr/fcn') '/ctr/fcn' >>> filter_url('https://otherdomain.com/app/ctr/fcn', out=True) '/ctr/fcn' >>> filter_url('https://otherdomain.com/app/ctr/fcn/arg1//', out=True) '/ctr/fcn/arg1//' >>> filter_url('http://otherdomain.com/app/ctr/fcn', out=True) '/fcn' >>> filter_url('http://otherdomain.com/app/ctr/fcn?query', out=True) '/fcn?query' >>> filter_url('http://otherdomain.com/app/ctr/fcn#anchor', out=True) '/fcn#anchor' >>> filter_err(200) 200 >>> filter_err(399) 399 >>> filter_err(400) 400 >>> filter_url('http://domain.com/welcome', app=True) 'welcome' >>> filter_url('http://domain.com/', app=True) 'myapp' >>> filter_url('http://domain.com', app=True) 'myapp' >>> compile_regex('.*http://otherdomain.com.* (?P.*)', '/app/ctr\g')[0].pattern '^.*http://otherdomain.com.* (?P.*)$' >>> compile_regex('.*http://otherdomain.com.* (?P.*)', '/app/ctr\g')[1] '/app/ctr\\\\g' >>> compile_regex('/$c/$f', '/init/$c/$f')[0].pattern '^.*?:https?://[^:/]+:[a-z]+ /(?P\\\\w+)/(?P\\\\w+)$' >>> compile_regex('/$c/$f', '/init/$c/$f')[1] '/init/\\\\g/\\\\g' ''' pass if __name__ == '__main__': import doctest doctest.testmod() web2py-1.99.7.orig/wsgihandler.py0000644000175000017500000000201011724764235015337 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ This file is part of the web2py Web Framework Copyrighted by Massimo Di Pierro License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) This is a WSGI handler for Apache Requires apache+mod_wsgi. In httpd.conf put something like: LoadModule wsgi_module modules/mod_wsgi.so WSGIScriptAlias / /path/to/wsgihandler.py """ # change these parameters as required LOGGING = False SOFTCRON = False import sys import os path = os.path.dirname(os.path.abspath(__file__)) os.chdir(path) sys.path = [path]+[p for p in sys.path if not p==path] sys.stdout=sys.stderr import gluon.main if LOGGING: application = gluon.main.appfactory(wsgiapp=gluon.main.wsgibase, logfilename='httpserver.log', profilerfilename=None) else: application = gluon.main.wsgibase if SOFTCRON: from gluon.settings import global_settings global_settings.web2py_crontype = 'soft' web2py-1.99.7.orig/router.example.py0000644000175000017500000002171211724764235016014 0ustar josejose#!/usr/bin/python # -*- coding: utf-8 -*- # routers are dictionaries of URL routing parameters. # # For each request, the effective router is: # the built-in default base router (shown below), # updated by the BASE router in routes.py routers, # updated by the app-specific router in routes.py routers (if any), # updated by the app-specific router from applications/app/routes.py routers (if any) # # # Router members: # # default_application: default application name # applications: list of all recognized applications, or 'ALL' to use all currently installed applications # Names in applications are always treated as an application names when they appear first in an incoming URL. # Set applications=None to disable the removal of application names from outgoing URLs. # domains: optional dict mapping domain names to application names # The domain name can include a port number: domain.com:8080 # The application name can include a controller: appx/ctlrx # or a controller and a function: appx/ctlrx/fcnx # Example: # domains = { "domain.com" : "app", # "x.domain.com" : "appx", # }, # path_prefix: a path fragment that is prefixed to all outgoing URLs and stripped from all incoming URLs # # Note: default_application, applications, domains & path_prefix are permitted only in the BASE router, # and domain makes sense only in an application-specific router. # The remaining members can appear in the BASE router (as defaults for all applications) # or in application-specific routers. # # default_controller: name of default controller # default_function: name of default function (in all controllers) or dictionary of default functions # by controller # controllers: list of valid controllers in selected app # or "DEFAULT" to use all controllers in the selected app plus 'static' # or None to disable controller-name removal. # Names in controllers are always treated as controller names when they appear in an incoming URL after # the (optional) application and language names. # functions: list of valid functions in the default controller (default None) or dictionary of valid # functions by controller. # If present, the default function name will be omitted when the controller is the default controller # and the first arg does not create an ambiguity. # languages: list of all supported languages # Names in languages are always treated as language names when they appear in an incoming URL after # the (optional) application name. # default_language # The language code (for example: en, it-it) optionally appears in the URL following # the application (which may be omitted). For incoming URLs, the code is copied to # request.language; for outgoing URLs it is taken from request.language. # If languages=None, language support is disabled. # The default_language, if any, is omitted from the URL. # root_static: list of static files accessed from root (by default, favicon.ico & robots.txt) # (mapped to the default application's static/ directory) # Each default (including domain-mapped) application has its own root-static files. # domain: the domain that maps to this application (alternative to using domains in the BASE router) # exclusive_domain: If True (default is False), an exception is raised if an attempt is made to generate # an outgoing URL with a different application without providing an explicit host. # map_hyphen: If True (default is False), hyphens in incoming /a/c/f fields are converted # to underscores, and back to hyphens in outgoing URLs. # Language, args and the query string are not affected. # map_static: By default, the default application is not stripped from static URLs. # Set map_static=True to override this policy. # acfe_match: regex for valid application, controller, function, extension /a/c/f.e # file_match: regex for valid file (used for static file names) # args_match: regex for valid args # This validation provides a measure of security. # If it is changed, the application perform its own validation. # # # The built-in default router supplies default values (undefined members are None): # # default_router = dict( # default_application = 'init', # applications = 'ALL', # default_controller = 'default', # controllers = 'DEFAULT', # default_function = 'index', # functions = None, # default_language = None, # languages = None, # root_static = ['favicon.ico', 'robots.txt'], # domains = None, # map_hyphen = False, # acfe_match = r'\w+$', # legal app/ctlr/fcn/ext # file_match = r'(\w+[-=./]?)+$', # legal file (path) name # args_match = r'([\w@ -]+[=.]?)+$', # legal arg in args # ) # # See rewrite.map_url_in() and rewrite.map_url_out() for implementation details. # This simple router set overrides only the default application name, # but provides full rewrite functionality. routers = dict( # base router BASE = dict( default_application = 'welcome', ), ) # Specify log level for rewrite's debug logging # Possible values: debug, info, warning, error, critical (loglevels), # off, print (print uses print statement rather than logging) # GAE users may want to use 'off' to suppress routine logging. # logging = 'debug' # Error-handling redirects all HTTP errors (status codes >= 400) to a specified # path. If you wish to use error-handling redirects, uncomment the tuple # below. You can customize responses by adding a tuple entry with the first # value in 'appName/HTTPstatusCode' format. ( Only HTTP codes >= 400 are # routed. ) and the value as a path to redirect the user to. You may also use # '*' as a wildcard. # # The error handling page is also passed the error code and ticket as # variables. Traceback information will be stored in the ticket. # # routes_onerror = [ # (r'init/400', r'/init/default/login') # ,(r'init/*', r'/init/static/fail.html') # ,(r'*/404', r'/init/static/cantfind.html') # ,(r'*/*', r'/init/error/index') # ] # specify action in charge of error handling # # error_handler = dict(application='error', # controller='default', # function='index') # In the event that the error-handling page itself returns an error, web2py will # fall back to its old static responses. You can customize them here. # ErrorMessageTicket takes a string format dictionary containing (only) the # "ticket" key. # error_message = '

%s

' # error_message_ticket = '

Internal error

Ticket issued: %(ticket)s' def __routes_doctest(): ''' Dummy function for doctesting routes.py. Use filter_url() to test incoming or outgoing routes; filter_err() for error redirection. filter_url() accepts overrides for method and remote host: filter_url(url, method='get', remote='0.0.0.0', out=False) filter_err() accepts overrides for application and ticket: filter_err(status, application='app', ticket='tkt') >>> import os >>> import gluon.main >>> from gluon.rewrite import load, filter_url, filter_err, get_effective_router >>> load(routes=os.path.basename(__file__)) >>> filter_url('http://domain.com/abc', app=True) 'welcome' >>> filter_url('http://domain.com/welcome', app=True) 'welcome' >>> os.path.relpath(filter_url('http://domain.com/favicon.ico')) 'applications/welcome/static/favicon.ico' >>> filter_url('http://domain.com/abc') '/welcome/default/abc' >>> filter_url('http://domain.com/index/abc') "/welcome/default/index ['abc']" >>> filter_url('http://domain.com/default/abc.css') '/welcome/default/abc.css' >>> filter_url('http://domain.com/default/index/abc') "/welcome/default/index ['abc']" >>> filter_url('http://domain.com/default/index/a bc') "/welcome/default/index ['a bc']" >>> filter_url('https://domain.com/app/ctr/fcn', out=True) '/app/ctr/fcn' >>> filter_url('https://domain.com/welcome/ctr/fcn', out=True) '/ctr/fcn' >>> filter_url('https://domain.com/welcome/default/fcn', out=True) '/fcn' >>> filter_url('https://domain.com/welcome/default/index', out=True) '/' >>> filter_url('https://domain.com/welcome/appadmin/index', out=True) '/appadmin' >>> filter_url('http://domain.com/welcome/default/fcn?query', out=True) '/fcn?query' >>> filter_url('http://domain.com/welcome/default/fcn#anchor', out=True) '/fcn#anchor' >>> filter_url('http://domain.com/welcome/default/fcn?query#anchor', out=True) '/fcn?query#anchor' >>> filter_err(200) 200 >>> filter_err(399) 399 >>> filter_err(400) 400 ''' pass if __name__ == '__main__': import doctest doctest.testmod() web2py-1.99.7.orig/queue.example.yaml0000644000175000017500000000034011724764235016124 0ustar josejose# To configure Google App Engine task queues, copy this file to queue.yaml # and edit as required # See http://code.google.com/appengine/docs/python/config/queue.html queue: - name: default rate: 20/m bucket_size: 1 web2py-1.99.7.orig/LICENSE0000644000175000017500000001525211724764235013477 0ustar josejose## Web2py License Web2py is Licensed under the LGPL license version 3 (http://www.gnu.org/licenses/lgpl.html) Copyrighted (c) by Massimo Di Pierro (2007-2011) ### On Commercial Redistribution In accordance with LGPL you may: - redistribute web2py with your apps (including official web2py binary versions) - release your applications which use official web2py libraries under any license you wish But you must: - make clear in the documentation that your application uses web2py - release any modification of the web2py libraries under the LGPLv3 license THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. (Earlier versions of web2py, 1.0.*-1.90.*, were released under the GPL2 license plus a commercial exception which, for practical purposes, was very similar to the current LPGLv3) ### Licenses for third party contributed software web2py contains third party software under the gluon/contrib/ folder. Each file/module in contrib is distributed with web2py under its original license. Here we list some of them. #### gluon.contrib.simplejson LICENSE Copyright (c) 2006 Bob Ippolito - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #### gluon.contrib.rss2.py (originally PyRSS2Gen) LICENSE This is copyright (c) by Dalke Scientific Software, LLC and released under the BSD license. See the file LICENSE in the distribution or for details. #### gluon.contrib.markdown (markdown2) LICENSE MIT License from from #### gluon.contrib.feedparser LICENSE Copyright (c) 2002-2005, Mark Pilgrim All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #### gluon.wsgiserver.py LICENSE (borrowed from cherrypy) Copyright (c) 2004, CherryPy Team (team@cherrypy.org) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the CherryPy Team nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #### gluon.contrib.pam LICENSE Copyright (C) 2007-2009 Chris AtLee Licensed under the MIT license #### gluon.contrib.shell LICENSE Copyright (C) by Google inc. Apache 2.0 Lincense #### The javascript licenses are in the code itself web2py-1.99.7.orig/app.example.yaml0000644000175000017500000000376411724764235015575 0ustar josejose# For Google App Engine deployment, copy this file to app.yaml # and edit as required # See http://code.google.com/appengine/docs/python/config/appconfig.html # and http://web2py.com/book/default/chapter/11?search=app.yaml application: web2py version: 1 api_version: 1 # use this line for Python 2.5 # runtime: python # use these lines for Python 2.7 # upload app with: appcfg.py update web2py (where 'web2py' is web2py's root directory) # # runtime: python27 # threadsafe: true # true for WSGI & concurrent requests (Python 2.7 only) default_expiration: "24h" # for static files handlers: - url: /(?P.+?)/static/(?P.+) static_files: applications/\1/static/\2 upload: applications/(.+?)/static/(.+) secure: optional - url: /favicon.ico static_files: applications/welcome/static/favicon.ico upload: applications/welcome/static/favicon.ico - url: /robots.txt static_files: applications/welcome/static/robots.txt upload: applications/welcome/static/robots.txt - url: .* script: gaehandler.py # CGI # script: gaehandler.wsgiapp # WSGI (Python 2.7 only) secure: optional admin_console: pages: - name: Appstats url: /_ah/stats skip_files: | ^(.*/)?( (app\.yaml)| (app\.yml)| (index\.yaml)| (index\.yml)| (#.*#)| (.*~)| (.*\.py[co])| (.*/RCS/.*)| (\..*)| (applications/(admin|examples)/.*)| ((admin|examples|welcome)\.(w2p|tar))| (applications/.*?/(cron|databases|errors|cache|sessions)/.*)| ((logs|scripts)/.*)| (anyserver\.py)| (web2py\.py)| ((cgi|fcgi|modpython|wsgi)handler\.py)| (epydoc\.(conf|css))| (httpserver\.log)| (logging\.example\.conf)| (route[rs]\.example\.py)| (setup_(app|exe)\.py)| (splashlogo\.gif)| (parameters_\d+\.py)| (options_std.py)| (gluon/tests/.*)| (gluon/(rocket|winservice)\.py)| (contrib/(gateways|markdown|memcache|pymysql)/.*)| (contrib/(populate|taskbar_widget)\.py)| (google_appengine/.*)| (.*\.(bak|orig))| )$ builtins: - remote_api: on - datastore_admin: on - appstats: on - admin_redirect: on - deferred: on web2py-1.99.7.orig/fcgihandler.py0000755000175000017500000000274211724764235015315 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ This file is part of the web2py Web Framework Copyrighted by Massimo Di Pierro License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) This is a handler for lighttpd+fastcgi This file has to be in the PYTHONPATH Put something like this in the lighttpd.conf file: server.port = 8000 server.bind = '127.0.0.1' server.event-handler = 'freebsd-kqueue' server.modules = ('mod_rewrite', 'mod_fastcgi') server.error-handler-404 = '/test.fcgi' server.document-root = '/somewhere/web2py' server.errorlog = '/tmp/error.log' fastcgi.server = ('.fcgi' => ('localhost' => ('min-procs' => 1, 'socket' => '/tmp/fcgi.sock' ) ) ) """ LOGGING = False SOFTCRON = False import sys import os path = os.path.dirname(os.path.abspath(__file__)) os.chdir(path) sys.path = [path]+[p for p in sys.path if not p==path] import gluon.main import gluon.contrib.gateways.fcgi as fcgi if LOGGING: application = gluon.main.appfactory(wsgiapp=gluon.main.wsgibase, logfilename='httpserver.log', profilerfilename=None) else: application = gluon.main.wsgibase if SOFTCRON: from gluon.settings import global_settings global_settings.web2py_crontype = 'soft' fcgi.WSGIServer(application, bindAddress='/tmp/fcgi.sock').run() web2py-1.99.7.orig/options_std.py0000644000175000017500000000165511724764235015413 0ustar josejose#!/usr/bin/python # -*- coding: utf-8 -*- # when web2py is run as a windows service (web2py.exe -W) # it does not load the command line options but it # expects to find conifguration settings in a file called # # web2py/options.py # # this file is an example for options.py import socket import os ip = '0.0.0.0' port = 80 interfaces=[('0.0.0.0',80),('0.0.0.0',443,'ssl_private_key.pem','ssl_certificate.pem')] password = '' # ## means use the previous password pid_filename = 'httpserver.pid' log_filename = 'httpserver.log' profiler_filename = None #ssl_certificate = 'ssl_certificate.pem' # ## path to certificate file #ssl_private_key = 'ssl_private_key.pem' # ## path to private key file #numthreads = 50 # ## deprecated; remove minthreads = None maxthreads = None server_name = socket.gethostname() request_queue_size = 5 timeout = 30 shutdown_timeout = 5 folder = os.getcwd() extcron = None nocron = None web2py-1.99.7.orig/setup.py0000644000175000017500000000624711724764235014210 0ustar josejose#!/usr/bin/env python from distutils.core import setup from gluon.fileutils import tar, untar, read_file, write_file import tarfile import sys def tar(file, filelist, expression='^.+$'): """ tars dir/files into file, only tars file that match expression """ tar = tarfile.TarFile(file, 'w') try: for element in filelist: try: for file in listdir(element, expression, add_dirs=True): tar.add(os.path.join(element, file), file, False) except: tar.add(element) finally: tar.close() def start(): if 'sdist' in sys.argv: tar('gluon/env.tar',['applications','VERSION','splashlogo.gif']) setup(name='web2py', version=read_file("VERSION").split()[1], description="""full-stack framework for rapid development and prototyping of secure database-driven web-based applications, written and programmable in Python.""", long_description=""" Everything in one package with no dependencies. Development, deployment, debugging, testing, database administration and maintenance of applications can be done via the provided web interface. web2py has no configuration files, requires no installation, can run off a USB drive. web2py uses Python for the Model, the Views and the Controllers, has a built-in ticketing system to manage errors, an internationalization engine, works with SQLite, PostgreSQL, MySQL, MSSQL, FireBird, Oracle, IBM DB2, Informix, Ingres, sybase and Google App Engine via a Database Abstraction Layer. web2py includes libraries to handle HTML/XML, RSS, ATOM, CSV, RTF, JSON, AJAX, XMLRPC, WIKI markup. Production ready, capable of upload/download streaming of very large files, and always backward compatible. """, author='Massimo Di Pierro', author_email='mdipierro@cs.depaul.edu', license = 'http://web2py.com/examples/default/license', classifiers = ["Development Status :: 5 - Production/Stable"], url='http://web2py.com', platforms ='Windows, Linux, Mac, Unix,Windows Mobile', packages=['gluon', 'gluon/contrib', 'gluon/contrib/gateways', 'gluon/contrib/login_methods', 'gluon/contrib/markdown', 'gluon/contrib/markmin', 'gluon/contrib/memcache', 'gluon/contrib/pyfpdf', 'gluon/contrib/pymysql', 'gluon/contrib/pyrtf', 'gluon/contrib/pysimplesoap', 'gluon/contrib/simplejson', 'gluon/tests', ], package_data = {'gluon':['env.tar']}, scripts = ['w2p_apps','w2p_run','w2p_clone'], ) if __name__ == '__main__': #print "web2py does not require installation and" #print "you should just start it with:" #print #print "$ python web2py.py" #print #print "are you sure you want to install it anyway (y/n)?" #s = raw_input('>') #if s.lower()[:1]=='y': start() web2py-1.99.7.orig/VERSION0000644000175000017500000000005411724764270013533 0ustar josejoseVersion 1.99.7 (2012-03-04 22:12:08) stable web2py-1.99.7.orig/gluon/0000755000175000017500000000000011727360024013600 5ustar josejoseweb2py-1.99.7.orig/gluon/template.py0000644000175000017500000010040311724764235015774 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ This file is part of the web2py Web Framework (Copyrighted, 2007-2011). License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) Author: Thadeus Burgess Contributors: - Thank you to Massimo Di Pierro for creating the original gluon/template.py - Thank you to Jonathan Lundell for extensively testing the regex on Jython. - Thank you to Limodou (creater of uliweb) who inspired the block-element support for web2py. """ import os import re import cgi import cStringIO import logging try: from restricted import RestrictedError except: def RestrictedError(a,b,c): logging.error(str(a)+':'+str(b)+':'+str(c)) return RuntimeError class Node(object): """ Basic Container Object """ def __init__(self, value = None, pre_extend = False): self.value = value self.pre_extend = pre_extend def __str__(self): return str(self.value) class SuperNode(Node): def __init__(self, name = '', pre_extend = False): self.name = name self.value = None self.pre_extend = pre_extend def __str__(self): if self.value: return str(self.value) else: raise SyntaxError("Undefined parent block ``%s``. \n" % self.name + \ "You must define a block before referencing it.\nMake sure you have not left out an ``{{end}}`` tag." ) def __repr__(self): return "%s->%s" % (self.name, self.value) class BlockNode(Node): """ Block Container. This Node can contain other Nodes and will render in a hierarchical order of when nodes were added. ie:: {{ block test }} This is default block test {{ end }} """ def __init__(self, name = '', pre_extend = False, delimiters = ('{{','}}')): """ name - Name of this Node. """ self.nodes = [] self.name = name self.pre_extend = pre_extend self.left, self.right = delimiters def __repr__(self): lines = ['%sblock %s%s' % (self.left,self.name,self.right)] for node in self.nodes: lines.append(str(node)) lines.append('%send%s' % (self.left, self.right)) return ''.join(lines) def __str__(self): """ Get this BlockNodes content, not including child Nodes """ lines = [] for node in self.nodes: if not isinstance(node, BlockNode): lines.append(str(node)) return ''.join(lines) def append(self, node): """ Add an element to the nodes. Keyword Arguments - node -- Node object or string to append. """ if isinstance(node, str) or isinstance(node, Node): self.nodes.append(node) else: raise TypeError("Invalid type; must be instance of ``str`` or ``BlockNode``. %s" % node) def extend(self, other): """ Extend the list of nodes with another BlockNode class. Keyword Arguments - other -- BlockNode or Content object to extend from. """ if isinstance(other, BlockNode): self.nodes.extend(other.nodes) else: raise TypeError("Invalid type; must be instance of ``BlockNode``. %s" % other) def output(self, blocks): """ Merges all nodes into a single string. blocks -- Dictionary of blocks that are extending from this template. """ lines = [] # Get each of our nodes for node in self.nodes: # If we have a block level node. if isinstance(node, BlockNode): # If we can override this block. if node.name in blocks: # Override block from vars. lines.append(blocks[node.name].output(blocks)) # Else we take the default else: lines.append(node.output(blocks)) # Else its just a string else: lines.append(str(node)) # Now combine all of our lines together. return ''.join(lines) class Content(BlockNode): """ Parent Container -- Used as the root level BlockNode. Contains functions that operate as such. """ def __init__(self, name = "ContentBlock", pre_extend = False): """ Keyword Arguments name -- Unique name for this BlockNode """ self.name = name self.nodes = [] self.blocks = {} self.pre_extend = pre_extend def __str__(self): lines = [] # For each of our nodes for node in self.nodes: # If it is a block node. if isinstance(node, BlockNode): # And the node has a name that corresponds with a block in us if node.name in self.blocks: # Use the overriding output. lines.append(self.blocks[node.name].output(self.blocks)) else: # Otherwise we just use the nodes output. lines.append(node.output(self.blocks)) else: # It is just a string, so include it. lines.append(str(node)) # Merge our list together. return ''.join(lines) def _insert(self, other, index = 0): """ Inserts object at index. """ if isinstance(other, str) or isinstance(other, Node): self.nodes.insert(index, other) else: raise TypeError("Invalid type, must be instance of ``str`` or ``Node``.") def insert(self, other, index = 0): """ Inserts object at index. You may pass a list of objects and have them inserted. """ if isinstance(other, (list, tuple)): # Must reverse so the order stays the same. other.reverse() for item in other: self._insert(item, index) else: self._insert(other, index) def append(self, node): """ Adds a node to list. If it is a BlockNode then we assign a block for it. """ if isinstance(node, str) or isinstance(node, Node): self.nodes.append(node) if isinstance(node, BlockNode): self.blocks[node.name] = node else: raise TypeError("Invalid type, must be instance of ``str`` or ``BlockNode``. %s" % node) def extend(self, other): """ Extends the objects list of nodes with another objects nodes """ if isinstance(other, BlockNode): self.nodes.extend(other.nodes) self.blocks.update(other.blocks) else: raise TypeError("Invalid type; must be instance of ``BlockNode``. %s" % other) def clear_content(self): self.nodes = [] class TemplateParser(object): default_delimiters = ('{{','}}') r_tag = re.compile(r'(\{\{.*?\}\})', re.DOTALL) r_multiline = re.compile(r'(""".*?""")|(\'\'\'.*?\'\'\')', re.DOTALL) # These are used for re-indentation. # Indent + 1 re_block = re.compile('^(elif |else:|except:|except |finally:).*$', re.DOTALL) # Indent - 1 re_unblock = re.compile('^(return|continue|break|raise)( .*)?$', re.DOTALL) # Indent - 1 re_pass = re.compile('^pass( .*)?$', re.DOTALL) def __init__(self, text, name = "ParserContainer", context = dict(), path = 'views/', writer = 'response.write', lexers = {}, delimiters = ('{{','}}'), _super_nodes = [], ): """ text -- text to parse context -- context to parse in path -- folder path to templates writer -- string of writer class to use lexers -- dict of custom lexers to use. delimiters -- for example ('{{','}}') _super_nodes -- a list of nodes to check for inclusion this should only be set by "self.extend" It contains a list of SuperNodes from a child template that need to be handled. """ # Keep a root level name. self.name = name # Raw text to start parsing. self.text = text # Writer to use (refer to the default for an example). # This will end up as # "%s(%s, escape=False)" % (self.writer, value) self.writer = writer # Dictionary of custom name lexers to use. if isinstance(lexers, dict): self.lexers = lexers else: self.lexers = {} # Path of templates self.path = path # Context for templates. self.context = context # allow optional alternative delimiters self.delimiters = delimiters if delimiters != self.default_delimiters: escaped_delimiters = (re.escape(delimiters[0]),re.escape(delimiters[1])) self.r_tag = re.compile(r'(%s.*?%s)' % escaped_delimiters, re.DOTALL) elif context.has_key('response'): if context['response'].delimiters != self.default_delimiters: escaped_delimiters = (re.escape(context['response'].delimiters[0]), re.escape(context['response'].delimiters[1])) self.r_tag = re.compile(r'(%s.*?%s)' % escaped_delimiters,re.DOTALL) # Create a root level Content that everything will go into. self.content = Content(name=name) # Stack will hold our current stack of nodes. # As we descend into a node, it will be added to the stack # And when we leave, it will be removed from the stack. # self.content should stay on the stack at all times. self.stack = [self.content] # This variable will hold a reference to every super block # that we come across in this template. self.super_nodes = [] # This variable will hold a reference to the child # super nodes that need handling. self.child_super_nodes = _super_nodes # This variable will hold a reference to every block # that we come across in this template self.blocks = {} # Begin parsing. self.parse(text) def to_string(self): """ Return the parsed template with correct indentation. Used to make it easier to port to python3. """ return self.reindent(str(self.content)) def __str__(self): "Make sure str works exactly the same as python 3" return self.to_string() def __unicode__(self): "Make sure str works exactly the same as python 3" return self.to_string() def reindent(self, text): """ Reindents a string of unindented python code. """ # Get each of our lines into an array. lines = text.split('\n') # Our new lines new_lines = [] # Keeps track of how many indents we have. # Used for when we need to drop a level of indentation # only to reindent on the next line. credit = 0 # Current indentation k = 0 ################# # THINGS TO KNOW ################# # k += 1 means indent # k -= 1 means unindent # credit = 1 means unindent on the next line. for raw_line in lines: line = raw_line.strip() # ignore empty lines if not line: continue # If we have a line that contains python code that # should be unindented for this line of code. # and then reindented for the next line. if TemplateParser.re_block.match(line): k = k + credit - 1 # We obviously can't have a negative indentation k = max(k,0) # Add the indentation! new_lines.append(' '*(4*k)+line) # Bank account back to 0 again :( credit = 0 # If we are a pass block, we obviously de-dent. if TemplateParser.re_pass.match(line): k -= 1 # If we are any of the following, de-dent. # However, we should stay on the same level # But the line right after us will be de-dented. # So we add one credit to keep us at the level # while moving back one indentation level. if TemplateParser.re_unblock.match(line): credit = 1 k -= 1 # If we are an if statement, a try, or a semi-colon we # probably need to indent the next line. if line.endswith(':') and not line.startswith('#'): k += 1 # This must come before so that we can raise an error with the # right content. new_text = '\n'.join(new_lines) if k > 0: self._raise_error('missing "pass" in view', new_text) elif k < 0: self._raise_error('too many "pass" in view', new_text) return new_text def _raise_error(self, message='', text=None): """ Raise an error using itself as the filename and textual content. """ raise RestrictedError(self.name, text or self.text, message) def _get_file_text(self, filename): """ Attempt to open ``filename`` and retrieve its text. This will use self.path to search for the file. """ # If they didn't specify a filename, how can we find one! if not filename.strip(): self._raise_error('Invalid template filename') # Get the filename; filename looks like ``"template.html"``. # We need to eval to remove the quotes and get the string type. filename = eval(filename, self.context) # Get the path of the file on the system. filepath = os.path.join(self.path, filename) # try to read the text. try: fileobj = open(filepath, 'rb') text = fileobj.read() fileobj.close() except IOError: self._raise_error('Unable to open included view file: ' + filepath) return text def include(self, content, filename): """ Include ``filename`` here. """ text = self._get_file_text(filename) t = TemplateParser(text, name = filename, context = self.context, path = self.path, writer = self.writer, delimiters = self.delimiters) content.append(t.content) def extend(self, filename): """ Extend ``filename``. Anything not declared in a block defined by the parent will be placed in the parent templates ``{{include}}`` block. """ text = self._get_file_text(filename) # Create out nodes list to send to the parent super_nodes = [] # We want to include any non-handled nodes. super_nodes.extend(self.child_super_nodes) # And our nodes as well. super_nodes.extend(self.super_nodes) t = TemplateParser(text, name = filename, context = self.context, path = self.path, writer = self.writer, delimiters = self.delimiters, _super_nodes = super_nodes) # Make a temporary buffer that is unique for parent # template. buf = BlockNode(name='__include__' + filename, delimiters=self.delimiters) pre = [] # Iterate through each of our nodes for node in self.content.nodes: # If a node is a block if isinstance(node, BlockNode): # That happens to be in the parent template if node.name in t.content.blocks: # Do not include it continue if isinstance(node, Node): # Or if the node was before the extension # we should not include it if node.pre_extend: pre.append(node) continue # Otherwise, it should go int the # Parent templates {{include}} section. buf.append(node) else: buf.append(node) # Clear our current nodes. We will be replacing this with # the parent nodes. self.content.nodes = [] # Set our include, unique by filename t.content.blocks['__include__' + filename] = buf # Make sure our pre_extended nodes go first t.content.insert(pre) # Then we extend our blocks t.content.extend(self.content) # Work off the parent node. self.content = t.content def parse(self, text): # Basically, r_tag.split will split the text into # an array containing, 'non-tag', 'tag', 'non-tag', 'tag' # so if we alternate this variable, we know # what to look for. This is alternate to # line.startswith("{{") in_tag = False extend = None pre_extend = True # Use a list to store everything in # This is because later the code will "look ahead" # for missing strings or brackets. ij = self.r_tag.split(text) # j = current index # i = current item for j in range(len(ij)): i = ij[j] if i: if len(self.stack) == 0: self._raise_error('The "end" tag is unmatched, please check if you have a starting "block" tag') # Our current element in the stack. top = self.stack[-1] if in_tag: line = i # If we are missing any strings!!!! # This usually happens with the following example # template code # # {{a = '}}'}} # or # {{a = '}}blahblah{{'}} # # This will fix these # This is commented out because the current template # system has this same limitation. Since this has a # performance hit on larger templates, I do not recommend # using this code on production systems. This is still here # for "i told you it *can* be fixed" purposes. # # # if line.count("'") % 2 != 0 or line.count('"') % 2 != 0: # # # Look ahead # la = 1 # nextline = ij[j+la] # # # As long as we have not found our ending # # brackets keep going # while '}}' not in nextline: # la += 1 # nextline += ij[j+la] # # clear this line, so we # # don't attempt to parse it # # this is why there is an "if i" # # around line 530 # ij[j+la] = '' # # # retrieve our index. # index = nextline.index('}}') # # # Everything before the new brackets # before = nextline[:index+2] # # # Everything after # after = nextline[index+2:] # # # Make the next line everything after # # so it parses correctly, this *should* be # # all html # ij[j+1] = after # # # Add everything before to the current line # line += before # Get rid of '{{' and '}}' line = line[2:-2].strip() # This is bad juju, but let's do it anyway if not line: continue # We do not want to replace the newlines in code, # only in block comments. def remove_newline(re_val): # Take the entire match and replace newlines with # escaped newlines. return re_val.group(0).replace('\n', '\\n') # Perform block comment escaping. # This performs escaping ON anything # in between """ and """ line = re.sub(TemplateParser.r_multiline, remove_newline, line) if line.startswith('='): # IE: {{=response.title}} name, value = '=', line[1:].strip() else: v = line.split(' ', 1) if len(v) == 1: # Example # {{ include }} # {{ end }} name = v[0] value = '' else: # Example # {{ block pie }} # {{ include "layout.html" }} # {{ for i in range(10): }} name = v[0] value = v[1] # This will replace newlines in block comments # with the newline character. This is so that they # retain their formatting, but squish down to one # line in the rendered template. # First check if we have any custom lexers if name in self.lexers: # Pass the information to the lexer # and allow it to inject in the environment # You can define custom names such as # '{{<.< tokens = line.split('\n') # We need to look for any instances of # for i in range(10): # = i # pass # So we can properly put a response.write() in place. continuation = False len_parsed = 0 for k in range(len(tokens)): tokens[k] = tokens[k].strip() len_parsed += len(tokens[k]) if tokens[k].startswith('='): if tokens[k].endswith('\\'): continuation = True tokens[k] = "\n%s(%s" % (self.writer, tokens[k][1:].strip()) else: tokens[k] = "\n%s(%s)" % (self.writer, tokens[k][1:].strip()) elif continuation: tokens[k] += ')' continuation = False buf = "\n%s" % '\n'.join(tokens) top.append(Node(buf, pre_extend = pre_extend)) else: # It is HTML so just include it. buf = "\n%s(%r, escape=False)" % (self.writer, i) top.append(Node(buf, pre_extend = pre_extend)) # Remember: tag, not tag, tag, not tag in_tag = not in_tag # Make a list of items to remove from child to_rm = [] # Go through each of the children nodes for node in self.child_super_nodes: # If we declared a block that this node wants to include if node.name in self.blocks: # Go ahead and include it! node.value = self.blocks[node.name] # Since we processed this child, we don't need to # pass it along to the parent to_rm.append(node) # Remove some of the processed nodes for node in to_rm: # Since this is a pointer, it works beautifully. # Sometimes I miss C-Style pointers... I want my asterisk... self.child_super_nodes.remove(node) # If we need to extend a template. if extend: self.extend(extend) # We need this for integration with gluon def parse_template(filename, path = 'views/', context = dict(), lexers = {}, delimiters = ('{{','}}') ): """ filename can be a view filename in the views folder or an input stream path is the path of a views folder context is a dictionary of symbols used to render the template """ # First, if we have a str try to open the file if isinstance(filename, str): try: fp = open(os.path.join(path, filename), 'rb') text = fp.read() fp.close() except IOError: raise RestrictedError(filename, '', 'Unable to find the file') else: text = filename.read() # Use the file contents to get a parsed template and return it. return str(TemplateParser(text, context=context, path=path, lexers=lexers, delimiters=delimiters)) def get_parsed(text): """ Returns the indented python code of text. Useful for unit testing. """ return str(TemplateParser(text)) # And this is a generic render function. # Here for integration with gluon. def render(content = "hello world", stream = None, filename = None, path = None, context = {}, lexers = {}, delimiters = ('{{','}}') ): """ >>> render() 'hello world' >>> render(content='abc') 'abc' >>> render(content='abc\\'') "abc'" >>> render(content='a"\\'bc') 'a"\\'bc' >>> render(content='a\\nbc') 'a\\nbc' >>> render(content='a"bcd"e') 'a"bcd"e' >>> render(content="'''a\\nc'''") "'''a\\nc'''" >>> render(content="'''a\\'c'''") "'''a\'c'''" >>> render(content='{{for i in range(a):}}{{=i}}
{{pass}}', context=dict(a=5)) '0
1
2
3
4
' >>> render(content='{%for i in range(a):%}{%=i%}
{%pass%}', context=dict(a=5),delimiters=('{%','%}')) '0
1
2
3
4
' >>> render(content="{{='''hello\\nworld'''}}") 'hello\\nworld' >>> render(content='{{for i in range(3):\\n=i\\npass}}') '012' """ # Here to avoid circular Imports try: from globals import Response except: # Working standalone. Build a mock Response object. class Response(): def __init__(self): self.body = cStringIO.StringIO() def write(self, data, escape=True): if not escape: self.body.write(str(data)) elif hasattr(data,'xml') and callable(data.xml): self.body.write(data.xml()) else: # make it a string if not isinstance(data, (str, unicode)): data = str(data) elif isinstance(data, unicode): data = data.encode('utf8', 'xmlcharrefreplace') data = cgi.escape(data, True).replace("'","'") self.body.write(data) # A little helper to avoid escaping. class NOESCAPE(): def __init__(self, text): self.text = text def xml(self): return self.text # Add it to the context so we can use it. context['NOESCAPE'] = NOESCAPE # If we don't have anything to render, why bother? if not content and not stream and not filename: raise SyntaxError, "Must specify a stream or filename or content" # Here for legacy purposes, probably can be reduced to something more simple. close_stream = False if not stream: if filename: stream = open(filename, 'rb') close_stream = True elif content: stream = cStringIO.StringIO(content) # Get a response class. context['response'] = Response() # Execute the template. code = str(TemplateParser(stream.read(), context=context, path=path, lexers=lexers, delimiters=delimiters)) try: exec(code) in context except Exception: # for i,line in enumerate(code.split('\n')): print i,line raise if close_stream: stream.close() # Returned the rendered content. return context['response'].body.getvalue() if __name__ == '__main__': import doctest doctest.testmod() web2py-1.99.7.orig/gluon/decoder.py0000644000175000017500000000574211724764235015600 0ustar josejoseimport codecs, encodings """Caller will hand this library a buffer and ask it to either convert it or auto-detect the type. Based on http://code.activestate.com/recipes/52257/ Licensed under the PSF License """ # None represents a potentially variable byte. "##" in the XML spec... autodetect_dict={ # bytepattern : ("name", (0x00, 0x00, 0xFE, 0xFF) : ("ucs4_be"), (0xFF, 0xFE, 0x00, 0x00) : ("ucs4_le"), (0xFE, 0xFF, None, None) : ("utf_16_be"), (0xFF, 0xFE, None, None) : ("utf_16_le"), (0x00, 0x3C, 0x00, 0x3F) : ("utf_16_be"), (0x3C, 0x00, 0x3F, 0x00) : ("utf_16_le"), (0x3C, 0x3F, 0x78, 0x6D): ("utf_8"), (0x4C, 0x6F, 0xA7, 0x94): ("EBCDIC") } def autoDetectXMLEncoding(buffer): """ buffer -> encoding_name The buffer should be at least 4 bytes long. Returns None if encoding cannot be detected. Note that encoding_name might not have an installed decoder (e.g. EBCDIC) """ # a more efficient implementation would not decode the whole # buffer at once but otherwise we'd have to decode a character at # a time looking for the quote character...that's a pain encoding = "utf_8" # according to the XML spec, this is the default # this code successively tries to refine the default # whenever it fails to refine, it falls back to # the last place encoding was set. if len(buffer)>=4: bytes = (byte1, byte2, byte3, byte4) = tuple(map(ord, buffer[0:4])) enc_info = autodetect_dict.get(bytes, None) if not enc_info: # try autodetection again removing potentially # variable bytes bytes = (byte1, byte2, None, None) enc_info = autodetect_dict.get(bytes) else: enc_info = None if enc_info: encoding = enc_info # we've got a guess... these are #the new defaults # try to find a more precise encoding using xml declaration secret_decoder_ring = codecs.lookup(encoding)[1] (decoded,length) = secret_decoder_ring(buffer) first_line = decoded.split("\n")[0] if first_line and first_line.startswith(u"-1: quote_char,rest=(first_line[quote_pos], first_line[quote_pos+1:]) encoding=rest[:rest.find(quote_char)] return encoding def decoder(buffer): encoding = autoDetectXMLEncoding(buffer) return buffer.decode(encoding).encode('utf8') web2py-1.99.7.orig/gluon/storage.py0000644000175000017500000001361711724764235015637 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ This file is part of the web2py Web Framework Copyrighted by Massimo Di Pierro License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) Provides: - List; like list but returns None instead of IndexOutOfBounds - Storage; like dictionary allowing also for `obj.foo` for `obj['foo']` """ import cPickle import portalocker __all__ = ['List', 'Storage', 'Settings', 'Messages', 'StorageList', 'load_storage', 'save_storage'] class List(list): """ Like a regular python list but a[i] if i is out of bounds return None instead of IndexOutOfBounds """ def __call__(self, i, default=None): if 0<=i>> o = Storage(a=1) >>> print o.a 1 >>> o['a'] 1 >>> o.a = 2 >>> print o['a'] 2 >>> del o.a >>> print o.a None """ def __getattr__(self, key): return dict.get(self, key, None) def __setattr__(self, key, value): if value is None: if key in self: del self[key] else: self[key] = value def __delattr__(self, key): if key in self: del self[key] else: raise AttributeError, "missing key=%s" % key def __getitem__(self, key): return dict.get(self, key, None) def __repr__(self): return '' def __getstate__(self): return dict(self) def __setstate__(self, value): for (k, v) in value.items(): self[k] = v def getlist(self, key): """Return a Storage value as a list. If the value is a list it will be returned as-is. If object is None, an empty list will be returned. Otherwise, [value] will be returned. Example output for a query string of ?x=abc&y=abc&y=def >>> request = Storage() >>> request.vars = Storage() >>> request.vars.x = 'abc' >>> request.vars.y = ['abc', 'def'] >>> request.vars.getlist('x') ['abc'] >>> request.vars.getlist('y') ['abc', 'def'] >>> request.vars.getlist('z') [] """ value = self.get(key, None) if isinstance(value, (list, tuple)): return value elif value is None: return [] return [value] def getfirst(self, key): """Return the first or only value when given a request.vars-style key. If the value is a list, its first item will be returned; otherwise, the value will be returned as-is. Example output for a query string of ?x=abc&y=abc&y=def >>> request = Storage() >>> request.vars = Storage() >>> request.vars.x = 'abc' >>> request.vars.y = ['abc', 'def'] >>> request.vars.getfirst('x') 'abc' >>> request.vars.getfirst('y') 'abc' >>> request.vars.getfirst('z') """ value = self.getlist(key) if len(value): return value[0] return None def getlast(self, key): """Returns the last or only single value when given a request.vars-style key. If the value is a list, the last item will be returned; otherwise, the value will be returned as-is. Simulated output with a query string of ?x=abc&y=abc&y=def >>> request = Storage() >>> request.vars = Storage() >>> request.vars.x = 'abc' >>> request.vars.y = ['abc', 'def'] >>> request.vars.getlast('x') 'abc' >>> request.vars.getlast('y') 'def' >>> request.vars.getlast('z') """ value = self.getlist(key) if len(value): return value[-1] return None PICKABLE = (str,int,long,float,bool,list,dict,tuple,set) def PickleableStorage(data): return Storage(dict((k,v) for (k,v) in data.items() if isinstance(v,PICKABLE))) class StorageList(Storage): """ like Storage but missing elements default to [] instead of None """ def __getattr__(self, key): if key in self: return self[key] else: self[key] = [] return self[key] def load_storage(filename): fp = None try: fp = portalocker.LockedFile(filename, 'rb') storage = cPickle.load(fp) finally: if fp: fp.close() return Storage(storage) def save_storage(storage, filename): fp = None try: fp = portalocker.LockedFile(filename, 'wb') cPickle.dump(dict(storage), fp) finally: if fp: fp.close() class Settings(Storage): def __setattr__(self, key, value): if key != 'lock_keys' and self.get('lock_keys', None)\ and not key in self: raise SyntaxError, 'setting key \'%s\' does not exist' % key if key != 'lock_values' and self.get('lock_values', None): raise SyntaxError, 'setting value cannot be changed: %s' % key self[key] = value class Messages(Storage): def __init__(self, T): self['T'] = T def __setattr__(self, key, value): if key != 'lock_keys' and self.get('lock_keys', None)\ and not key in self: raise SyntaxError, 'setting key \'%s\' does not exist' % key if key != 'lock_values' and self.get('lock_values', None): raise SyntaxError, 'setting value cannot be changed: %s' % key self[key] = value def __getattr__(self, key): value = self[key] if isinstance(value, str): return str(self['T'](value)) return value if __name__ == '__main__': import doctest doctest.testmod() web2py-1.99.7.orig/gluon/myregex.py0000644000175000017500000000136111724764235015644 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ This file is part of the web2py Web Framework Copyrighted by Massimo Di Pierro License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) """ import re # pattern to find defined tables regex_tables = re.compile(\ """^[\w]+\.define_table\(\s*[\'\"](?P[\w_]+)[\'\"]""", flags=re.M) # pattern to find exposed functions in controller regex_expose = re.compile(\ '^def\s+(?P(?:[a-zA-Z0-9]\w*)|(?:_[a-zA-Z0-9]\w*))\(\)\s*:', flags=re.M) regex_include = re.compile(\ '(?P\{\{\s*include\s+[\'"](?P[^\'"]*)[\'"]\s*\}\})') regex_extend = re.compile(\ '^\s*(?P\{\{\s*extend\s+[\'"](?P[^\'"]+)[\'"]\s*\}\})',re.MULTILINE) web2py-1.99.7.orig/gluon/tools.py0000644000175000017500000050744111724764235015336 0ustar josejose#!/bin/python # -*- coding: utf-8 -*- """ This file is part of the web2py Web Framework Copyrighted by Massimo Di Pierro License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) """ import base64 import cPickle import datetime import thread import logging import sys import glob import os import re import time import smtplib import urllib import urllib2 import Cookie import cStringIO from email import MIMEBase, MIMEMultipart, MIMEText, Encoders, Header, message_from_string from contenttype import contenttype from storage import Storage, PickleableStorage, StorageList, Settings, Messages from utils import web2py_uuid from fileutils import read_file from gluon import * import serializers try: import json as json_parser # try stdlib (Python 2.6) except ImportError: try: import simplejson as json_parser # try external module except: import contrib.simplejson as json_parser # fallback to pure-Python module __all__ = ['Mail', 'Auth', 'Recaptcha', 'Crud', 'Service', 'PluginManager', 'fetch', 'geocode', 'prettydate'] ### mind there are two loggers here (logger and crud.settings.logger)! logger = logging.getLogger("web2py") DEFAULT = lambda: None def callback(actions,form,tablename=None): if actions: if tablename and isinstance(actions,dict): actions = actions.get(tablename, []) if not isinstance(actions,(list, tuple)): actions = [actions] [action(form) for action in actions] def validators(*a): b = [] for item in a: if isinstance(item, (list, tuple)): b = b + list(item) else: b.append(item) return b def call_or_redirect(f,*args): if callable(f): redirect(f(*args)) else: redirect(f) def replace_id(url, form): if url and not url[0] == '/' and url[:4] != 'http': return URL(url.replace('[id]', str(form.vars.id))) return url class Mail(object): """ Class for configuring and sending emails with alternative text / html body, multiple attachments and encryption support Works with SMTP and Google App Engine. """ class Attachment(MIMEBase.MIMEBase): """ Email attachment Arguments: payload: path to file or file-like object with read() method filename: name of the attachment stored in message; if set to None, it will be fetched from payload path; file-like object payload must have explicit filename specified content_id: id of the attachment; automatically contained within < and > content_type: content type of the attachment; if set to None, it will be fetched from filename using gluon.contenttype module encoding: encoding of all strings passed to this function (except attachment body) Content ID is used to identify attachments within the html body; in example, attached image with content ID 'photo' may be used in html message as a source of img tag . Examples: #Create attachment from text file: attachment = Mail.Attachment('/path/to/file.txt') Content-Type: text/plain MIME-Version: 1.0 Content-Disposition: attachment; filename="file.txt" Content-Transfer-Encoding: base64 SOMEBASE64CONTENT= #Create attachment from image file with custom filename and cid: attachment = Mail.Attachment('/path/to/file.png', filename='photo.png', content_id='photo') Content-Type: image/png MIME-Version: 1.0 Content-Disposition: attachment; filename="photo.png" Content-Id: Content-Transfer-Encoding: base64 SOMEOTHERBASE64CONTENT= """ def __init__( self, payload, filename=None, content_id=None, content_type=None, encoding='utf-8'): if isinstance(payload, str): if filename is None: filename = os.path.basename(payload) payload = read_file(payload, 'rb') else: if filename is None: raise Exception('Missing attachment name') payload = payload.read() filename = filename.encode(encoding) if content_type is None: content_type = contenttype(filename) self.my_filename = filename self.my_payload = payload MIMEBase.MIMEBase.__init__(self, *content_type.split('/', 1)) self.set_payload(payload) self['Content-Disposition'] = 'attachment; filename="%s"' % filename if not content_id is None: self['Content-Id'] = '<%s>' % content_id.encode(encoding) Encoders.encode_base64(self) def __init__(self, server=None, sender=None, login=None, tls=True): """ Main Mail object Arguments: server: SMTP server address in address:port notation sender: sender email address login: sender login name and password in login:password notation or None if no authentication is required tls: enables/disables encryption (True by default) In Google App Engine use: server='gae' For sake of backward compatibility all fields are optional and default to None, however, to be able to send emails at least server and sender must be specified. They are available under following fields: mail.settings.server mail.settings.sender mail.settings.login When server is 'logging', email is logged but not sent (debug mode) Optionally you can use PGP encryption or X509: mail.settings.cipher_type = None mail.settings.sign = True mail.settings.sign_passphrase = None mail.settings.encrypt = True mail.settings.x509_sign_keyfile = None mail.settings.x509_sign_certfile = None mail.settings.x509_crypt_certfiles = None cipher_type : None gpg - need a python-pyme package and gpgme lib x509 - smime sign : sign the message (True or False) sign_passphrase : passphrase for key signing encrypt : encrypt the message ... x509 only ... x509_sign_keyfile : the signers private key filename (PEM format) x509_sign_certfile: the signers certificate filename (PEM format) x509_crypt_certfiles: the certificates file to encrypt the messages with can be a file name or a list of file names (PEM format) Examples: #Create Mail object with authentication data for remote server: mail = Mail('example.com:25', 'me@example.com', 'me:password') """ settings = self.settings = Settings() settings.server = server settings.sender = sender settings.login = login settings.tls = tls settings.ssl = False settings.cipher_type = None settings.sign = True settings.sign_passphrase = None settings.encrypt = True settings.x509_sign_keyfile = None settings.x509_sign_certfile = None settings.x509_crypt_certfiles = None settings.debug = False settings.lock_keys = True self.result = {} self.error = None def send( self, to, subject='None', message='None', attachments=None, cc=None, bcc=None, reply_to=None, encoding='utf-8', raw=False, headers={} ): """ Sends an email using data specified in constructor Arguments: to: list or tuple of receiver addresses; will also accept single object subject: subject of the email message: email body text; depends on type of passed object: if 2-list or 2-tuple is passed: first element will be source of plain text while second of html text; otherwise: object will be the only source of plain text and html source will be set to None; If text or html source is: None: content part will be ignored, string: content part will be set to it, file-like object: content part will be fetched from it using it's read() method attachments: list or tuple of Mail.Attachment objects; will also accept single object cc: list or tuple of carbon copy receiver addresses; will also accept single object bcc: list or tuple of blind carbon copy receiver addresses; will also accept single object reply_to: address to which reply should be composed encoding: encoding of all strings passed to this method (including message bodies) headers: dictionary of headers to refine the headers just before sending mail, e.g. {'Return-Path' : 'bounces@example.org'} Examples: #Send plain text message to single address: mail.send('you@example.com', 'Message subject', 'Plain text body of the message') #Send html message to single address: mail.send('you@example.com', 'Message subject', 'Plain text body of the message') #Send text and html message to three addresses (two in cc): mail.send('you@example.com', 'Message subject', ('Plain text body', 'html body'), cc=['other1@example.com', 'other2@example.com']) #Send html only message with image attachment available from the message by 'photo' content id: mail.send('you@example.com', 'Message subject', (None, ''), Mail.Attachment('/path/to/photo.jpg' content_id='photo')) #Send email with two attachments and no body text mail.send('you@example.com, 'Message subject', None, [Mail.Attachment('/path/to/fist.file'), Mail.Attachment('/path/to/second.file')]) Returns True on success, False on failure. Before return, method updates two object's fields: self.result: return value of smtplib.SMTP.sendmail() or GAE's mail.send_mail() method self.error: Exception message or None if above was successful """ def encode_header(key): if [c for c in key if 32>ord(c) or ord(c)>127]: return Header.Header(key.encode('utf-8'),'utf-8') else: return key # encoded or raw text def encoded_or_raw(text): if raw: text = encode_header(text) return text if not isinstance(self.settings.server, str): raise Exception('Server address not specified') if not isinstance(self.settings.sender, str): raise Exception('Sender address not specified') if not raw: payload_in = MIMEMultipart.MIMEMultipart('mixed') else: # no encoding configuration for raw messages if isinstance(message, basestring): text = message.decode(encoding).encode('utf-8') else: text = message.read().decode(encoding).encode('utf-8') # No charset passed to avoid transport encoding # NOTE: some unicode encoded strings will produce # unreadable mail contents. payload_in = MIMEText.MIMEText(text) if to: if not isinstance(to, (list,tuple)): to = [to] else: raise Exception('Target receiver address not specified') if cc: if not isinstance(cc, (list, tuple)): cc = [cc] if bcc: if not isinstance(bcc, (list, tuple)): bcc = [bcc] if message is None: text = html = None elif isinstance(message, (list, tuple)): text, html = message elif message.strip().startswith(''): text = self.settings.server=='gae' and message or None html = message else: text = message html = None if (not text is None or not html is None) and (not raw): attachment = MIMEMultipart.MIMEMultipart('alternative') if not text is None: if isinstance(text, basestring): text = text.decode(encoding).encode('utf-8') else: text = text.read().decode(encoding).encode('utf-8') attachment.attach(MIMEText.MIMEText(text,_charset='utf-8')) if not html is None: if isinstance(html, basestring): html = html.decode(encoding).encode('utf-8') else: html = html.read().decode(encoding).encode('utf-8') attachment.attach(MIMEText.MIMEText(html, 'html',_charset='utf-8')) payload_in.attach(attachment) if (attachments is None) or raw: pass elif isinstance(attachments, (list, tuple)): for attachment in attachments: payload_in.attach(attachment) else: payload_in.attach(attachments) ####################################################### # CIPHER # ####################################################### cipher_type = self.settings.cipher_type sign = self.settings.sign sign_passphrase = self.settings.sign_passphrase encrypt = self.settings.encrypt ####################################################### # GPGME # ####################################################### if cipher_type == 'gpg': if not sign and not encrypt: self.error="No sign and no encrypt is set but cipher type to gpg" return False # need a python-pyme package and gpgme lib from pyme import core, errors from pyme.constants.sig import mode ############################################ # sign # ############################################ if sign: import string core.check_version(None) pin=string.replace(payload_in.as_string(),'\n','\r\n') plain = core.Data(pin) sig = core.Data() c = core.Context() c.set_armor(1) c.signers_clear() # search for signing key for From: for sigkey in c.op_keylist_all(self.settings.sender, 1): if sigkey.can_sign: c.signers_add(sigkey) if not c.signers_enum(0): self.error='No key for signing [%s]' % self.settings.sender return False c.set_passphrase_cb(lambda x,y,z: sign_passphrase) try: # make a signature c.op_sign(plain,sig,mode.DETACH) sig.seek(0,0) # make it part of the email payload=MIMEMultipart.MIMEMultipart('signed', boundary=None, _subparts=None, **dict(micalg="pgp-sha1", protocol="application/pgp-signature")) # insert the origin payload payload.attach(payload_in) # insert the detached signature p=MIMEBase.MIMEBase("application",'pgp-signature') p.set_payload(sig.read()) payload.attach(p) # it's just a trick to handle the no encryption case payload_in=payload except errors.GPGMEError, ex: self.error="GPG error: %s" % ex.getstring() return False ############################################ # encrypt # ############################################ if encrypt: core.check_version(None) plain = core.Data(payload_in.as_string()) cipher = core.Data() c = core.Context() c.set_armor(1) # collect the public keys for encryption recipients=[] rec=to[:] if cc: rec.extend(cc) if bcc: rec.extend(bcc) for addr in rec: c.op_keylist_start(addr,0) r = c.op_keylist_next() if r is None: self.error='No key for [%s]' % addr return False recipients.append(r) try: # make the encryption c.op_encrypt(recipients, 1, plain, cipher) cipher.seek(0,0) # make it a part of the email payload=MIMEMultipart.MIMEMultipart('encrypted', boundary=None, _subparts=None, **dict(protocol="application/pgp-encrypted")) p=MIMEBase.MIMEBase("application",'pgp-encrypted') p.set_payload("Version: 1\r\n") payload.attach(p) p=MIMEBase.MIMEBase("application",'octet-stream') p.set_payload(cipher.read()) payload.attach(p) except errors.GPGMEError, ex: self.error="GPG error: %s" % ex.getstring() return False ####################################################### # X.509 # ####################################################### elif cipher_type == 'x509': if not sign and not encrypt: self.error="No sign and no encrypt is set but cipher type to x509" return False x509_sign_keyfile=self.settings.x509_sign_keyfile if self.settings.x509_sign_certfile: x509_sign_certfile=self.settings.x509_sign_certfile else: # if there is no sign certfile we'll assume the # cert is in keyfile x509_sign_certfile=self.settings.x509_sign_keyfile # crypt certfiles could be a string or a list x509_crypt_certfiles=self.settings.x509_crypt_certfiles # need m2crypto from M2Crypto import BIO, SMIME, X509 msg_bio = BIO.MemoryBuffer(payload_in.as_string()) s = SMIME.SMIME() # SIGN if sign: #key for signing try: s.load_key(x509_sign_keyfile, x509_sign_certfile, callback=lambda x: sign_passphrase) if encrypt: p7 = s.sign(msg_bio) else: p7 = s.sign(msg_bio,flags=SMIME.PKCS7_DETACHED) msg_bio = BIO.MemoryBuffer(payload_in.as_string()) # Recreate coz sign() has consumed it. except Exception,e: self.error="Something went wrong on signing: <%s>" %str(e) return False # ENCRYPT if encrypt: try: sk = X509.X509_Stack() if not isinstance(x509_crypt_certfiles, (list, tuple)): x509_crypt_certfiles = [x509_crypt_certfiles] # make an encryption cert's stack for x in x509_crypt_certfiles: sk.push(X509.load_cert(x)) s.set_x509_stack(sk) s.set_cipher(SMIME.Cipher('des_ede3_cbc')) tmp_bio = BIO.MemoryBuffer() if sign: s.write(tmp_bio, p7) else: tmp_bio.write(payload_in.as_string()) p7 = s.encrypt(tmp_bio) except Exception,e: self.error="Something went wrong on encrypting: <%s>" %str(e) return False # Final stage in sign and encryption out = BIO.MemoryBuffer() if encrypt: s.write(out, p7) else: if sign: s.write(out, p7, msg_bio, SMIME.PKCS7_DETACHED) else: out.write('\r\n') out.write(payload_in.as_string()) out.close() st=str(out.read()) payload=message_from_string(st) else: # no cryptography process as usual payload=payload_in payload['From'] = encoded_or_raw(self.settings.sender.decode(encoding)) origTo = to[:] if to: payload['To'] = encoded_or_raw(', '.join(to).decode(encoding)) if reply_to: payload['Reply-To'] = encoded_or_raw(reply_to.decode(encoding)) if cc: payload['Cc'] = encoded_or_raw(', '.join(cc).decode(encoding)) to.extend(cc) if bcc: to.extend(bcc) payload['Subject'] = encoded_or_raw(subject.decode(encoding)) payload['Date'] = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()) for k,v in headers.iteritems(): payload[k] = encoded_or_raw(v.decode(encoding)) result = {} try: if self.settings.server == 'logging': logger.warn('email not sent\n%s\nFrom: %s\nTo: %s\nSubject: %s\n\n%s\n%s\n' % \ ('-'*40,self.settings.sender, ', '.join(to),subject, text or html,'-'*40)) elif self.settings.server == 'gae': xcc = dict() if cc: xcc['cc'] = cc if bcc: xcc['bcc'] = bcc from google.appengine.api import mail attachments = attachments and [(a.my_filename,a.my_payload) for a in attachments if not raw] if attachments: result = mail.send_mail(sender=self.settings.sender, to=origTo, subject=subject, body=text, html=html, attachments=attachments, **xcc) elif html and (not raw): result = mail.send_mail(sender=self.settings.sender, to=origTo, subject=subject, body=text, html=html, **xcc) else: result = mail.send_mail(sender=self.settings.sender, to=origTo, subject=subject, body=text, **xcc) else: smtp_args = self.settings.server.split(':') if self.settings.ssl: server = smtplib.SMTP_SSL(*smtp_args) else: server = smtplib.SMTP(*smtp_args) if self.settings.tls and not self.settings.ssl: server.ehlo() server.starttls() server.ehlo() if not self.settings.login is None: server.login(*self.settings.login.split(':',1)) result = server.sendmail(self.settings.sender, to, payload.as_string()) server.quit() except Exception, e: logger.warn('Mail.send failure:%s' % e) self.result = result self.error = e return False self.result = result self.error = None return True class Recaptcha(DIV): API_SSL_SERVER = 'https://www.google.com/recaptcha/api' API_SERVER = 'http://www.google.com/recaptcha/api' VERIFY_SERVER = 'http://www.google.com/recaptcha/api/verify' def __init__( self, request, public_key='', private_key='', use_ssl=False, error=None, error_message='invalid', label = 'Verify:', options = '' ): self.remote_addr = request.env.remote_addr self.public_key = public_key self.private_key = private_key self.use_ssl = use_ssl self.error = error self.errors = Storage() self.error_message = error_message self.components = [] self.attributes = {} self.label = label self.options = options self.comment = '' def _validate(self): # for local testing: recaptcha_challenge_field = \ self.request_vars.recaptcha_challenge_field recaptcha_response_field = \ self.request_vars.recaptcha_response_field private_key = self.private_key remoteip = self.remote_addr if not (recaptcha_response_field and recaptcha_challenge_field and len(recaptcha_response_field) and len(recaptcha_challenge_field)): self.errors['captcha'] = self.error_message return False params = urllib.urlencode({ 'privatekey': private_key, 'remoteip': remoteip, 'challenge': recaptcha_challenge_field, 'response': recaptcha_response_field, }) request = urllib2.Request( url=self.VERIFY_SERVER, data=params, headers={'Content-type': 'application/x-www-form-urlencoded', 'User-agent': 'reCAPTCHA Python'}) httpresp = urllib2.urlopen(request) return_values = httpresp.read().splitlines() httpresp.close() return_code = return_values[0] if return_code == 'true': del self.request_vars.recaptcha_challenge_field del self.request_vars.recaptcha_response_field self.request_vars.captcha = '' return True self.errors['captcha'] = self.error_message return False def xml(self): public_key = self.public_key use_ssl = self.use_ssl error_param = '' if self.error: error_param = '&error=%s' % self.error if use_ssl: server = self.API_SSL_SERVER else: server = self.API_SERVER captcha = DIV( SCRIPT("var RecaptchaOptions = {%s};" % self.options), SCRIPT(_type="text/javascript", _src="%s/challenge?k=%s%s" % (server,public_key,error_param)), TAG.noscript(IFRAME(_src="%s/noscript?k=%s%s" % (server,public_key,error_param), _height="300",_width="500",_frameborder="0"), BR(), INPUT(_type='hidden', _name='recaptcha_response_field', _value='manual_challenge')), _id='recaptcha') if not self.errors.captcha: return XML(captcha).xml() else: captcha.append(DIV(self.errors['captcha'], _class='error')) return XML(captcha).xml() def addrow(form, a, b, c, style, _id, position=-1): if style == "divs": form[0].insert(position, DIV(DIV(LABEL(a),_class='w2p_fl'), DIV(b, _class='w2p_fw'), DIV(c, _class='w2p_fc'), _id = _id)) elif style == "table2cols": form[0].insert(position, TR(TD(LABEL(a),_class='w2p_fl'), TD(c,_class='w2p_fc'))) form[0].insert(position+1, TR(TD(b,_class='w2p_fw'), _colspan=2, _id = _id)) elif style == "ul": form[0].insert(position, LI(DIV(LABEL(a),_class='w2p_fl'), DIV(b, _class='w2p_fw'), DIV(c, _class='w2p_fc'), _id = _id)) else: form[0].insert(position, TR(TD(LABEL(a),_class='w2p_fl'), TD(b,_class='w2p_fw'), TD(c,_class='w2p_fc'),_id = _id)) class Auth(object): """ Class for authentication, authorization, role based access control. Includes: - registration and profile - login and logout - username and password retrieval - event logging - role creation and assignment - user defined group/role based permission Authentication Example: from contrib.utils import * mail=Mail() mail.settings.server='smtp.gmail.com:587' mail.settings.sender='you@somewhere.com' mail.settings.login='username:password' auth=Auth(db) auth.settings.mailer=mail # auth.settings....=... auth.define_tables() def authentication(): return dict(form=auth()) exposes: - http://.../{application}/{controller}/authentication/login - http://.../{application}/{controller}/authentication/logout - http://.../{application}/{controller}/authentication/register - http://.../{application}/{controller}/authentication/verify_email - http://.../{application}/{controller}/authentication/retrieve_username - http://.../{application}/{controller}/authentication/retrieve_password - http://.../{application}/{controller}/authentication/reset_password - http://.../{application}/{controller}/authentication/profile - http://.../{application}/{controller}/authentication/change_password On registration a group with role=new_user.id is created and user is given membership of this group. You can create a group with: group_id=auth.add_group('Manager', 'can access the manage action') auth.add_permission(group_id, 'access to manage') Here \"access to manage\" is just a user defined string. You can give access to a user: auth.add_membership(group_id, user_id) If user id is omitted, the logged in user is assumed Then you can decorate any action: @auth.requires_permission('access to manage') def manage(): return dict() You can restrict a permission to a specific table: auth.add_permission(group_id, 'edit', db.sometable) @auth.requires_permission('edit', db.sometable) Or to a specific record: auth.add_permission(group_id, 'edit', db.sometable, 45) @auth.requires_permission('edit', db.sometable, 45) If authorization is not granted calls: auth.settings.on_failed_authorization Other options: auth.settings.mailer=None auth.settings.expiration=3600 # seconds ... ### these are messages that can be customized ... """ @staticmethod def get_or_create_key(filename=None): request = current.request if not filename: filename = os.path.join(request.folder,'private','auth.key') if os.path.exists(filename): key = open(filename,'r').read().strip() else: key = web2py_uuid() open(filename,'w').write(key) return key def url(self, f=None, args=None, vars=None): if args is None: args=[] if vars is None: vars={} return URL(c=self.settings.controller, f=f, args=args, vars=vars) def here(self): return URL(args=current.request.args,vars=current.request.vars) def __init__(self, environment=None, db=None, mailer=True, hmac_key=None, controller='default', function='user', cas_provider=None): """ auth=Auth(db) - environment is there for legacy but unused (awful) - db has to be the database where to create tables for authentication - mailer=Mail(...) or None (no mailed) or True (make a mailer) - hmac_key can be a hmac_key or hmac_key=Auth.get_or_create_key() - controller (where is the user action?) - cas_provider (delegate authentication to the URL, CAS2) """ ## next two lines for backward compatibility if not db and environment and isinstance(environment,DAL): db = environment self.db = db self.environment = current request = current.request session = current.session auth = session.auth self.user_groups = auth and auth.user_groups or {} if auth and auth.last_visit and auth.last_visit + \ datetime.timedelta(days=0, seconds=auth.expiration) > request.now: self.user = auth.user # this is a trick to speed up sessions if (request.now - auth.last_visit).seconds > (auth.expiration/10): auth.last_visit = request.now else: self.user = None session.auth = None settings = self.settings = Settings() # ## what happens after login? self.next = current.request.vars._next if isinstance(self.next,(list,tuple)): self.next = self.next[0] # ## what happens after registration? settings.hideerror = False settings.password_min_length = 4 settings.cas_domains = [request.env.http_host] settings.cas_provider = cas_provider settings.cas_actions = {'login':'login', 'validate':'validate', 'servicevalidate':'serviceValidate', 'proxyvalidate':'proxyValidate', 'logout':'logout'} settings.cas_maps = None settings.extra_fields = {} settings.actions_disabled = [] settings.reset_password_requires_verification = False settings.registration_requires_verification = False settings.registration_requires_approval = False settings.login_after_registration = False settings.alternate_requires_registration = False settings.create_user_groups = True settings.controller = controller settings.function = function settings.login_url = self.url(function, args='login') settings.logged_url = self.url(function, args='profile') settings.download_url = self.url('download') settings.mailer = (mailer==True) and Mail() or mailer settings.login_captcha = None settings.register_captcha = None settings.retrieve_username_captcha = None settings.retrieve_password_captcha = None settings.captcha = None settings.expiration = 3600 # one hour settings.long_expiration = 3600*30*24 # one month settings.remember_me_form = True settings.allow_basic_login = False settings.allow_basic_login_only = False settings.on_failed_authorization = \ self.url(function, args='not_authorized') settings.on_failed_authentication = lambda x: redirect(x) settings.formstyle = 'table3cols' settings.label_separator = ': ' # ## table names to be used settings.password_field = 'password' settings.table_user_name = 'auth_user' settings.table_group_name = 'auth_group' settings.table_membership_name = 'auth_membership' settings.table_permission_name = 'auth_permission' settings.table_event_name = 'auth_event' settings.table_cas_name = 'auth_cas' # ## if none, they will be created settings.table_user = None settings.table_group = None settings.table_membership = None settings.table_permission = None settings.table_event = None settings.table_cas = None # ## settings.showid = False # ## these should be functions or lambdas settings.login_next = self.url('index') settings.login_onvalidation = [] settings.login_onaccept = [] settings.login_methods = [self] settings.login_form = self settings.login_email_validate = True settings.login_userfield = None settings.logout_next = self.url('index') settings.logout_onlogout = None settings.register_next = self.url('index') settings.register_onvalidation = [] settings.register_onaccept = [] settings.register_fields = None settings.register_verify_password = True settings.verify_email_next = self.url(function, args='login') settings.verify_email_onaccept = [] settings.profile_next = self.url('index') settings.profile_onvalidation = [] settings.profile_onaccept = [] settings.profile_fields = None settings.retrieve_username_next = self.url('index') settings.retrieve_password_next = self.url('index') settings.request_reset_password_next = self.url(function, args='login') settings.reset_password_next = self.url(function, args='login') settings.change_password_next = self.url('index') settings.change_password_onvalidation = [] settings.change_password_onaccept = [] settings.retrieve_password_onvalidation = [] settings.reset_password_onvalidation = [] settings.hmac_key = hmac_key settings.lock_keys = True # ## these are messages that can be customized messages = self.messages = Messages(current.T) messages.login_button = 'Login' messages.register_button = 'Register' messages.password_reset_button = 'Request reset password' messages.password_change_button = 'Change password' messages.profile_save_button = 'Save profile' messages.submit_button = 'Submit' messages.verify_password = 'Verify Password' messages.delete_label = 'Check to delete' messages.function_disabled = 'Function disabled' messages.access_denied = 'Insufficient privileges' messages.registration_verifying = 'Registration needs verification' messages.registration_pending = 'Registration is pending approval' messages.login_disabled = 'Login disabled by administrator' messages.logged_in = 'Logged in' messages.email_sent = 'Email sent' messages.unable_to_send_email = 'Unable to send email' messages.email_verified = 'Email verified' messages.logged_out = 'Logged out' messages.registration_successful = 'Registration successful' messages.invalid_email = 'Invalid email' messages.unable_send_email = 'Unable to send email' messages.invalid_login = 'Invalid login' messages.invalid_user = 'Invalid user' messages.invalid_password = 'Invalid password' messages.is_empty = "Cannot be empty" messages.mismatched_password = "Password fields don't match" messages.verify_email = \ 'Click on the link http://' + current.request.env.http_host + \ URL('default','user',args=['verify_email']) + \ '/%(key)s to verify your email' messages.verify_email_subject = 'Email verification' messages.username_sent = 'Your username was emailed to you' messages.new_password_sent = 'A new password was emailed to you' messages.password_changed = 'Password changed' messages.retrieve_username = 'Your username is: %(username)s' messages.retrieve_username_subject = 'Username retrieve' messages.retrieve_password = 'Your password is: %(password)s' messages.retrieve_password_subject = 'Password retrieve' messages.reset_password = \ 'Click on the link http://' + current.request.env.http_host + \ URL('default','user',args=['reset_password']) + \ '/%(key)s to reset your password' messages.reset_password_subject = 'Password reset' messages.invalid_reset_password = 'Invalid reset password' messages.profile_updated = 'Profile updated' messages.new_password = 'New password' messages.old_password = 'Old password' messages.group_description = \ 'Group uniquely assigned to user %(id)s' messages.register_log = 'User %(id)s Registered' messages.login_log = 'User %(id)s Logged-in' messages.login_failed_log = None messages.logout_log = 'User %(id)s Logged-out' messages.profile_log = 'User %(id)s Profile updated' messages.verify_email_log = 'User %(id)s Verification email sent' messages.retrieve_username_log = 'User %(id)s Username retrieved' messages.retrieve_password_log = 'User %(id)s Password retrieved' messages.reset_password_log = 'User %(id)s Password reset' messages.change_password_log = 'User %(id)s Password changed' messages.add_group_log = 'Group %(group_id)s created' messages.del_group_log = 'Group %(group_id)s deleted' messages.add_membership_log = None messages.del_membership_log = None messages.has_membership_log = None messages.add_permission_log = None messages.del_permission_log = None messages.has_permission_log = None messages.impersonate_log = 'User %(id)s is impersonating %(other_id)s' messages.label_first_name = 'First name' messages.label_last_name = 'Last name' messages.label_username = 'Username' messages.label_email = 'E-mail' messages.label_password = 'Password' messages.label_registration_key = 'Registration key' messages.label_reset_password_key = 'Reset Password key' messages.label_registration_id = 'Registration identifier' messages.label_role = 'Role' messages.label_description = 'Description' messages.label_user_id = 'User ID' messages.label_group_id = 'Group ID' messages.label_name = 'Name' messages.label_table_name = 'Object or table name' messages.label_record_id = 'Record ID' messages.label_time_stamp = 'Timestamp' messages.label_client_ip = 'Client IP' messages.label_origin = 'Origin' messages.label_remember_me = "Remember me (for 30 days)" messages['T'] = current.T messages.verify_password_comment = 'please input your password again' messages.lock_keys = True # for "remember me" option response = current.response if auth and auth.remember: #when user wants to be logged in for longer response.cookies[response.session_id_name]["expires"] = \ auth.expiration def lazy_user (auth = self): return auth.user_id reference_user = 'reference %s' % settings.table_user_name def represent(id,record=None,s=settings): try: user = s.table_user(id) return '%(first_name)s %(last_name)s' % user except: return id self.signature = db.Table(self.db,'auth_signature', Field('is_active','boolean',default=True), Field('created_on','datetime', default=request.now, writable=False,readable=False), Field('created_by', reference_user, default=lazy_user,represent=represent, writable=False,readable=False, ), Field('modified_on','datetime', update=request.now,default=request.now, writable=False,readable=False), Field('modified_by', reference_user,represent=represent, default=lazy_user,update=lazy_user, writable=False,readable=False)) def _get_user_id(self): "accessor for auth.user_id" return self.user and self.user.id or None user_id = property(_get_user_id, doc="user.id or None") def _HTTP(self, *a, **b): """ only used in lambda: self._HTTP(404) """ raise HTTP(*a, **b) def __call__(self): """ usage: def authentication(): return dict(form=auth()) """ request = current.request args = request.args if not args: redirect(self.url(args='login',vars=request.vars)) elif args[0] in self.settings.actions_disabled: raise HTTP(404) if args[0] in ('login','logout','register','verify_email', 'retrieve_username','retrieve_password', 'reset_password','request_reset_password', 'change_password','profile','groups', 'impersonate','not_authorized'): return getattr(self,args[0])() elif args[0]=='cas' and not self.settings.cas_provider: if args(1) == self.settings.cas_actions['login']: return self.cas_login(version=2) elif args(1) == self.settings.cas_actions['validate']: return self.cas_validate(version=1) elif args(1) == self.settings.cas_actions['servicevalidate']: return self.cas_validate(version=2, proxy=False) elif args(1) == self.settings.cas_actions['proxyvalidate']: return self.cas_validate(version=2, proxy=True) elif args(1) == self.settings.cas_actions['logout']: return self.logout(next=request.vars.service or DEFAULT) else: raise HTTP(404) def navbar(self, prefix='Welcome', action=None, separators=(' [ ',' | ',' ] ')): request = current.request T = current.T if isinstance(prefix,str): prefix = T(prefix) if not action: action=self.url(self.settings.function) if prefix: prefix = prefix.strip()+' ' s1,s2,s3 = separators if URL() == action: next = '' else: next = '?_next='+urllib.quote(URL(args=request.args,vars=request.vars)) li_next = '?_next='+urllib.quote(self.settings.login_next) lo_next = '?_next='+urllib.quote(self.settings.logout_next) if self.user_id: logout=A(T('Logout'),_href=action+'/logout'+lo_next) profile=A(T('Profile'),_href=action+'/profile'+next) password=A(T('Password'),_href=action+'/change_password'+next) bar = SPAN(prefix,self.user.first_name,s1, logout,s3,_class='auth_navbar') if not 'profile' in self.settings.actions_disabled: bar.insert(4, s2) bar.insert(5, profile) if not 'change_password' in self.settings.actions_disabled: bar.insert(-1, s2) bar.insert(-1, password) else: login=A(T('Login'),_href=action+'/login'+li_next) register=A(T('Register'),_href=action+'/register'+next) retrieve_username=A(T('forgot username?'), _href=action+'/retrieve_username'+next) lost_password=A(T('Lost password?'), _href=action+'/request_reset_password'+next) bar = SPAN(s1, login, s3, _class='auth_navbar') if not 'register' in self.settings.actions_disabled: bar.insert(2, s2) bar.insert(3, register) if 'username' in self.settings.table_user.fields() and \ not 'retrieve_username' in self.settings.actions_disabled: bar.insert(-1, s2) bar.insert(-1, retrieve_username) if not 'request_reset_password' in self.settings.actions_disabled: bar.insert(-1, s2) bar.insert(-1, lost_password) return bar def __get_migrate(self, tablename, migrate=True): if type(migrate).__name__ == 'str': return (migrate + tablename + '.table') elif migrate == False: return False else: return True def define_tables(self, username=False, migrate=True, fake_migrate=False): """ to be called unless tables are defined manually usages: # defines all needed tables and table files # 'myprefix_auth_user.table', ... auth.define_tables(migrate='myprefix_') # defines all needed tables without migration/table files auth.define_tables(migrate=False) """ db = self.db settings = self.settings if not settings.table_user_name in db.tables: passfield = settings.password_field if username or settings.cas_provider: table = db.define_table( settings.table_user_name, Field('first_name', length=128, default='', label=self.messages.label_first_name), Field('last_name', length=128, default='', label=self.messages.label_last_name), Field('email', length=512, default='', label=self.messages.label_email), Field('username', length=128, default='', label=self.messages.label_username), Field(passfield, 'password', length=512, readable=False, label=self.messages.label_password), Field('registration_key', length=512, writable=False, readable=False, default='', label=self.messages.label_registration_key), Field('reset_password_key', length=512, writable=False, readable=False, default='', label=self.messages.label_reset_password_key), Field('registration_id', length=512, writable=False, readable=False, default='', label=self.messages.label_registration_id), *settings.extra_fields.get(settings.table_user_name,[]), **dict( migrate=self.__get_migrate(settings.table_user_name, migrate), fake_migrate=fake_migrate, format='%(username)s')) table.username.requires = (IS_MATCH('[\w\.\-]+'), IS_NOT_IN_DB(db, table.username)) else: table = db.define_table( settings.table_user_name, Field('first_name', length=128, default='', label=self.messages.label_first_name), Field('last_name', length=128, default='', label=self.messages.label_last_name), Field('email', length=512, default='', label=self.messages.label_email), Field(passfield, 'password', length=512, readable=False, label=self.messages.label_password), Field('registration_key', length=512, writable=False, readable=False, default='', label=self.messages.label_registration_key), Field('reset_password_key', length=512, writable=False, readable=False, default='', label=self.messages.label_reset_password_key), Field('registration_id', length=512, writable=False, readable=False, default='', label=self.messages.label_registration_id), *settings.extra_fields.get(settings.table_user_name,[]), **dict( migrate=self.__get_migrate(settings.table_user_name, migrate), fake_migrate=fake_migrate, format='%(first_name)s %(last_name)s (%(id)s)')) table.first_name.requires = \ IS_NOT_EMPTY(error_message=self.messages.is_empty) table.last_name.requires = \ IS_NOT_EMPTY(error_message=self.messages.is_empty) table[passfield].requires = [ CRYPT(key=settings.hmac_key, min_length=self.settings.password_min_length)] table.email.requires = \ [IS_EMAIL(error_message=self.messages.invalid_email), IS_NOT_IN_DB(db, table.email)] table.registration_key.default = '' settings.table_user = db[settings.table_user_name] if not settings.table_group_name in db.tables: table = db.define_table( settings.table_group_name, Field('role', length=512, default='', label=self.messages.label_role), Field('description', 'text', label=self.messages.label_description), *settings.extra_fields.get(settings.table_group_name,[]), **dict( migrate=self.__get_migrate( settings.table_group_name, migrate), fake_migrate=fake_migrate, format = '%(role)s (%(id)s)')) table.role.requires = IS_NOT_IN_DB(db, '%s.role' % settings.table_group_name) settings.table_group = db[settings.table_group_name] if not settings.table_membership_name in db.tables: table = db.define_table( settings.table_membership_name, Field('user_id', settings.table_user, label=self.messages.label_user_id), Field('group_id', settings.table_group, label=self.messages.label_group_id), *settings.extra_fields.get(settings.table_membership_name,[]), **dict( migrate=self.__get_migrate( settings.table_membership_name, migrate), fake_migrate=fake_migrate)) table.user_id.requires = IS_IN_DB(db, '%s.id' % settings.table_user_name, '%(first_name)s %(last_name)s (%(id)s)') table.group_id.requires = IS_IN_DB(db, '%s.id' % settings.table_group_name, '%(role)s (%(id)s)') settings.table_membership = db[settings.table_membership_name] if not settings.table_permission_name in db.tables: table = db.define_table( settings.table_permission_name, Field('group_id', settings.table_group, label=self.messages.label_group_id), Field('name', default='default', length=512, label=self.messages.label_name), Field('table_name', length=512, label=self.messages.label_table_name), Field('record_id', 'integer',default=0, label=self.messages.label_record_id), *settings.extra_fields.get(settings.table_permission_name,[]), **dict( migrate=self.__get_migrate( settings.table_permission_name, migrate), fake_migrate=fake_migrate)) table.group_id.requires = IS_IN_DB(db, '%s.id' % settings.table_group_name, '%(role)s (%(id)s)') table.name.requires = IS_NOT_EMPTY(error_message=self.messages.is_empty) #table.table_name.requires = IS_EMPTY_OR(IS_IN_SET(self.db.tables)) table.record_id.requires = IS_INT_IN_RANGE(0, 10 ** 9) settings.table_permission = db[settings.table_permission_name] if not settings.table_event_name in db.tables: table = db.define_table( settings.table_event_name, Field('time_stamp', 'datetime', default=current.request.now, label=self.messages.label_time_stamp), Field('client_ip', default=current.request.client, label=self.messages.label_client_ip), Field('user_id', settings.table_user, default=None, label=self.messages.label_user_id), Field('origin', default='auth', length=512, label=self.messages.label_origin), Field('description', 'text', default='', label=self.messages.label_description), *settings.extra_fields.get(settings.table_event_name,[]), **dict( migrate=self.__get_migrate( settings.table_event_name, migrate), fake_migrate=fake_migrate)) table.user_id.requires = IS_IN_DB(db, '%s.id' % settings.table_user_name, '%(first_name)s %(last_name)s (%(id)s)') table.origin.requires = IS_NOT_EMPTY(error_message=self.messages.is_empty) table.description.requires = IS_NOT_EMPTY(error_message=self.messages.is_empty) settings.table_event = db[settings.table_event_name] now = current.request.now if settings.cas_domains: if not settings.table_cas_name in db.tables: table = db.define_table( settings.table_cas_name, Field('user_id', settings.table_user, default=None, label=self.messages.label_user_id), Field('created_on','datetime',default=now), Field('service',requires=IS_URL()), Field('ticket'), Field('renew', 'boolean', default=False), *settings.extra_fields.get(settings.table_cas_name,[]), **dict( migrate=self.__get_migrate( settings.table_event_name, migrate), fake_migrate=fake_migrate)) table.user_id.requires = IS_IN_DB(db, '%s.id' % \ settings.table_user_name, '%(first_name)s %(last_name)s (%(id)s)') settings.table_cas = db[settings.table_cas_name] if settings.cas_provider: settings.actions_disabled = \ ['profile','register','change_password','request_reset_password'] from gluon.contrib.login_methods.cas_auth import CasAuth maps = self.settings.cas_maps if not maps: maps = dict((name,lambda v,n=name:v.get(n,None)) for name in \ settings.table_user.fields if name!='id' \ and settings.table_user[name].readable) maps['registration_id'] = \ lambda v,p=settings.cas_provider:'%s/%s' % (p,v['user']) actions = [self.settings.cas_actions['login'], self.settings.cas_actions['servicevalidate'], self.settings.cas_actions['logout']] settings.login_form = CasAuth( casversion = 2, urlbase = settings.cas_provider, actions=actions, maps=maps) def log_event(self, description, vars=None, origin='auth'): """ usage: auth.log_event(description='this happened', origin='auth') """ if not description: return elif self.is_logged_in(): user_id = self.user.id else: user_id = None # user unknown vars = vars or {} self.settings.table_event.insert(description=description % vars, origin=origin, user_id=user_id) def get_or_create_user(self, keys): """ Used for alternate login methods: If the user exists already then password is updated. If the user doesn't yet exist, then they are created. """ table_user = self.settings.table_user user = None checks = [] # make a guess about who this user is for fieldname in ['registration_id','username','email']: if fieldname in table_user.fields() and keys.get(fieldname,None): checks.append(fieldname) user = user or table_user(**{fieldname:keys[fieldname]}) # if we think we found the user but registration_id does not match, make new user if 'registration_id' in checks and user and user.registration_id and user.registration_id!=keys.get('registration_id',None): user = None # THINK MORE ABOUT THIS? DO WE TRUST OPENID PROVIDER? keys['registration_key']='' if user: user.update_record(**table_user._filter_fields(keys)) elif checks: if not 'first_name' in keys and 'first_name' in table_user.fields: keys['first_name'] = keys.get('username',keys.get('email','anonymous')).split('@')[0] user_id = table_user.insert(**table_user._filter_fields(keys)) user = self.user = table_user[user_id] if self.settings.create_user_groups: group_id = self.add_group("user_%s" % user_id) self.add_membership(group_id, user_id) return user def basic(self): if not self.settings.allow_basic_login: return (False,False,False) basic = current.request.env.http_authorization if not basic or not basic[:6].lower() == 'basic ': return (True, False, False) (username, password) = base64.b64decode(basic[6:]).split(':') return (True, True, self.login_bare(username, password)) def login_bare(self, username, password): """ logins user """ request = current.request session = current.session table_user = self.settings.table_user if self.settings.login_userfield: userfield = self.settings.login_userfield elif 'username' in table_user.fields: userfield = 'username' else: userfield = 'email' passfield = self.settings.password_field user = self.db(table_user[userfield] == username).select().first() if user: password = table_user[passfield].validate(password)[0] if not user.registration_key and user[passfield] == password: user = Storage(table_user._filter_fields(user, id=True)) session.auth = Storage(user=user, last_visit=request.now, expiration=self.settings.expiration, hmac_key = web2py_uuid()) self.user = user self.update_groups() return user else: # user not in database try other login methods for login_method in self.settings.login_methods: if login_method != self and login_method(username, password): self.user = username return username return False def cas_login( self, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, log=DEFAULT, version=2, ): request = current.request response = current.response session = current.session db, table = self.db, self.settings.table_cas session._cas_service = request.vars.service or session._cas_service if not request.env.http_host in self.settings.cas_domains or \ not session._cas_service: raise HTTP(403,'not authorized') def allow_access(interactivelogin=False): row = table(service=session._cas_service,user_id=self.user.id) if row: ticket = row.ticket else: ticket = 'ST-'+web2py_uuid() table.insert(service=session._cas_service, user_id=self.user.id, ticket=ticket, created_on=request.now, renew=interactivelogin) service = session._cas_service del session._cas_service if request.vars.has_key('warn') and not interactivelogin: response.headers['refresh'] = "5;URL=%s"%service+"?ticket="+ticket return A("Continue to %s"%service, _href=service+"?ticket="+ticket) else: redirect(service+"?ticket="+ticket) if self.is_logged_in() and not request.vars.has_key('renew'): return allow_access() elif not self.is_logged_in() and request.vars.has_key('gateway'): redirect(service) def cas_onaccept(form, onaccept=onaccept): if not onaccept is DEFAULT: onaccept(form) return allow_access(interactivelogin=True) return self.login(next,onvalidation,cas_onaccept,log) def cas_validate(self, version=2, proxy=False): request = current.request db, table = self.db, self.settings.table_cas current.response.headers['Content-Type']='text' ticket = request.vars.ticket renew = True if request.vars.has_key('renew') else False row = table(ticket=ticket) success = False if row: if self.settings.login_userfield: userfield = self.settings.login_userfield elif 'username' in table.fields: userfield = 'username' else: userfield = 'email' # If ticket is a service Ticket and RENEW flag respected if ticket[0:3] == 'ST-' and \ not ((row.renew and renew) ^ renew): user = self.settings.table_user(row.user_id) row.delete_record() success = True def build_response(body): return '\n'+\ TAG['cas:serviceResponse']( body,**{'_xmlns:cas':'http://www.yale.edu/tp/cas'}).xml() if success: if version == 1: message = 'yes\n%s' % user[userfield] else: # assume version 2 username = user.get('username',user[userfield]) message = build_response( TAG['cas:authenticationSuccess']( TAG['cas:user'](username), *[TAG['cas:'+field.name](user[field.name]) \ for field in self.settings.table_user \ if field.readable])) else: if version == 1: message = 'no\n' elif row: message = build_response(TAG['cas:authenticationFailure']()) else: message = build_response( TAG['cas:authenticationFailure']( 'Ticket %s not recognized' % ticket, _code='INVALID TICKET')) raise HTTP(200,message) def login( self, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, log=DEFAULT, ): """ returns a login form method: Auth.login([next=DEFAULT [, onvalidation=DEFAULT [, onaccept=DEFAULT [, log=DEFAULT]]]]) """ table_user = self.settings.table_user if self.settings.login_userfield: username = self.settings.login_userfield elif 'username' in table_user.fields: username = 'username' else: username = 'email' if 'username' in table_user.fields or \ not self.settings.login_email_validate: tmpvalidator = IS_NOT_EMPTY(error_message=self.messages.is_empty) else: tmpvalidator = IS_EMAIL(error_message=self.messages.invalid_email) old_requires = table_user[username].requires table_user[username].requires = tmpvalidator request = current.request response = current.response session = current.session passfield = self.settings.password_field try: table_user[passfield].requires[-1].min_length = 0 except: pass ### use session for federated login if self.next: session._auth_next = self.next elif session._auth_next: self.next = session._auth_next ### pass if next is DEFAULT: next = self.next or self.settings.login_next if onvalidation is DEFAULT: onvalidation = self.settings.login_onvalidation if onaccept is DEFAULT: onaccept = self.settings.login_onaccept if log is DEFAULT: log = self.messages.login_log user = None # default # do we use our own login form, or from a central source? if self.settings.login_form == self: form = SQLFORM( table_user, fields=[username, passfield], hidden = dict(_next=next), showid=self.settings.showid, submit_button=self.messages.login_button, delete_label=self.messages.delete_label, formstyle=self.settings.formstyle, separator=self.settings.label_separator ) if self.settings.remember_me_form: ## adds a new input checkbox "remember me for longer" addrow(form,XML(" "), DIV(XML(" "), INPUT(_type='checkbox', _class='checkbox', _id="auth_user_remember", _name="remember", ), XML("  "), LABEL( self.messages.label_remember_me, _for="auth_user_remember", )),"", self.settings.formstyle, 'auth_user_remember__row') captcha = self.settings.login_captcha or \ (self.settings.login_captcha!=False and self.settings.captcha) if captcha: addrow(form, captcha.label, captcha, captcha.comment, self.settings.formstyle,'captcha__row') accepted_form = False if form.accepts(request, session, formname='login', dbio=False, onvalidation=onvalidation, hideerror=self.settings.hideerror): accepted_form = True # check for username in db user = self.db(table_user[username] == form.vars[username]).select().first() if user: # user in db, check if registration pending or disabled temp_user = user if temp_user.registration_key == 'pending': response.flash = self.messages.registration_pending return form elif temp_user.registration_key in ('disabled','blocked'): response.flash = self.messages.login_disabled return form elif not temp_user.registration_key is None and \ temp_user.registration_key.strip(): response.flash = \ self.messages.registration_verifying return form # try alternate logins 1st as these have the # current version of the password user = None for login_method in self.settings.login_methods: if login_method != self and \ login_method(request.vars[username], request.vars[passfield]): if not self in self.settings.login_methods: # do not store password in db form.vars[passfield] = None user = self.get_or_create_user(form.vars) break if not user: # alternates have failed, maybe because service inaccessible if self.settings.login_methods[0] == self: # try logging in locally using cached credentials if temp_user[passfield] == form.vars.get(passfield, ''): # success user = temp_user else: # user not in db if not self.settings.alternate_requires_registration: # we're allowed to auto-register users from external systems for login_method in self.settings.login_methods: if login_method != self and \ login_method(request.vars[username], request.vars[passfield]): if not self in self.settings.login_methods: # do not store password in db form.vars[passfield] = None user = self.get_or_create_user(form.vars) break if not user: self.log_event(self.settings.login_failed_log, request.post_vars) # invalid login session.flash = self.messages.invalid_login redirect(self.url(args=request.args,vars=request.get_vars)) else: # use a central authentication server cas = self.settings.login_form cas_user = cas.get_user() if cas_user: cas_user[passfield] = None user = self.get_or_create_user(table_user._filter_fields(cas_user)) elif hasattr(cas,'login_form'): return cas.login_form() else: # we need to pass through login again before going on next = self.url(self.settings.function, args='login') redirect(cas.login_url(next)) # process authenticated users if user: user = Storage(table_user._filter_fields(user, id=True)) # process authenticated users # user wants to be logged in for longer session.auth = Storage( user = user, last_visit = request.now, expiration = request.vars.get("remember",False) and \ self.settings.long_expiration or self.settings.expiration, remember = request.vars.has_key("remember"), hmac_key = web2py_uuid() ) self.user = user self.log_event(log, user) session.flash = self.messages.logged_in self.update_groups() # how to continue if self.settings.login_form == self: if accepted_form: callback(onaccept,form) if next == session._auth_next: session._auth_next = None next = replace_id(next, form) redirect(next) table_user[username].requires = old_requires return form elif user: callback(onaccept,None) if next == session._auth_next: del session._auth_next redirect(next) def logout(self, next=DEFAULT, onlogout=DEFAULT, log=DEFAULT): """ logout and redirects to login method: Auth.logout ([next=DEFAULT[, onlogout=DEFAULT[, log=DEFAULT]]]) """ if next is DEFAULT: next = self.settings.logout_next if onlogout is DEFAULT: onlogout = self.settings.logout_onlogout if onlogout: onlogout(self.user) if log is DEFAULT: log = self.messages.logout_log if self.user: self.log_event(log, self.user) if self.settings.login_form != self: cas = self.settings.login_form cas_user = cas.get_user() if cas_user: next = cas.logout_url(next) current.session.auth = None current.session.flash = self.messages.logged_out redirect(next) def register( self, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, log=DEFAULT, ): """ returns a registration form method: Auth.register([next=DEFAULT [, onvalidation=DEFAULT [, onaccept=DEFAULT [, log=DEFAULT]]]]) """ table_user = self.settings.table_user request = current.request response = current.response session = current.session if self.is_logged_in(): redirect(self.settings.logged_url) if next is DEFAULT: next = self.next or self.settings.register_next if onvalidation is DEFAULT: onvalidation = self.settings.register_onvalidation if onaccept is DEFAULT: onaccept = self.settings.register_onaccept if log is DEFAULT: log = self.messages.register_log passfield = self.settings.password_field formstyle = self.settings.formstyle form = SQLFORM(table_user, fields = self.settings.register_fields, hidden = dict(_next=next), showid=self.settings.showid, submit_button=self.messages.register_button, delete_label=self.messages.delete_label, formstyle=formstyle, separator=self.settings.label_separator ) if self.settings.register_verify_password: for i, row in enumerate(form[0].components): item = row.element('input',_name=passfield) if item: form.custom.widget.password_two = \ INPUT(_name="password_two", _type="password", requires=IS_EXPR( 'value==%s' % \ repr(request.vars.get(passfield, None)), error_message=self.messages.mismatched_password)) addrow(form, self.messages.verify_password + self.settings.label_separator, form.custom.widget.password_two, self.messages.verify_password_comment, formstyle, '%s_%s__row' % (table_user, 'password_two'), position=i+1) break captcha = self.settings.register_captcha or self.settings.captcha if captcha: addrow(form, captcha.label, captcha, captcha.comment,self.settings.formstyle, 'captcha__row') table_user.registration_key.default = key = web2py_uuid() if form.accepts(request, session, formname='register', onvalidation=onvalidation,hideerror=self.settings.hideerror): description = self.messages.group_description % form.vars if self.settings.create_user_groups: group_id = self.add_group("user_%s" % form.vars.id, description) self.add_membership(group_id, form.vars.id) if self.settings.registration_requires_verification: if not self.settings.mailer or \ not self.settings.mailer.send(to=form.vars.email, subject=self.messages.verify_email_subject, message=self.messages.verify_email % dict(key=key)): self.db.rollback() response.flash = self.messages.unable_send_email return form session.flash = self.messages.email_sent if self.settings.registration_requires_approval and \ not self.settings.registration_requires_verification: table_user[form.vars.id] = dict(registration_key='pending') session.flash = self.messages.registration_pending elif (not self.settings.registration_requires_verification or \ self.settings.login_after_registration): if not self.settings.registration_requires_verification: table_user[form.vars.id] = dict(registration_key='') session.flash = self.messages.registration_successful table_user = self.settings.table_user if 'username' in table_user.fields: username = 'username' else: username = 'email' user = self.db(table_user[username] == form.vars[username]).select().first() user = Storage(table_user._filter_fields(user, id=True)) session.auth = Storage(user=user, last_visit=request.now, expiration=self.settings.expiration, hmac_key = web2py_uuid()) self.user = user self.update_groups() session.flash = self.messages.logged_in self.log_event(log, form.vars) callback(onaccept,form) if not next: next = self.url(args = request.args) else: next = replace_id(next, form) redirect(next) return form def is_logged_in(self): """ checks if the user is logged in and returns True/False. if so user is in auth.user as well as in session.auth.user """ if self.user: return True return False def verify_email( self, next=DEFAULT, onaccept=DEFAULT, log=DEFAULT, ): """ action user to verify the registration email, XXXXXXXXXXXXXXXX method: Auth.verify_email([next=DEFAULT [, onvalidation=DEFAULT [, onaccept=DEFAULT [, log=DEFAULT]]]]) """ key = current.request.args[-1] table_user = self.settings.table_user user = self.db(table_user.registration_key == key).select().first() if not user: redirect(self.settings.login_url) if self.settings.registration_requires_approval: user.update_record(registration_key = 'pending') current.session.flash = self.messages.registration_pending else: user.update_record(registration_key = '') current.session.flash = self.messages.email_verified # make sure session has same user.registrato_key as db record if current.session.auth and current.session.auth.user: current.session.auth.user.registration_key = user.registration_key if log is DEFAULT: log = self.messages.verify_email_log if next is DEFAULT: next = self.settings.verify_email_next if onaccept is DEFAULT: onaccept = self.settings.verify_email_onaccept self.log_event(log, user) callback(onaccept,user) redirect(next) def retrieve_username( self, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, log=DEFAULT, ): """ returns a form to retrieve the user username (only if there is a username field) method: Auth.retrieve_username([next=DEFAULT [, onvalidation=DEFAULT [, onaccept=DEFAULT [, log=DEFAULT]]]]) """ table_user = self.settings.table_user if not 'username' in table_user.fields: raise HTTP(404) request = current.request response = current.response session = current.session captcha = self.settings.retrieve_username_captcha or \ (self.settings.retrieve_username_captcha!=False and self.settings.captcha) if not self.settings.mailer: response.flash = self.messages.function_disabled return '' if next is DEFAULT: next = self.next or self.settings.retrieve_username_next if onvalidation is DEFAULT: onvalidation = self.settings.retrieve_username_onvalidation if onaccept is DEFAULT: onaccept = self.settings.retrieve_username_onaccept if log is DEFAULT: log = self.messages.retrieve_username_log old_requires = table_user.email.requires table_user.email.requires = [IS_IN_DB(self.db, table_user.email, error_message=self.messages.invalid_email)] form = SQLFORM(table_user, fields=['email'], hidden = dict(_next=next), showid=self.settings.showid, submit_button=self.messages.submit_button, delete_label=self.messages.delete_label, formstyle=self.settings.formstyle, separator=self.settings.label_separator ) if captcha: addrow(form, captcha.label, captcha, captcha.comment,self.settings.formstyle, 'captcha__row') if form.accepts(request, session, formname='retrieve_username', dbio=False, onvalidation=onvalidation,hideerror=self.settings.hideerror): user = self.db(table_user.email == form.vars.email).select().first() if not user: current.session.flash = \ self.messages.invalid_email redirect(self.url(args=request.args)) username = user.username self.settings.mailer.send(to=form.vars.email, subject=self.messages.retrieve_username_subject, message=self.messages.retrieve_username % dict(username=username)) session.flash = self.messages.email_sent self.log_event(log, user) callback(onaccept,form) if not next: next = self.url(args = request.args) else: next = replace_id(next, form) redirect(next) table_user.email.requires = old_requires return form def random_password(self): import string import random password = '' specials=r'!#$*' for i in range(0,3): password += random.choice(string.lowercase) password += random.choice(string.uppercase) password += random.choice(string.digits) password += random.choice(specials) return ''.join(random.sample(password,len(password))) def reset_password_deprecated( self, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, log=DEFAULT, ): """ returns a form to reset the user password (deprecated) method: Auth.reset_password_deprecated([next=DEFAULT [, onvalidation=DEFAULT [, onaccept=DEFAULT [, log=DEFAULT]]]]) """ table_user = self.settings.table_user request = current.request response = current.response session = current.session if not self.settings.mailer: response.flash = self.messages.function_disabled return '' if next is DEFAULT: next = self.next or self.settings.retrieve_password_next if onvalidation is DEFAULT: onvalidation = self.settings.retrieve_password_onvalidation if onaccept is DEFAULT: onaccept = self.settings.retrieve_password_onaccept if log is DEFAULT: log = self.messages.retrieve_password_log old_requires = table_user.email.requires table_user.email.requires = [IS_IN_DB(self.db, table_user.email, error_message=self.messages.invalid_email)] form = SQLFORM(table_user, fields=['email'], hidden = dict(_next=next), showid=self.settings.showid, submit_button=self.messages.submit_button, delete_label=self.messages.delete_label, formstyle=self.settings.formstyle, separator=self.settings.label_separator ) if form.accepts(request, session, formname='retrieve_password', dbio=False, onvalidation=onvalidation,hideerror=self.settings.hideerror): user = self.db(table_user.email == form.vars.email).select().first() if not user: current.session.flash = \ self.messages.invalid_email redirect(self.url(args=request.args)) elif user.registration_key in ('pending','disabled','blocked'): current.session.flash = \ self.messages.registration_pending redirect(self.url(args=request.args)) password = self.random_password() passfield = self.settings.password_field d = {passfield: table_user[passfield].validate(password)[0], 'registration_key': ''} user.update_record(**d) if self.settings.mailer and \ self.settings.mailer.send(to=form.vars.email, subject=self.messages.retrieve_password_subject, message=self.messages.retrieve_password \ % dict(password=password)): session.flash = self.messages.email_sent else: session.flash = self.messages.unable_to_send_email self.log_event(log, user) callback(onaccept,form) if not next: next = self.url(args = request.args) else: next = replace_id(next, form) redirect(next) table_user.email.requires = old_requires return form def reset_password( self, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, log=DEFAULT, ): """ returns a form to reset the user password method: Auth.reset_password([next=DEFAULT [, onvalidation=DEFAULT [, onaccept=DEFAULT [, log=DEFAULT]]]]) """ table_user = self.settings.table_user request = current.request # response = current.response session = current.session if next is DEFAULT: next = self.next or self.settings.reset_password_next try: key = request.vars.key or request.args[-1] t0 = int(key.split('-')[0]) if time.time()-t0 > 60*60*24: raise Exception user = self.db(table_user.reset_password_key == key).select().first() if not user: raise Exception except Exception: session.flash = self.messages.invalid_reset_password redirect(next) passfield = self.settings.password_field form = SQLFORM.factory( Field('new_password', 'password', label=self.messages.new_password, requires=self.settings.table_user[passfield].requires), Field('new_password2', 'password', label=self.messages.verify_password, requires=[IS_EXPR('value==%s' % repr(request.vars.new_password), self.messages.mismatched_password)]), submit_button=self.messages.password_reset_button, hidden = dict(_next=next), formstyle=self.settings.formstyle, separator=self.settings.label_separator ) if form.accepts(request,session,hideerror=self.settings.hideerror): user.update_record(**{passfield:form.vars.new_password, 'registration_key':'', 'reset_password_key':''}) session.flash = self.messages.password_changed redirect(next) return form def request_reset_password( self, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, log=DEFAULT, ): """ returns a form to reset the user password method: Auth.reset_password([next=DEFAULT [, onvalidation=DEFAULT [, onaccept=DEFAULT [, log=DEFAULT]]]]) """ table_user = self.settings.table_user request = current.request response = current.response session = current.session captcha = self.settings.retrieve_password_captcha or \ (self.settings.retrieve_password_captcha!=False and self.settings.captcha) if next is DEFAULT: next = self.next or self.settings.request_reset_password_next if not self.settings.mailer: response.flash = self.messages.function_disabled return '' if onvalidation is DEFAULT: onvalidation = self.settings.reset_password_onvalidation if onaccept is DEFAULT: onaccept = self.settings.reset_password_onaccept if log is DEFAULT: log = self.messages.reset_password_log table_user.email.requires = [ IS_EMAIL(error_message=self.messages.invalid_email), IS_IN_DB(self.db, table_user.email, error_message=self.messages.invalid_email)] form = SQLFORM(table_user, fields=['email'], hidden = dict(_next=next), showid=self.settings.showid, submit_button=self.messages.password_reset_button, delete_label=self.messages.delete_label, formstyle=self.settings.formstyle, separator=self.settings.label_separator ) if captcha: addrow(form, captcha.label, captcha, captcha.comment, self.settings.formstyle,'captcha__row') if form.accepts(request, session, formname='reset_password', dbio=False, onvalidation=onvalidation, hideerror=self.settings.hideerror): user = self.db(table_user.email == form.vars.email).select().first() if not user: session.flash = self.messages.invalid_email redirect(self.url(args=request.args)) elif user.registration_key in ('pending','disabled','blocked'): session.flash = self.messages.registration_pending redirect(self.url(args=request.args)) reset_password_key = str(int(time.time()))+'-' + web2py_uuid() if self.settings.mailer.send(to=form.vars.email, subject=self.messages.reset_password_subject, message=self.messages.reset_password % \ dict(key=reset_password_key)): session.flash = self.messages.email_sent user.update_record(reset_password_key=reset_password_key) else: session.flash = self.messages.unable_to_send_email self.log_event(log, user) callback(onaccept,form) if not next: next = self.url(args = request.args) else: next = replace_id(next, form) redirect(next) # old_requires = table_user.email.requires return form def retrieve_password( self, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, log=DEFAULT, ): if self.settings.reset_password_requires_verification: return self.request_reset_password(next,onvalidation,onaccept,log) else: return self.reset_password_deprecated(next,onvalidation,onaccept,log) def change_password( self, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, log=DEFAULT, ): """ returns a form that lets the user change password method: Auth.change_password([next=DEFAULT[, onvalidation=DEFAULT[, onaccept=DEFAULT[, log=DEFAULT]]]]) """ if not self.is_logged_in(): redirect(self.settings.login_url) db = self.db table_user = self.settings.table_user usern = self.settings.table_user_name s = db(table_user.id == self.user.id) request = current.request session = current.session if next is DEFAULT: next = self.next or self.settings.change_password_next if onvalidation is DEFAULT: onvalidation = self.settings.change_password_onvalidation if onaccept is DEFAULT: onaccept = self.settings.change_password_onaccept if log is DEFAULT: log = self.messages.change_password_log passfield = self.settings.password_field form = SQLFORM.factory( Field('old_password', 'password', label=self.messages.old_password, requires=validators( table_user[passfield].requires, IS_IN_DB(s, '%s.%s' % (usern, passfield), error_message=self.messages.invalid_password))), Field('new_password', 'password', label=self.messages.new_password, requires=table_user[passfield].requires), Field('new_password2', 'password', label=self.messages.verify_password, requires=[IS_EXPR('value==%s' % repr(request.vars.new_password), self.messages.mismatched_password)]), submit_button=self.messages.password_change_button, hidden = dict(_next=next), formstyle = self.settings.formstyle, separator=self.settings.label_separator ) if form.accepts(request, session, formname='change_password', onvalidation=onvalidation, hideerror=self.settings.hideerror): d = {passfield: form.vars.new_password} s.update(**d) session.flash = self.messages.password_changed self.log_event(log, self.user) callback(onaccept,form) if not next: next = self.url(args=request.args) else: next = replace_id(next, form) redirect(next) return form def profile( self, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, log=DEFAULT, ): """ returns a form that lets the user change his/her profile method: Auth.profile([next=DEFAULT [, onvalidation=DEFAULT [, onaccept=DEFAULT [, log=DEFAULT]]]]) """ table_user = self.settings.table_user if not self.is_logged_in(): redirect(self.settings.login_url) passfield = self.settings.password_field self.settings.table_user[passfield].writable = False request = current.request session = current.session if next is DEFAULT: next = self.next or self.settings.profile_next if onvalidation is DEFAULT: onvalidation = self.settings.profile_onvalidation if onaccept is DEFAULT: onaccept = self.settings.profile_onaccept if log is DEFAULT: log = self.messages.profile_log form = SQLFORM( table_user, self.user.id, fields = self.settings.profile_fields, hidden = dict(_next=next), showid = self.settings.showid, submit_button = self.messages.profile_save_button, delete_label = self.messages.delete_label, upload = self.settings.download_url, formstyle = self.settings.formstyle, separator=self.settings.label_separator ) if form.accepts(request, session, formname='profile', onvalidation=onvalidation, hideerror=self.settings.hideerror): self.user.update(table_user._filter_fields(form.vars)) session.flash = self.messages.profile_updated self.log_event(log,self.user) callback(onaccept,form) if not next: next = self.url(args=request.args) else: next = replace_id(next, form) redirect(next) return form def is_impersonating(self): if not current.session.auth: return None return current.session.auth.get('impersonator',None) def impersonate(self, user_id=DEFAULT): """ usage: POST TO http://..../impersonate request.post_vars.user_id= set request.post_vars.user_id to 0 to restore original user. requires impersonator is logged in and has_permission('impersonate', 'auth_user', user_id) """ request = current.request session = current.session auth = session.auth if not self.is_logged_in(): raise HTTP(401, "Not Authorized") current_id = auth.user.id requested_id = user_id if user_id is DEFAULT: user_id = current.request.post_vars.user_id if user_id and user_id != self.user.id and user_id != '0': if not self.has_permission('impersonate', self.settings.table_user_name, user_id): raise HTTP(403, "Forbidden") user = self.settings.table_user(user_id) if not user: raise HTTP(401, "Not Authorized") auth.impersonator = cPickle.dumps(session) auth.user.update( self.settings.table_user._filter_fields(user, True)) self.user = auth.user if self.settings.login_onaccept: form = Storage(dict(vars=self.user)) self.settings.login_onaccept(form) log = self.messages.impersonate_log self.log_event(log,dict(id=current_id, other_id=auth.user.id)) elif user_id in (0, '0') and self.is_impersonating(): session.clear() session.update(cPickle.loads(auth.impersonator)) self.user = session.auth.user if requested_id is DEFAULT and not request.post_vars: return SQLFORM.factory(Field('user_id', 'integer')) return self.user def update_groups(self): if not self.user: return user_groups = self.user_groups = {} if current.session.auth: current.session.auth.user_groups = self.user_groups memberships = self.db(self.settings.table_membership.user_id == self.user.id).select() for membership in memberships: group = self.settings.table_group(membership.group_id) if group: user_groups[membership.group_id] = group.role def groups(self): """ displays the groups and their roles for the logged in user """ if not self.is_logged_in(): redirect(self.settings.login_url) memberships = self.db(self.settings.table_membership.user_id == self.user.id).select() table = TABLE() for membership in memberships: groups = self.db(self.settings.table_group.id == membership.group_id).select() if groups: group = groups[0] table.append(TR(H3(group.role, '(%s)' % group.id))) table.append(TR(P(group.description))) if not memberships: return None return table def not_authorized(self): """ you can change the view for this page to make it look as you like """ if current.request.ajax: raise HTTP(403,'ACCESS DENIED') return 'ACCESS DENIED' def requires(self, condition, requires_login=True): """ decorator that prevents access to action if not logged in """ def decorator(action): def f(*a, **b): basic_allowed,basic_accepted,user = self.basic() user = user or self.user if requires_login: if not user: if self.settings.allow_basic_login_only or \ basic_accepted or current.request.is_restful: raise HTTP(403,"Not authorized") elif current.request.ajax: return A('login',_href=self.settings.login_url) else: next = self.here() current.session.flash = current.response.flash return call_or_redirect( self.settings.on_failed_authentication, self.settings.login_url+\ '?_next='+urllib.quote(next)) if callable(condition): flag = condition() else: flag = condition if not flag: current.session.flash = self.messages.access_denied return call_or_redirect( self.settings.on_failed_authorization) return action(*a, **b) f.__doc__ = action.__doc__ f.__name__ = action.__name__ f.__dict__.update(action.__dict__) return f return decorator def requires_login(self): """ decorator that prevents access to action if not logged in """ return self.requires(True) def requires_membership(self, role=None, group_id=None): """ decorator that prevents access to action if not logged in or if user logged in is not a member of group_id. If role is provided instead of group_id then the group_id is calculated. """ return self.requires(lambda: self.has_membership(group_id=group_id, role=role)) def requires_permission(self, name, table_name='', record_id=0): """ decorator that prevents access to action if not logged in or if user logged in is not a member of any group (role) that has 'name' access to 'table_name', 'record_id'. """ return self.requires(lambda: self.has_permission(name, table_name, record_id)) def requires_signature(self): """ decorator that prevents access to action if not logged in or if user logged in is not a member of group_id. If role is provided instead of group_id then the group_id is calculated. """ return self.requires(lambda: URL.verify(current.request,user_signature=True)) def add_group(self, role, description=''): """ creates a group associated to a role """ group_id = self.settings.table_group.insert( role=role, description=description) self.log_event(self.messages.add_group_log, dict(group_id=group_id, role=role)) return group_id def del_group(self, group_id): """ deletes a group """ self.db(self.settings.table_group.id == group_id).delete() self.db(self.settings.table_membership.group_id == group_id).delete() self.db(self.settings.table_permission.group_id == group_id).delete() self.update_groups() self.log_event(self.messages.del_group_log,dict(group_id=group_id)) def id_group(self, role): """ returns the group_id of the group specified by the role """ rows = self.db(self.settings.table_group.role == role).select() if not rows: return None return rows[0].id def user_group(self, user_id = None): """ returns the group_id of the group uniquely associated to this user i.e. role=user:[user_id] """ if not user_id and self.user: user_id = self.user.id role = 'user_%s' % user_id return self.id_group(role) def has_membership(self, group_id=None, user_id=None, role=None): """ checks if user is member of group_id or role """ group_id = group_id or self.id_group(role) try: group_id = int(group_id) except: group_id = self.id_group(group_id) # interpret group_id as a role if not user_id and self.user: user_id = self.user.id membership = self.settings.table_membership if self.db((membership.user_id == user_id) & (membership.group_id == group_id)).select(): r = True else: r = False self.log_event(self.messages.has_membership_log, dict(user_id=user_id,group_id=group_id, check=r)) return r def add_membership(self, group_id=None, user_id=None, role=None): """ gives user_id membership of group_id or role if user is None than user_id is that of current logged in user """ group_id = group_id or self.id_group(role) try: group_id = int(group_id) except: group_id = self.id_group(group_id) # interpret group_id as a role if not user_id and self.user: user_id = self.user.id membership = self.settings.table_membership record = membership(user_id = user_id,group_id = group_id) if record: return record.id else: id = membership.insert(group_id=group_id, user_id=user_id) self.update_groups() self.log_event(self.messages.add_membership_log, dict(user_id=user_id, group_id=group_id)) return id def del_membership(self, group_id=None, user_id=None, role=None): """ revokes membership from group_id to user_id if user_id is None than user_id is that of current logged in user """ group_id = group_id or self.id_group(role) if not user_id and self.user: user_id = self.user.id membership = self.settings.table_membership self.log_event(self.messages.del_membership_log, dict(user_id=user_id,group_id=group_id)) ret = self.db(membership.user_id == user_id)(membership.group_id == group_id).delete() self.update_groups() return ret def has_permission( self, name='any', table_name='', record_id=0, user_id=None, group_id=None, ): """ checks if user_id or current logged in user is member of a group that has 'name' permission on 'table_name' and 'record_id' if group_id is passed, it checks whether the group has the permission """ if not user_id and not group_id and self.user: user_id = self.user.id if user_id: membership = self.settings.table_membership rows = self.db(membership.user_id == user_id).select(membership.group_id) groups = set([row.group_id for row in rows]) if group_id and not group_id in groups: return False else: groups = set([group_id]) permission = self.settings.table_permission rows = self.db(permission.name == name)(permission.table_name == str(table_name))(permission.record_id == record_id).select(permission.group_id) groups_required = set([row.group_id for row in rows]) if record_id: rows = self.db(permission.name == name)(permission.table_name == str(table_name))(permission.record_id == 0).select(permission.group_id) groups_required = groups_required.union(set([row.group_id for row in rows])) if groups.intersection(groups_required): r = True else: r = False if user_id: self.log_event(self.messages.has_permission_log, dict(user_id=user_id, name=name, table_name=table_name, record_id=record_id)) return r def add_permission( self, group_id, name='any', table_name='', record_id=0, ): """ gives group_id 'name' access to 'table_name' and 'record_id' """ permission = self.settings.table_permission if group_id == 0: group_id = self.user_group() id = permission.insert(group_id=group_id, name=name, table_name=str(table_name), record_id=long(record_id)) self.log_event(self.messages.add_permission_log, dict(permission_id=id, group_id=group_id, name=name, table_name=table_name, record_id=record_id)) return id def del_permission( self, group_id, name='any', table_name='', record_id=0, ): """ revokes group_id 'name' access to 'table_name' and 'record_id' """ permission = self.settings.table_permission self.log_event(self.messages.del_permission_log, dict(group_id=group_id, name=name, table_name=table_name, record_id=record_id)) return self.db(permission.group_id == group_id)(permission.name == name)(permission.table_name == str(table_name))(permission.record_id == long(record_id)).delete() def accessible_query(self, name, table, user_id=None): """ returns a query with all accessible records for user_id or the current logged in user this method does not work on GAE because uses JOIN and IN example: db(auth.accessible_query('read', db.mytable)).select(db.mytable.ALL) """ if not user_id: user_id = self.user_id if self.has_permission(name, table, 0, user_id): return table.id > 0 db = self.db membership = self.settings.table_membership permission = self.settings.table_permission return table.id.belongs(db(membership.user_id == user_id)\ (membership.group_id == permission.group_id)\ (permission.name == name)\ (permission.table_name == table)\ ._select(permission.record_id)) @staticmethod def archive(form, archive_table=None, current_record='current_record', archive_current=False, fields=None): """ If you have a table (db.mytable) that needs full revision history you can just do: form=crud.update(db.mytable,myrecord,onaccept=auth.archive) or form=SQLFORM(db.mytable,myrecord).process(onaccept=auth.archive) crud.archive will define a new table "mytable_archive" and store a copy of the current record (if archive_current=True) or a copy of the previous record (if archive_current=False) in the newly created table including a reference to the current record. fields allows to specify extra fields that need to be archived. If you want to access such table you need to define it yourself in a model: db.define_table('mytable_archive', Field('current_record',db.mytable), db.mytable) Notice such table includes all fields of db.mytable plus one: current_record. crud.archive does not timestamp the stored record unless your original table has a fields like: db.define_table(..., Field('saved_on','datetime', default=request.now,update=request.now,writable=False), Field('saved_by',auth.user, default=auth.user_id,update=auth.user_id,writable=False), there is nothing special about these fields since they are filled before the record is archived. If you want to change the archive table name and the name of the reference field you can do, for example: db.define_table('myhistory', Field('parent_record',db.mytable), db.mytable) and use it as: form=crud.update(db.mytable,myrecord, onaccept=lambda form:crud.archive(form, archive_table=db.myhistory, current_record='parent_record')) """ if not archive_current and not form.record: return None table = form.table if not archive_table: archive_table_name = '%s_archive' % table if archive_table_name in table._db: archive_table = table._db[archive_table_name] else: archive_table = table._db.define_table(archive_table_name, Field(current_record,table), table) new_record = {current_record:form.vars.id} for fieldname in archive_table.fields: if not fieldname in ['id',current_record]: if archive_current and fieldname in form.vars: new_record[fieldname]=form.vars[fieldname] elif form.record and fieldname in form.record: new_record[fieldname]=form.record[fieldname] if fields: for key,value in fields.items(): new_record[key] = value id = archive_table.insert(**new_record) return id class Crud(object): def url(self, f=None, args=None, vars=None): """ this should point to the controller that exposes download and crud """ if args is None: args=[] if vars is None: vars={} return URL(c=self.settings.controller, f=f, args=args, vars=vars) def __init__(self, environment, db=None, controller='default'): self.db = db if not db and environment and isinstance(environment,DAL): self.db = environment elif not db: raise SyntaxError, "must pass db as first or second argument" self.environment = current settings = self.settings = Settings() settings.auth = None settings.logger = None settings.create_next = None settings.update_next = None settings.controller = controller settings.delete_next = self.url() settings.download_url = self.url('download') settings.create_onvalidation = StorageList() settings.update_onvalidation = StorageList() settings.delete_onvalidation = StorageList() settings.create_onaccept = StorageList() settings.update_onaccept = StorageList() settings.update_ondelete = StorageList() settings.delete_onaccept = StorageList() settings.update_deletable = True settings.showid = False settings.keepvalues = False settings.create_captcha = None settings.update_captcha = None settings.captcha = None settings.formstyle = 'table3cols' settings.label_separator = ': ' settings.hideerror = False settings.detect_record_change = True settings.hmac_key = None settings.lock_keys = True messages = self.messages = Messages(current.T) messages.submit_button = 'Submit' messages.delete_label = 'Check to delete:' messages.record_created = 'Record Created' messages.record_updated = 'Record Updated' messages.record_deleted = 'Record Deleted' messages.update_log = 'Record %(id)s updated' messages.create_log = 'Record %(id)s created' messages.read_log = 'Record %(id)s read' messages.delete_log = 'Record %(id)s deleted' messages.lock_keys = True def __call__(self): args = current.request.args if len(args) < 1: raise HTTP(404) elif args[0] == 'tables': return self.tables() elif len(args) > 1 and not args(1) in self.db.tables: raise HTTP(404) table = self.db[args(1)] if args[0] == 'create': return self.create(table) elif args[0] == 'select': return self.select(table,linkto=self.url(args='read')) elif args[0] == 'search': form, rows = self.search(table,linkto=self.url(args='read')) return DIV(form,SQLTABLE(rows)) elif args[0] == 'read': return self.read(table, args(2)) elif args[0] == 'update': return self.update(table, args(2)) elif args[0] == 'delete': return self.delete(table, args(2)) else: raise HTTP(404) def log_event(self, message, vars): if self.settings.logger: self.settings.logger.log_event(message, vars, origin = 'crud') def has_permission(self, name, table, record=0): if not self.settings.auth: return True try: record_id = record.id except: record_id = record return self.settings.auth.has_permission(name, str(table), record_id) def tables(self): return TABLE(*[TR(A(name, _href=self.url(args=('select',name)))) \ for name in self.db.tables]) @staticmethod def archive(form,archive_table=None,current_record='current_record'): return Auth.archive(form,archive_table=archive_table, current_record=current_record) def update( self, table, record, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, ondelete=DEFAULT, log=DEFAULT, message=DEFAULT, deletable=DEFAULT, formname=DEFAULT, ): """ method: Crud.update(table, record, [next=DEFAULT [, onvalidation=DEFAULT [, onaccept=DEFAULT [, log=DEFAULT [, message=DEFAULT[, deletable=DEFAULT]]]]]]) """ if not (isinstance(table, self.db.Table) or table in self.db.tables) \ or (isinstance(record, str) and not str(record).isdigit()): raise HTTP(404) if not isinstance(table, self.db.Table): table = self.db[table] try: record_id = record.id except: record_id = record or 0 if record_id and not self.has_permission('update', table, record_id): redirect(self.settings.auth.settings.on_failed_authorization) if not record_id and not self.has_permission('create', table, record_id): redirect(self.settings.auth.settings.on_failed_authorization) request = current.request response = current.response session = current.session if request.extension == 'json' and request.vars.json: request.vars.update(json_parser.loads(request.vars.json)) if next is DEFAULT: next = request.get_vars._next \ or request.post_vars._next \ or self.settings.update_next if onvalidation is DEFAULT: onvalidation = self.settings.update_onvalidation if onaccept is DEFAULT: onaccept = self.settings.update_onaccept if ondelete is DEFAULT: ondelete = self.settings.update_ondelete if log is DEFAULT: log = self.messages.update_log if deletable is DEFAULT: deletable = self.settings.update_deletable if message is DEFAULT: message = self.messages.record_updated form = SQLFORM( table, record, hidden=dict(_next=next), showid=self.settings.showid, submit_button=self.messages.submit_button, delete_label=self.messages.delete_label, deletable=deletable, upload=self.settings.download_url, formstyle=self.settings.formstyle, separator=self.settings.label_separator ) self.accepted = False self.deleted = False captcha = self.settings.update_captcha or self.settings.captcha if record and captcha: addrow(form, captcha.label, captcha, captcha.comment, self.settings.formstyle,'captcha__row') captcha = self.settings.create_captcha or self.settings.captcha if not record and captcha: addrow(form, captcha.label, captcha, captcha.comment, self.settings.formstyle,'captcha__row') if not request.extension in ('html','load'): (_session, _formname) = (None, None) else: (_session, _formname) = (session, '%s/%s' % (table._tablename, form.record_id)) if not formname is DEFAULT: _formname = formname keepvalues = self.settings.keepvalues if request.vars.delete_this_record: keepvalues = False if isinstance(onvalidation,StorageList): onvalidation=onvalidation.get(table._tablename, []) if form.accepts(request, _session, formname=_formname, onvalidation=onvalidation, keepvalues=keepvalues, hideerror=self.settings.hideerror, detect_record_change = self.settings.detect_record_change): self.accepted = True response.flash = message if log: self.log_event(log, form.vars) if request.vars.delete_this_record: self.deleted = True message = self.messages.record_deleted callback(ondelete,form,table._tablename) response.flash = message callback(onaccept,form,table._tablename) if not request.extension in ('html','load'): raise HTTP(200, 'RECORD CREATED/UPDATED') if isinstance(next, (list, tuple)): ### fix issue with 2.6 next = next[0] if next: # Only redirect when explicit next = replace_id(next, form) session.flash = response.flash redirect(next) elif not request.extension in ('html','load'): raise HTTP(401,serializers.json(dict(errors=form.errors))) return form def create( self, table, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, log=DEFAULT, message=DEFAULT, formname=DEFAULT, ): """ method: Crud.create(table, [next=DEFAULT [, onvalidation=DEFAULT [, onaccept=DEFAULT [, log=DEFAULT[, message=DEFAULT]]]]]) """ if next is DEFAULT: next = self.settings.create_next if onvalidation is DEFAULT: onvalidation = self.settings.create_onvalidation if onaccept is DEFAULT: onaccept = self.settings.create_onaccept if log is DEFAULT: log = self.messages.create_log if message is DEFAULT: message = self.messages.record_created return self.update( table, None, next=next, onvalidation=onvalidation, onaccept=onaccept, log=log, message=message, deletable=False, formname=formname, ) def read(self, table, record): if not (isinstance(table, self.db.Table) or table in self.db.tables) \ or (isinstance(record, str) and not str(record).isdigit()): raise HTTP(404) if not isinstance(table, self.db.Table): table = self.db[table] if not self.has_permission('read', table, record): redirect(self.settings.auth.settings.on_failed_authorization) form = SQLFORM( table, record, readonly=True, comments=False, upload=self.settings.download_url, showid=self.settings.showid, formstyle=self.settings.formstyle, separator=self.settings.label_separator ) if not current.request.extension in ('html','load'): return table._filter_fields(form.record, id=True) return form def delete( self, table, record_id, next=DEFAULT, message=DEFAULT, ): """ method: Crud.delete(table, record_id, [next=DEFAULT [, message=DEFAULT]]) """ if not (isinstance(table, self.db.Table) or table in self.db.tables): raise HTTP(404) if not isinstance(table, self.db.Table): table = self.db[table] if not self.has_permission('delete', table, record_id): redirect(self.settings.auth.settings.on_failed_authorization) request = current.request session = current.session if next is DEFAULT: next = request.get_vars._next \ or request.post_vars._next \ or self.settings.delete_next if message is DEFAULT: message = self.messages.record_deleted record = table[record_id] if record: callback(self.settings.delete_onvalidation,record) del table[record_id] callback(self.settings.delete_onaccept,record,table._tablename) session.flash = message redirect(next) def rows( self, table, query=None, fields=None, orderby=None, limitby=None, ): if not (isinstance(table, self.db.Table) or table in self.db.tables): raise HTTP(404) if not self.has_permission('select', table): redirect(self.settings.auth.settings.on_failed_authorization) #if record_id and not self.has_permission('select', table): # redirect(self.settings.auth.settings.on_failed_authorization) if not isinstance(table, self.db.Table): table = self.db[table] if not query: query = table.id > 0 if not fields: fields = [field for field in table if field.readable] rows = self.db(query).select(*fields,**dict(orderby=orderby, limitby=limitby)) return rows def select( self, table, query=None, fields=None, orderby=None, limitby=None, headers=None, **attr ): headers = headers or {} rows = self.rows(table,query,fields,orderby,limitby) if not rows: return None # Nicer than an empty table. if not 'upload' in attr: attr['upload'] = self.url('download') if not current.request.extension in ('html','load'): return rows.as_list() if not headers: if isinstance(table,str): table = self.db[table] headers = dict((str(k),k.label) for k in table) return SQLTABLE(rows,headers=headers,**attr) def get_format(self, field): rtable = field._db[field.type[10:]] format = rtable.get('_format', None) if format and isinstance(format, str): return format[2:-2] return field.name def get_query(self, field, op, value, refsearch=False): try: if refsearch: format = self.get_format(field) if op == 'equals': if not refsearch: return field == value else: return lambda row: row[field.name][format] == value elif op == 'not equal': if not refsearch: return field != value else: return lambda row: row[field.name][format] != value elif op == 'greater than': if not refsearch: return field > value else: return lambda row: row[field.name][format] > value elif op == 'less than': if not refsearch: return field < value else: return lambda row: row[field.name][format] < value elif op == 'starts with': if not refsearch: return field.like(value+'%') else: return lambda row: str(row[field.name][format]).startswith(value) elif op == 'ends with': if not refsearch: return field.like('%'+value) else: return lambda row: str(row[field.name][format]).endswith(value) elif op == 'contains': if not refsearch: return field.like('%'+value+'%') else: return lambda row: value in row[field.name][format] except: return None def search(self, *tables, **args): """ Creates a search form and its results for a table Example usage: form, results = crud.search(db.test, queries = ['equals', 'not equal', 'contains'], query_labels={'equals':'Equals', 'not equal':'Not equal'}, fields = ['id','children'], field_labels = {'id':'ID','children':'Children'}, zero='Please choose', query = (db.test.id > 0)&(db.test.id != 3) ) """ table = tables[0] fields = args.get('fields', table.fields) request = current.request db = self.db if not (isinstance(table, db.Table) or table in db.tables): raise HTTP(404) attributes = {} for key in ('orderby','groupby','left','distinct','limitby','cache'): if key in args: attributes[key]=args[key] tbl = TABLE() selected = []; refsearch = []; results = [] showall = args.get('showall', False) if showall: selected = fields chkall = args.get('chkall', False) if chkall: for f in fields: request.vars['chk%s'%f] = 'on' ops = args.get('queries', []) zero = args.get('zero', '') if not ops: ops = ['equals', 'not equal', 'greater than', 'less than', 'starts with', 'ends with', 'contains'] ops.insert(0,zero) query_labels = args.get('query_labels', {}) query = args.get('query',table.id > 0) field_labels = args.get('field_labels',{}) for field in fields: field = table[field] if not field.readable: continue fieldname = field.name chkval = request.vars.get('chk' + fieldname, None) txtval = request.vars.get('txt' + fieldname, None) opval = request.vars.get('op' + fieldname, None) row = TR(TD(INPUT(_type = "checkbox", _name = "chk" + fieldname, _disabled = (field.type == 'id'), value = (field.type == 'id' or chkval == 'on'))), TD(field_labels.get(fieldname,field.label)), TD(SELECT([OPTION(query_labels.get(op,op), _value=op) for op in ops], _name = "op" + fieldname, value = opval)), TD(INPUT(_type = "text", _name = "txt" + fieldname, _value = txtval, _id='txt' + fieldname, _class = str(field.type)))) tbl.append(row) if request.post_vars and (chkval or field.type=='id'): if txtval and opval != '': if field.type[0:10] == 'reference ': refsearch.append(self.get_query(field, opval, txtval, refsearch=True)) else: value, error = field.validate(txtval) if not error: ### TODO deal with 'starts with', 'ends with', 'contains' on GAE query &= self.get_query(field, opval, value) else: row[3].append(DIV(error,_class='error')) selected.append(field) form = FORM(tbl,INPUT(_type="submit")) if selected: try: results = db(query).select(*selected,**attributes) for r in refsearch: results = results.find(r) except: # hmmm, we should do better here results = None return form, results urllib2.install_opener(urllib2.build_opener(urllib2.HTTPCookieProcessor())) def fetch(url, data=None, headers=None, cookie=Cookie.SimpleCookie(), user_agent='Mozilla/5.0'): headers = headers or {} if not data is None: data = urllib.urlencode(data) if user_agent: headers['User-agent'] = user_agent headers['Cookie'] = ' '.join(['%s=%s;'%(c.key,c.value) for c in cookie.values()]) try: from google.appengine.api import urlfetch except ImportError: req = urllib2.Request(url, data, headers) html = urllib2.urlopen(req).read() else: method = ((data is None) and urlfetch.GET) or urlfetch.POST while url is not None: response = urlfetch.fetch(url=url, payload=data, method=method, headers=headers, allow_truncated=False,follow_redirects=False, deadline=10) # next request will be a get, so no need to send the data again data = None method = urlfetch.GET # load cookies from the response cookie.load(response.headers.get('set-cookie', '')) url = response.headers.get('location') html = response.content return html regex_geocode = \ re.compile('\(?P[^,]*),(?P[^,]*).*?\') def geocode(address): try: a = urllib.quote(address) txt = fetch('http://maps.google.com/maps/geo?q=%s&output=xml' % a) item = regex_geocode.search(txt) (la, lo) = (float(item.group('la')), float(item.group('lo'))) return (la, lo) except: return (0.0, 0.0) def universal_caller(f, *a, **b): c = f.func_code.co_argcount n = f.func_code.co_varnames[:c] defaults = f.func_defaults or [] pos_args = n[0:-len(defaults)] named_args = n[-len(defaults):] arg_dict = {} # Fill the arg_dict with name and value for the submitted, positional values for pos_index, pos_val in enumerate(a[:c]): arg_dict[n[pos_index]] = pos_val # n[pos_index] is the name of the argument # There might be pos_args left, that are sent as named_values. Gather them as well. # If a argument already is populated with values we simply replaces them. for arg_name in pos_args[len(arg_dict):]: if b.has_key(arg_name): arg_dict[arg_name] = b[arg_name] if len(arg_dict) >= len(pos_args): # All the positional arguments is found. The function may now be called. # However, we need to update the arg_dict with the values from the named arguments as well. for arg_name in named_args: if b.has_key(arg_name): arg_dict[arg_name] = b[arg_name] return f(**arg_dict) # Raise an error, the function cannot be called. raise HTTP(404, "Object does not exist") class Service(object): def __init__(self, environment=None): self.run_procedures = {} self.csv_procedures = {} self.xml_procedures = {} self.rss_procedures = {} self.json_procedures = {} self.jsonrpc_procedures = {} self.xmlrpc_procedures = {} self.amfrpc_procedures = {} self.amfrpc3_procedures = {} self.soap_procedures = {} def run(self, f): """ example: service = Service() @service.run def myfunction(a, b): return a + b def call(): return service() Then call it with: wget http://..../app/default/call/run/myfunction?a=3&b=4 """ self.run_procedures[f.__name__] = f return f def csv(self, f): """ example: service = Service() @service.csv def myfunction(a, b): return a + b def call(): return service() Then call it with: wget http://..../app/default/call/csv/myfunction?a=3&b=4 """ self.run_procedures[f.__name__] = f return f def xml(self, f): """ example: service = Service() @service.xml def myfunction(a, b): return a + b def call(): return service() Then call it with: wget http://..../app/default/call/xml/myfunction?a=3&b=4 """ self.run_procedures[f.__name__] = f return f def rss(self, f): """ example: service = Service() @service.rss def myfunction(): return dict(title=..., link=..., description=..., created_on=..., entries=[dict(title=..., link=..., description=..., created_on=...]) def call(): return service() Then call it with: wget http://..../app/default/call/rss/myfunction """ self.rss_procedures[f.__name__] = f return f def json(self, f): """ example: service = Service() @service.json def myfunction(a, b): return [{a: b}] def call(): return service() Then call it with: wget http://..../app/default/call/json/myfunction?a=hello&b=world """ self.json_procedures[f.__name__] = f return f def jsonrpc(self, f): """ example: service = Service() @service.jsonrpc def myfunction(a, b): return a + b def call(): return service() Then call it with: wget http://..../app/default/call/jsonrpc/myfunction?a=hello&b=world """ self.jsonrpc_procedures[f.__name__] = f return f def xmlrpc(self, f): """ example: service = Service() @service.xmlrpc def myfunction(a, b): return a + b def call(): return service() The call it with: wget http://..../app/default/call/xmlrpc/myfunction?a=hello&b=world """ self.xmlrpc_procedures[f.__name__] = f return f def amfrpc(self, f): """ example: service = Service() @service.amfrpc def myfunction(a, b): return a + b def call(): return service() The call it with: wget http://..../app/default/call/amfrpc/myfunction?a=hello&b=world """ self.amfrpc_procedures[f.__name__] = f return f def amfrpc3(self, domain='default'): """ example: service = Service() @service.amfrpc3('domain') def myfunction(a, b): return a + b def call(): return service() The call it with: wget http://..../app/default/call/amfrpc3/myfunction?a=hello&b=world """ if not isinstance(domain, str): raise SyntaxError, "AMF3 requires a domain for function" def _amfrpc3(f): if domain: self.amfrpc3_procedures[domain+'.'+f.__name__] = f else: self.amfrpc3_procedures[f.__name__] = f return f return _amfrpc3 def soap(self, name=None, returns=None, args=None,doc=None): """ example: service = Service() @service.soap('MyFunction',returns={'result':int},args={'a':int,'b':int,}) def myfunction(a, b): return a + b def call(): return service() The call it with: from gluon.contrib.pysimplesoap.client import SoapClient client = SoapClient(wsdl="http://..../app/default/call/soap?WSDL") response = client.MyFunction(a=1,b=2) return response['result'] Exposes online generated documentation and xml example messages at: - http://..../app/default/call/soap """ def _soap(f): self.soap_procedures[name or f.__name__] = f, returns, args, doc return f return _soap def serve_run(self, args=None): request = current.request if not args: args = request.args if args and args[0] in self.run_procedures: return str(universal_caller(self.run_procedures[args[0]], *args[1:], **dict(request.vars))) self.error() def serve_csv(self, args=None): request = current.request response = current.response response.headers['Content-Type'] = 'text/x-csv' if not args: args = request.args def none_exception(value): if isinstance(value, unicode): return value.encode('utf8') if hasattr(value, 'isoformat'): return value.isoformat()[:19].replace('T', ' ') if value is None: return '' return value if args and args[0] in self.run_procedures: r = universal_caller(self.run_procedures[args[0]], *args[1:], **dict(request.vars)) s = cStringIO.StringIO() if hasattr(r, 'export_to_csv_file'): r.export_to_csv_file(s) elif r and isinstance(r[0], (dict, Storage)): import csv writer = csv.writer(s) writer.writerow(r[0].keys()) for line in r: writer.writerow([none_exception(v) \ for v in line.values()]) else: import csv writer = csv.writer(s) for line in r: writer.writerow(line) return s.getvalue() self.error() def serve_xml(self, args=None): request = current.request response = current.response response.headers['Content-Type'] = 'text/xml' if not args: args = request.args if args and args[0] in self.run_procedures: s = universal_caller(self.run_procedures[args[0]], *args[1:], **dict(request.vars)) if hasattr(s, 'as_list'): s = s.as_list() return serializers.xml(s,quote=False) self.error() def serve_rss(self, args=None): request = current.request response = current.response if not args: args = request.args if args and args[0] in self.rss_procedures: feed = universal_caller(self.rss_procedures[args[0]], *args[1:], **dict(request.vars)) else: self.error() response.headers['Content-Type'] = 'application/rss+xml' return serializers.rss(feed) def serve_json(self, args=None): request = current.request response = current.response response.headers['Content-Type'] = 'application/json; charset=utf-8' if not args: args = request.args d = dict(request.vars) if args and args[0] in self.json_procedures: s = universal_caller(self.json_procedures[args[0]],*args[1:],**d) if hasattr(s, 'as_list'): s = s.as_list() return response.json(s) self.error() class JsonRpcException(Exception): def __init__(self,code,info): self.code,self.info = code,info def serve_jsonrpc(self): def return_response(id, result): return serializers.json({'version': '1.1', 'id': id, 'result': result, 'error': None}) def return_error(id, code, message): return serializers.json({'id': id, 'version': '1.1', 'error': {'name': 'JSONRPCError', 'code': code, 'message': message} }) request = current.request response = current.response response.headers['Content-Type'] = 'application/json; charset=utf-8' methods = self.jsonrpc_procedures data = json_parser.loads(request.body.read()) id, method, params = data['id'], data['method'], data.get('params','') if not method in methods: return return_error(id, 100, 'method "%s" does not exist' % method) try: s = methods[method](*params) if hasattr(s, 'as_list'): s = s.as_list() return return_response(id, s) except Service.JsonRpcException, e: return return_error(id, e.code, e.info) except BaseException: etype, eval, etb = sys.exc_info() return return_error(id, 100, '%s: %s' % (etype.__name__, eval)) except: etype, eval, etb = sys.exc_info() return return_error(id, 100, 'Exception %s: %s' % (etype, eval)) def serve_xmlrpc(self): request = current.request response = current.response services = self.xmlrpc_procedures.values() return response.xmlrpc(request, services) def serve_amfrpc(self, version=0): try: import pyamf import pyamf.remoting.gateway except: return "pyamf not installed or not in Python sys.path" request = current.request response = current.response if version == 3: services = self.amfrpc3_procedures base_gateway = pyamf.remoting.gateway.BaseGateway(services) pyamf_request = pyamf.remoting.decode(request.body) else: services = self.amfrpc_procedures base_gateway = pyamf.remoting.gateway.BaseGateway(services) context = pyamf.get_context(pyamf.AMF0) pyamf_request = pyamf.remoting.decode(request.body, context) pyamf_response = pyamf.remoting.Envelope(pyamf_request.amfVersion) for name, message in pyamf_request: pyamf_response[name] = base_gateway.getProcessor(message)(message) response.headers['Content-Type'] = pyamf.remoting.CONTENT_TYPE if version==3: return pyamf.remoting.encode(pyamf_response).getvalue() else: return pyamf.remoting.encode(pyamf_response, context).getvalue() def serve_soap(self, version="1.1"): try: from contrib.pysimplesoap.server import SoapDispatcher except: return "pysimplesoap not installed in contrib" request = current.request response = current.response procedures = self.soap_procedures location = "%s://%s%s" % ( request.env.wsgi_url_scheme, request.env.http_host, URL(r=request,f="call/soap",vars={})) namespace = 'namespace' in response and response.namespace or location documentation = response.description or '' dispatcher = SoapDispatcher( name = response.title, location = location, action = location, # SOAPAction namespace = namespace, prefix='pys', documentation = documentation, ns = True) for method, (function, returns, args, doc) in procedures.items(): dispatcher.register_function(method, function, returns, args, doc) if request.env.request_method == 'POST': # Process normal Soap Operation response.headers['Content-Type'] = 'text/xml' return dispatcher.dispatch(request.body.read()) elif 'WSDL' in request.vars: # Return Web Service Description response.headers['Content-Type'] = 'text/xml' return dispatcher.wsdl() elif 'op' in request.vars: # Return method help webpage response.headers['Content-Type'] = 'text/html' method = request.vars['op'] sample_req_xml, sample_res_xml, doc = dispatcher.help(method) body = [H1("Welcome to Web2Py SOAP webservice gateway"), A("See all webservice operations", _href=URL(r=request,f="call/soap",vars={})), H2(method), P(doc), UL(LI("Location: %s" % dispatcher.location), LI("Namespace: %s" % dispatcher.namespace), LI("SoapAction: %s" % dispatcher.action), ), H3("Sample SOAP XML Request Message:"), CODE(sample_req_xml,language="xml"), H3("Sample SOAP XML Response Message:"), CODE(sample_res_xml,language="xml"), ] return {'body': body} else: # Return general help and method list webpage response.headers['Content-Type'] = 'text/html' body = [H1("Welcome to Web2Py SOAP webservice gateway"), P(response.description), P("The following operations are available"), A("See WSDL for webservice description", _href=URL(r=request,f="call/soap",vars={"WSDL":None})), UL([LI(A("%s: %s" % (method, doc or ''), _href=URL(r=request,f="call/soap",vars={'op': method}))) for method, doc in dispatcher.list_methods()]), ] return {'body': body} def __call__(self): """ register services with: service = Service() @service.run @service.rss @service.json @service.jsonrpc @service.xmlrpc @service.amfrpc @service.amfrpc3('domain') @service.soap('Method', returns={'Result':int}, args={'a':int,'b':int,}) expose services with def call(): return service() call services with http://..../app/default/call/run?[parameters] http://..../app/default/call/rss?[parameters] http://..../app/default/call/json?[parameters] http://..../app/default/call/jsonrpc http://..../app/default/call/xmlrpc http://..../app/default/call/amfrpc http://..../app/default/call/amfrpc3 http://..../app/default/call/soap """ request = current.request if len(request.args) < 1: raise HTTP(404, "Not Found") arg0 = request.args(0) if arg0 == 'run': return self.serve_run(request.args[1:]) elif arg0 == 'rss': return self.serve_rss(request.args[1:]) elif arg0 == 'csv': return self.serve_csv(request.args[1:]) elif arg0 == 'xml': return self.serve_xml(request.args[1:]) elif arg0 == 'json': return self.serve_json(request.args[1:]) elif arg0 == 'jsonrpc': return self.serve_jsonrpc() elif arg0 == 'xmlrpc': return self.serve_xmlrpc() elif arg0 == 'amfrpc': return self.serve_amfrpc() elif arg0 == 'amfrpc3': return self.serve_amfrpc(3) elif arg0 == 'soap': return self.serve_soap() else: self.error() def error(self): raise HTTP(404, "Object does not exist") def completion(callback): """ Executes a task on completion of the called action. For example: from gluon.tools import completion @completion(lambda d: logging.info(repr(d))) def index(): return dict(message='hello') It logs the output of the function every time input is called. The argument of completion is executed in a new thread. """ def _completion(f): def __completion(*a,**b): d = None try: d = f(*a,**b) return d finally: thread.start_new_thread(callback,(d,)) return __completion return _completion def prettydate(d,T=lambda x:x): try: dt = datetime.datetime.now() - d except: return '' if dt.days >= 2*365: return T('%d years ago') % int(dt.days / 365) elif dt.days >= 365: return T('1 year ago') elif dt.days >= 60: return T('%d months ago') % int(dt.days / 30) elif dt.days > 21: return T('1 month ago') elif dt.days >= 14: return T('%d weeks ago') % int(dt.days / 7) elif dt.days >= 7: return T('1 week ago') elif dt.days > 1: return T('%d days ago') % dt.days elif dt.days == 1: return T('1 day ago') elif dt.seconds >= 2*60*60: return T('%d hours ago') % int(dt.seconds / 3600) elif dt.seconds >= 60*60: return T('1 hour ago') elif dt.seconds >= 2*60: return T('%d minutes ago') % int(dt.seconds / 60) elif dt.seconds >= 60: return T('1 minute ago') elif dt.seconds > 1: return T('%d seconds ago') % dt.seconds elif dt.seconds == 1: return T('1 second ago') else: return T('now') def test_thread_separation(): def f(): c=PluginManager() lock1.acquire() lock2.acquire() c.x=7 lock1.release() lock2.release() lock1=thread.allocate_lock() lock2=thread.allocate_lock() lock1.acquire() thread.start_new_thread(f,()) a=PluginManager() a.x=5 lock1.release() lock2.acquire() return a.x class PluginManager(object): """ Plugin Manager is similar to a storage object but it is a single level singleton this means that multiple instances within the same thread share the same attributes Its constructor is also special. The first argument is the name of the plugin you are defining. The named arguments are parameters needed by the plugin with default values. If the parameters were previous defined, the old values are used. For example: ### in some general configuration file: >>> plugins = PluginManager() >>> plugins.me.param1=3 ### within the plugin model >>> _ = PluginManager('me',param1=5,param2=6,param3=7) ### where the plugin is used >>> print plugins.me.param1 3 >>> print plugins.me.param2 6 >>> plugins.me.param3 = 8 >>> print plugins.me.param3 8 Here are some tests: >>> a=PluginManager() >>> a.x=6 >>> b=PluginManager('check') >>> print b.x 6 >>> b=PluginManager() # reset settings >>> print b.x >>> b.x=7 >>> print a.x 7 >>> a.y.z=8 >>> print b.y.z 8 >>> test_thread_separation() 5 >>> plugins=PluginManager('me',db='mydb') >>> print plugins.me.db mydb >>> print 'me' in plugins True >>> print plugins.me.installed True """ instances = {} def __new__(cls,*a,**b): id = thread.get_ident() lock = thread.allocate_lock() try: lock.acquire() try: return cls.instances[id] except KeyError: instance = object.__new__(cls,*a,**b) cls.instances[id] = instance return instance finally: lock.release() def __init__(self,plugin=None,**defaults): if not plugin: self.__dict__.clear() settings = self.__getattr__(plugin) settings.installed = True [settings.update({key:value}) for key,value in defaults.items() \ if not key in settings] def __getattr__(self, key): if not key in self.__dict__: self.__dict__[key] = Storage() return self.__dict__[key] def keys(self): return self.__dict__.keys() def __contains__(self,key): return key in self.__dict__ class Expose(object): def __init__(self,base=None): current.session.forget() base = base or os.path.join(current.request.folder,'static') args = self.args = current.request.raw_args and \ current.request.raw_args.split('/') or [] filename = os.path.join(base,*args) if not os.path.normpath(filename).startswith(base): raise HTTP(401,"NOT AUTHORIZED") if not os.path.isdir(filename): current.response.headers['Content-Type'] = contenttype(filename) raise HTTP(200,open(filename,'rb'),**current.response.headers) self.path = path = os.path.join(filename,'*') self.folders = [f[len(path)-1:] for f in sorted(glob.glob(path)) \ if os.path.isdir(f) and not self.isprivate(f)] self.filenames = [f[len(path)-1:] for f in sorted(glob.glob(path)) \ if not os.path.isdir(f) and not self.isprivate(f)] def breadcrumbs(self): path = [] span = SPAN() span.append(A('base',_href=URL())) span.append('/') args = current.request.raw_args and \ current.request.raw_args.split('/') or [] for arg in args: path.append(arg) span.append(A(arg,_href=URL(args='/'.join(path)))) span.append('/') return span def table_folders(self): return TABLE(*[TR(TD(A(folder,_href=URL(args=self.args+[folder])))) \ for folder in self.folders]) @staticmethod def isprivate(f): return 'private' in f or f.startswith('.') or f.endswith('~') @staticmethod def isimage(f): return f.rsplit('.')[-1].lower() in ('png','jpg','jpeg','gif','tiff') def table_files(self,width=160): return TABLE(*[TR(TD(A(f,_href=URL(args=self.args+[f]))), TD(IMG(_src=URL(args=self.args+[f]), _style='max-width:%spx' % width) \ if width and self.isimage(f) else '')) \ for f in self.filenames]) def xml(self): return DIV( H2(self.breadcrumbs()), H3('Folders'), self.table_folders(), H3('Files'), self.table_files()).xml() if __name__ == '__main__': import doctest doctest.testmod() web2py-1.99.7.orig/gluon/__init__.py0000644000175000017500000000336511724764235015731 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ This file is part of the web2py Web Framework Copyrighted by Massimo Di Pierro License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) Web2Py framework modules ======================== """ __all__ = ['A', 'B', 'BEAUTIFY', 'BODY', 'BR', 'CAT', 'CENTER', 'CLEANUP', 'CODE', 'CRYPT', 'DAL', 'DIV', 'EM', 'EMBED', 'FIELDSET', 'FORM', 'Field', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'HEAD', 'HR', 'HTML', 'HTTP', 'I', 'IFRAME', 'IMG', 'INPUT', 'IS_ALPHANUMERIC', 'IS_DATE', 'IS_DATETIME', 'IS_DATETIME_IN_RANGE', 'IS_DATE_IN_RANGE', 'IS_DECIMAL_IN_RANGE', 'IS_EMAIL', 'IS_EMPTY_OR', 'IS_EQUAL_TO', 'IS_EXPR', 'IS_FLOAT_IN_RANGE', 'IS_IMAGE', 'IS_INT_IN_RANGE', 'IS_IN_DB', 'IS_IN_SET', 'IS_IPV4', 'IS_LENGTH', 'IS_LIST_OF', 'IS_LOWER', 'IS_MATCH', 'IS_NOT_EMPTY', 'IS_NOT_IN_DB', 'IS_NULL_OR', 'IS_SLUG', 'IS_STRONG', 'IS_TIME', 'IS_UPLOAD_FILENAME', 'IS_UPPER', 'IS_URL', 'LABEL', 'LEGEND', 'LI', 'LINK', 'LOAD', 'MARKMIN', 'MENU', 'META', 'OBJECT', 'OL', 'ON', 'OPTGROUP', 'OPTION', 'P', 'PRE', 'SCRIPT', 'SELECT', 'SPAN', 'SQLFORM', 'SQLTABLE', 'STYLE', 'TABLE', 'TAG', 'TBODY', 'TD', 'TEXTAREA', 'TFOOT', 'TH', 'THEAD', 'TITLE', 'TR', 'TT', 'UL', 'URL', 'XHTML', 'XML','redirect','current','embed64'] from globals import current from html import * from validators import * from http import redirect, HTTP from dal import DAL, Field from sqlhtml import SQLFORM, SQLTABLE from compileapp import LOAD # Dummy code to enable code completion in IDE's. if 0: from globals import Request, Response, Session from cache import Cache from languages import translator request = Request() response = Response() session = Session() cache = Cache(request) T = translator(request) web2py-1.99.7.orig/gluon/newcron.py0000644000175000017500000002716411724764235015650 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ Created by Attila Csipa Modified by Massimo Di Pierro """ import sys import os import threading import logging import time import sched import re import datetime import platform import portalocker import fileutils import cPickle from settings import global_settings logger = logging.getLogger("web2py.cron") _cron_stopping = False def absolute_path_link(path): """ Return an absolute path for the destination of a symlink """ if os.path.islink(path): link = os.readlink(path) if not os.path.isabs(link): link = os.path.join(os.path.dirname(path), link) else: link = os.path.abspath(path) return link def stopcron(): "graceful shutdown of cron" global _cron_stopping _cron_stopping = True class extcron(threading.Thread): def __init__(self, applications_parent): threading.Thread.__init__(self) self.setDaemon(False) self.path = applications_parent crondance(self.path, 'external', startup=True) def run(self): if not _cron_stopping: logger.debug('external cron invocation') crondance(self.path, 'external', startup=False) class hardcron(threading.Thread): def __init__(self, applications_parent): threading.Thread.__init__(self) self.setDaemon(True) self.path = applications_parent crondance(self.path, 'hard', startup=True) def launch(self): if not _cron_stopping: logger.debug('hard cron invocation') crondance(self.path, 'hard', startup = False) def run(self): s = sched.scheduler(time.time, time.sleep) logger.info('Hard cron daemon started') while not _cron_stopping: now = time.time() s.enter(60 - now % 60, 1, self.launch, ()) s.run() class softcron(threading.Thread): def __init__(self, applications_parent): threading.Thread.__init__(self) self.path = applications_parent crondance(self.path, 'soft', startup=True) def run(self): if not _cron_stopping: logger.debug('soft cron invocation') crondance(self.path, 'soft', startup=False) class Token(object): def __init__(self,path): self.path = os.path.join(path, 'cron.master') if not os.path.exists(self.path): fileutils.write_file(self.path, '', 'wb') self.master = None self.now = time.time() def acquire(self,startup=False): """ returns the time when the lock is acquired or None if cron already running lock is implemented by writing a pickle (start, stop) in cron.master start is time when cron job starts and stop is time when cron completed stop == 0 if job started but did not yet complete if a cron job started within less than 60 seconds, acquire returns None if a cron job started before 60 seconds and did not stop, a warning is issue "Stale cron.master detected" """ if portalocker.LOCK_EX is None: logger.warning('WEB2PY CRON: Disabled because no file locking') return None self.master = open(self.path,'rb+') try: ret = None portalocker.lock(self.master,portalocker.LOCK_EX) try: (start, stop) = cPickle.load(self.master) except: (start, stop) = (0, 1) if startup or self.now - start > 59.99: ret = self.now if not stop: # this happens if previous cron job longer than 1 minute logger.warning('WEB2PY CRON: Stale cron.master detected') logger.debug('WEB2PY CRON: Acquiring lock') self.master.seek(0) cPickle.dump((self.now,0),self.master) finally: portalocker.unlock(self.master) if not ret: # do this so no need to release self.master.close() return ret def release(self): """ this function writes into cron.master the time when cron job was completed """ if not self.master.closed: portalocker.lock(self.master,portalocker.LOCK_EX) logger.debug('WEB2PY CRON: Releasing cron lock') self.master.seek(0) (start, stop) = cPickle.load(self.master) if start == self.now: # if this is my lock self.master.seek(0) cPickle.dump((self.now,time.time()),self.master) portalocker.unlock(self.master) self.master.close() def rangetolist(s, period='min'): retval = [] if s.startswith('*'): if period == 'min': s = s.replace('*', '0-59', 1) elif period == 'hr': s = s.replace('*', '0-23', 1) elif period == 'dom': s = s.replace('*', '1-31', 1) elif period == 'mon': s = s.replace('*', '1-12', 1) elif period == 'dow': s = s.replace('*', '0-6', 1) m = re.compile(r'(\d+)-(\d+)/(\d+)') match = m.match(s) if match: for i in range(int(match.group(1)), int(match.group(2)) + 1): if i % int(match.group(3)) == 0: retval.append(i) return retval def parsecronline(line): task = {} if line.startswith('@reboot'): line=line.replace('@reboot', '-1 * * * *') elif line.startswith('@yearly'): line=line.replace('@yearly', '0 0 1 1 *') elif line.startswith('@annually'): line=line.replace('@annually', '0 0 1 1 *') elif line.startswith('@monthly'): line=line.replace('@monthly', '0 0 1 * *') elif line.startswith('@weekly'): line=line.replace('@weekly', '0 0 * * 0') elif line.startswith('@daily'): line=line.replace('@daily', '0 0 * * *') elif line.startswith('@midnight'): line=line.replace('@midnight', '0 0 * * *') elif line.startswith('@hourly'): line=line.replace('@hourly', '0 * * * *') params = line.strip().split(None, 6) if len(params) < 7: return None daysofweek={'sun':0,'mon':1,'tue':2,'wed':3,'thu':4,'fri':5,'sat':6} for (s, id) in zip(params[:5], ['min', 'hr', 'dom', 'mon', 'dow']): if not s in [None, '*']: task[id] = [] vals = s.split(',') for val in vals: if val != '-1' and '-' in val and '/' not in val: val = '%s/1' % val if '/' in val: task[id] += rangetolist(val, id) elif val.isdigit() or val=='-1': task[id].append(int(val)) elif id=='dow' and val[:3].lower() in daysofweek: task[id].append(daysofweek(val[:3].lower())) task['user'] = params[5] task['cmd'] = params[6] return task class cronlauncher(threading.Thread): def __init__(self, cmd, shell=True): threading.Thread.__init__(self) if platform.system() == 'Windows': shell = False elif isinstance(cmd,list): cmd = ' '.join(cmd) self.cmd = cmd self.shell = shell def run(self): import subprocess proc = subprocess.Popen(self.cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=self.shell) (stdoutdata,stderrdata) = proc.communicate() if proc.returncode != 0: logger.warning( 'WEB2PY CRON Call returned code %s:\n%s' % \ (proc.returncode, stdoutdata+stderrdata)) else: logger.debug('WEB2PY CRON Call returned success:\n%s' \ % stdoutdata) def crondance(applications_parent, ctype='soft', startup=False): apppath = os.path.join(applications_parent,'applications') cron_path = os.path.join(applications_parent) token = Token(cron_path) cronmaster = token.acquire(startup=startup) if not cronmaster: return now_s = time.localtime() checks=(('min',now_s.tm_min), ('hr',now_s.tm_hour), ('mon',now_s.tm_mon), ('dom',now_s.tm_mday), ('dow',(now_s.tm_wday+1)%7)) apps = [x for x in os.listdir(apppath) if os.path.isdir(os.path.join(apppath, x))] full_apath_links = set() for app in apps: if _cron_stopping: break; apath = os.path.join(apppath,app) # if app is a symbolic link to other app, skip it full_apath_link = absolute_path_link(apath) if full_apath_link in full_apath_links: continue else: full_apath_links.add(full_apath_link) cronpath = os.path.join(apath, 'cron') crontab = os.path.join(cronpath, 'crontab') if not os.path.exists(crontab): continue try: cronlines = fileutils.readlines_file(crontab, 'rt') lines = [x.strip() for x in cronlines if x.strip() and not x.strip().startswith('#')] tasks = [parsecronline(cline) for cline in lines] except Exception, e: logger.error('WEB2PY CRON: crontab read error %s' % e) continue for task in tasks: if _cron_stopping: break; commands = [sys.executable] w2p_path = fileutils.abspath('web2py.py', gluon=True) if os.path.exists(w2p_path): commands.append(w2p_path) if global_settings.applications_parent != global_settings.gluon_parent: commands.extend(('-f', global_settings.applications_parent)) citems = [(k in task and not v in task[k]) for k,v in checks] task_min= task.get('min',[]) if not task: continue elif not startup and task_min == [-1]: continue elif task_min != [-1] and reduce(lambda a,b: a or b, citems): continue logger.info('WEB2PY CRON (%s): %s executing %s in %s at %s' \ % (ctype, app, task.get('cmd'), os.getcwd(), datetime.datetime.now())) action, command, models = False, task['cmd'], '' if command.startswith('**'): (action,models,command) = (True,'',command[2:]) elif command.startswith('*'): (action,models,command) = (True,'-M',command[1:]) else: action=False if action and command.endswith('.py'): commands.extend(('-J', # cron job models, # import models? '-S', app, # app name '-a', '""', # password '-R', command)) # command shell = True elif action: commands.extend(('-J', # cron job models, # import models? '-S', app+'/'+command, # app name '-a', '""')) # password shell = True else: commands = command shell = False try: cronlauncher(commands, shell=shell).start() except Exception, e: logger.warning( 'WEB2PY CRON: Execution error for %s: %s' \ % (task.get('cmd'), e)) token.release() web2py-1.99.7.orig/gluon/sql.py0000644000175000017500000000043711724764235014766 0ustar josejose# this file exists for backward compatibility __all__ = ['DAL','Field','drivers'] from dal import DAL, Field, Table, Query, Set, Expression, Row, Rows, drivers, BaseAdapter, SQLField, SQLTable, SQLXorable, SQLQuery, SQLSet, SQLRows, SQLStorage, SQLDB, GQLDB, SQLALL, SQLCustomType web2py-1.99.7.orig/gluon/compileapp.py0000644000175000017500000006246411724764235016330 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ This file is part of the web2py Web Framework Copyrighted by Massimo Di Pierro License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) Functions required to execute app components ============================================ FOR INTERNAL USE ONLY """ import re import sys import fnmatch import os import copy import random import __builtin__ from storage import Storage, List from template import parse_template from restricted import restricted, compile2 from fileutils import mktree, listdir, read_file, write_file from myregex import regex_expose from languages import translator from dal import BaseAdapter, SQLDB, SQLField, DAL, Field from sqlhtml import SQLFORM, SQLTABLE from cache import Cache from globals import current, Response import settings from cfs import getcfs import html import validators from http import HTTP, redirect import marshal import shutil import imp import logging logger = logging.getLogger("web2py") import rewrite import platform try: import py_compile except: logger.warning('unable to import py_compile') is_pypy = hasattr(platform,'python_implementation') and \ platform.python_implementation() == 'PyPy' settings.global_settings.is_pypy = is_pypy is_gae = settings.global_settings.web2py_runtime_gae is_jython = settings.global_settings.is_jython = 'java' in sys.platform.lower() or hasattr(sys, 'JYTHON_JAR') or str(sys.copyright).find('Jython') > 0 TEST_CODE = \ r""" def _TEST(): import doctest, sys, cStringIO, types, cgi, gluon.fileutils if not gluon.fileutils.check_credentials(request): raise HTTP(401, web2py_error='invalid credentials') stdout = sys.stdout html = '

Testing controller "%s.py" ... done.


\n' \ % request.controller for key in sorted([key for key in globals() if not key in __symbols__+['_TEST']]): eval_key = eval(key) if type(eval_key) == types.FunctionType: number_doctests = sum([len(ds.examples) for ds in doctest.DocTestFinder().find(eval_key)]) if number_doctests>0: sys.stdout = cStringIO.StringIO() name = '%s/controllers/%s.py in %s.__doc__' \ % (request.folder, request.controller, key) doctest.run_docstring_examples(eval_key, globals(), False, name=name) report = sys.stdout.getvalue().strip() if report: pf = 'failed' else: pf = 'passed' html += '

Function %s [%s]

\n' \ % (pf, key, pf) if report: html += CODE(report, language='web2py', \ link='/examples/global/vars/').xml() html += '
\n' else: html += \ '

Function %s [no doctests]


\n' \ % (key) response._vars = html sys.stdout = stdout _TEST() """ class mybuiltin(object): """ NOTE could simple use a dict and populate it, NOTE not sure if this changes things though if monkey patching import..... """ #__builtins__ def __getitem__(self, key): try: return getattr(__builtin__, key) except AttributeError: raise KeyError, key def __setitem__(self, key, value): setattr(self, key, value) def LOAD(c=None, f='index', args=None, vars=None, extension=None, target=None,ajax=False,ajax_trap=False, url=None,user_signature=False, timeout=None, times=1, content='loading...',**attr): """ LOAD a component into the action's document Timing options: -times: An integer or string ("infinity"/"continuous") specifies how many times the component is requested -timeout (milliseconds): specifies the time to wait before starting the request or the frequency if times is greater than 1 or "infinity". Timing options default to the normal behavior. The component is added on page loading without delay. """ from html import TAG, DIV, URL, SCRIPT, XML if args is None: args = [] vars = Storage(vars or {}) target = target or 'c'+str(random.random())[2:] attr['_id']=target request = current.request if '.' in f: f, extension = f.split('.',1) if url or ajax: url = url or URL(request.application, c, f, r=request, args=args, vars=vars, extension=extension, user_signature=user_signature) # timing options if isinstance(times, basestring): if times.upper() in ("INFINITY", "CONTINUOUS"): times = "Infinity" else: raise TypeError("Unsupported times argument %s" % times) elif isinstance(times, int): if times <= 0: raise ValueError("Times argument must be greater than zero, 'Infinity' or None") else: raise TypeError("Unsupported times argument type %s" % type(times)) if timeout is not None: if not isinstance(timeout, (int, long)): raise ValueError("Timeout argument must be an integer or None") elif timeout <= 0: raise ValueError("Timeout argument must be greater than zero or None") statement = "web2py_component('%s','%s', %s, %s);" \ % (url, target, timeout, times) else: statement = "web2py_component('%s','%s');" % (url, target) script = SCRIPT(statement, _type="text/javascript") if not content is None: return TAG[''](script, DIV(content,**attr)) else: return TAG[''](script) else: if not isinstance(args,(list,tuple)): args = [args] c = c or request.controller other_request = Storage() for key, value in request.items(): other_request[key] = value other_request['env'] = Storage() for key, value in request.env.items(): other_request.env['key'] = value other_request.controller = c other_request.function = f other_request.extension = extension or request.extension other_request.args = List(args) other_request.vars = vars other_request.get_vars = vars other_request.post_vars = Storage() other_response = Response() other_request.env.path_info = '/' + \ '/'.join([request.application,c,f] + \ map(str, other_request.args)) other_request.env.query_string = \ vars and URL(vars=vars).split('?')[1] or '' other_request.env.http_web2py_component_location = \ request.env.path_info other_request.cid = target other_request.env.http_web2py_component_element = target other_response.view = '%s/%s.%s' % (c,f, other_request.extension) other_environment = copy.copy(current.globalenv) ### NASTY other_response._view_environment = other_environment other_response.generic_patterns = \ copy.copy(current.response.generic_patterns) other_environment['request'] = other_request other_environment['response'] = other_response ## some magic here because current are thread-locals original_request, current.request = current.request, other_request original_response, current.response = current.response, other_response page = run_controller_in(c, f, other_environment) if isinstance(page, dict): other_response._vars = page for key in page: other_response._view_environment[key] = page[key] run_view_in(other_response._view_environment) page = other_response.body.getvalue() current.request, current.response = original_request, original_response js = None if ajax_trap: link = URL(request.application, c, f, r=request, args=args, vars=vars, extension=extension, user_signature=user_signature) js = "web2py_trap_form('%s','%s');" % (link, target) script = js and SCRIPT(js,_type="text/javascript") or '' return TAG[''](DIV(XML(page),**attr),script) class LoadFactory(object): """ Attention: this helper is new and experimental """ def __init__(self,environment): self.environment = environment def __call__(self, c=None, f='index', args=None, vars=None, extension=None, target=None,ajax=False,ajax_trap=False, url=None,user_signature=False, content='loading...',**attr): if args is None: args = [] vars = Storage(vars or {}) import globals target = target or 'c'+str(random.random())[2:] attr['_id']=target request = self.environment['request'] if '.' in f: f, extension = f.split('.',1) if url or ajax: url = url or html.URL(request.application, c, f, r=request, args=args, vars=vars, extension=extension, user_signature=user_signature) script = html.SCRIPT('web2py_component("%s","%s")' % (url, target), _type="text/javascript") return html.TAG[''](script, html.DIV(content,**attr)) else: if not isinstance(args,(list,tuple)): args = [args] c = c or request.controller other_request = Storage() for key, value in request.items(): other_request[key] = value other_request['env'] = Storage() for key, value in request.env.items(): other_request.env['key'] = value other_request.controller = c other_request.function = f other_request.extension = extension or request.extension other_request.args = List(args) other_request.vars = vars other_request.get_vars = vars other_request.post_vars = Storage() other_response = globals.Response() other_request.env.path_info = '/' + \ '/'.join([request.application,c,f] + \ map(str, other_request.args)) other_request.env.query_string = \ vars and html.URL(vars=vars).split('?')[1] or '' other_request.env.http_web2py_component_location = \ request.env.path_info other_request.cid = target other_request.env.http_web2py_component_element = target other_response.view = '%s/%s.%s' % (c,f, other_request.extension) other_environment = copy.copy(self.environment) other_response._view_environment = other_environment other_response.generic_patterns = \ copy.copy(current.response.generic_patterns) other_environment['request'] = other_request other_environment['response'] = other_response ## some magic here because current are thread-locals original_request, current.request = current.request, other_request original_response, current.response = current.response, other_response page = run_controller_in(c, f, other_environment) if isinstance(page, dict): other_response._vars = page for key in page: other_response._view_environment[key] = page[key] run_view_in(other_response._view_environment) page = other_response.body.getvalue() current.request, current.response = original_request, original_response js = None if ajax_trap: link = html.URL(request.application, c, f, r=request, args=args, vars=vars, extension=extension, user_signature=user_signature) js = "web2py_trap_form('%s','%s');" % (link, target) script = js and html.SCRIPT(js,_type="text/javascript") or '' return html.TAG[''](html.DIV(html.XML(page),**attr),script) def local_import_aux(name, reload_force=False, app='welcome'): """ In apps, instead of importing a local module (in applications/app/modules) with:: import a.b.c as d you should do:: d = local_import('a.b.c') or (to force a reload): d = local_import('a.b.c', reload=True) This prevents conflict between applications and un-necessary execs. It can be used to import any module, including regular Python modules. """ items = name.replace('/','.') name = "applications.%s.modules.%s" % (app, items) module = __import__(name) for item in name.split(".")[1:]: module = getattr(module, item) if reload_force: reload(module) return module """ OLD IMPLEMENTATION: items = name.replace('/','.').split('.') filename, modulepath = items[-1], os.path.join(apath,'modules',*items[:-1]) imp.acquire_lock() try: file=None (file,path,desc) = imp.find_module(filename,[modulepath]+sys.path) if not path in sys.modules or reload: if is_gae: module={} execfile(path,{},module) module=Storage(module) else: module = imp.load_module(path,file,path,desc) sys.modules[path] = module else: module = sys.modules[path] except Exception, e: module = None if file: file.close() imp.release_lock() if not module: raise ImportError, "cannot find module %s in %s" % (filename, modulepath) return module """ def build_environment(request, response, session, store_current=True): """ Build the environment dictionary into which web2py files are executed. """ environment = {} for key in html.__all__: environment[key] = getattr(html, key) for key in validators.__all__: environment[key] = getattr(validators, key) if not request.env: request.env = Storage() t = environment['T'] = translator(request) c = environment['cache'] = Cache(request) if store_current: current.globalenv = environment current.request = request current.response = response current.session = session current.T = t current.cache = c global __builtins__ if is_jython: # jython hack __builtins__ = mybuiltin() elif is_pypy: # apply the same hack to pypy too __builtins__ = mybuiltin() else: __builtins__['__import__'] = __builtin__.__import__ ### WHY? environment['__builtins__'] = __builtins__ environment['HTTP'] = HTTP environment['redirect'] = redirect environment['request'] = request environment['response'] = response environment['session'] = session environment['DAL'] = DAL environment['Field'] = Field environment['SQLDB'] = SQLDB # for backward compatibility environment['SQLField'] = SQLField # for backward compatibility environment['SQLFORM'] = SQLFORM environment['SQLTABLE'] = SQLTABLE environment['LOAD'] = LOAD environment['local_import'] = \ lambda name, reload=False, app=request.application:\ local_import_aux(name,reload,app) BaseAdapter.set_folder(os.path.join(request.folder, 'databases')) response._view_environment = copy.copy(environment) return environment def save_pyc(filename): """ Bytecode compiles the file `filename` """ py_compile.compile(filename) def read_pyc(filename): """ Read the code inside a bytecode compiled file if the MAGIC number is compatible :returns: a code object """ data = read_file(filename, 'rb') if not is_gae and data[:4] != imp.get_magic(): raise SystemError, 'compiled code is incompatible' return marshal.loads(data[8:]) def compile_views(folder): """ Compiles all the views in the application specified by `folder` """ path = os.path.join(folder, 'views') for file in listdir(path, '^[\w/\-]+(\.\w+)+$'): data = parse_template(file, path) filename = ('views/%s.py' % file).replace('/', '_').replace('\\', '_') filename = os.path.join(folder, 'compiled', filename) write_file(filename, data) save_pyc(filename) os.unlink(filename) def compile_models(folder): """ Compiles all the models in the application specified by `folder` """ path = os.path.join(folder, 'models') for file in listdir(path, '.+\.py$'): data = read_file(os.path.join(path, file)) filename = os.path.join(folder, 'compiled','models',file) mktree(filename) write_file(filename, data) save_pyc(filename) os.unlink(filename) def compile_controllers(folder): """ Compiles all the controllers in the application specified by `folder` """ path = os.path.join(folder, 'controllers') for file in listdir(path, '.+\.py$'): ### why is this here? save_pyc(os.path.join(path, file)) data = read_file(os.path.join(path,file)) exposed = regex_expose.findall(data) for function in exposed: command = data + "\nresponse._vars=response._caller(%s)\n" % \ function filename = os.path.join(folder, 'compiled', ('controllers/' + file[:-3]).replace('/', '_') + '_' + function + '.py') write_file(filename, command) save_pyc(filename) os.unlink(filename) def run_models_in(environment): """ Runs all models (in the app specified by the current folder) It tries pre-compiled models first before compiling them. """ folder = environment['request'].folder c = environment['request'].controller f = environment['request'].function cpath = os.path.join(folder, 'compiled') if os.path.exists(cpath): for model in listdir(cpath, '^models_\w+\.pyc$', 0): restricted(read_pyc(model), environment, layer=model) path = os.path.join(cpath, 'models') models = listdir(path, '^\w+\.pyc$',0,sort=False) compiled=True else: path = os.path.join(folder, 'models') models = listdir(path, '^\w+\.py$',0,sort=False) compiled=False paths = (path, os.path.join(path,c), os.path.join(path,c,f)) for model in models: if not os.path.split(model)[0] in paths and c!='appadmin': continue elif compiled: code = read_pyc(model) elif is_gae: code = getcfs(model, model, lambda: compile2(read_file(model), model)) else: code = getcfs(model, model, None) restricted(code, environment, layer=model) def run_controller_in(controller, function, environment): """ Runs the controller.function() (for the app specified by the current folder). It tries pre-compiled controller_function.pyc first before compiling it. """ # if compiled should run compiled! folder = environment['request'].folder path = os.path.join(folder, 'compiled') badc = 'invalid controller (%s/%s)' % (controller, function) badf = 'invalid function (%s/%s)' % (controller, function) if os.path.exists(path): filename = os.path.join(path, 'controllers_%s_%s.pyc' % (controller, function)) if not os.path.exists(filename): raise HTTP(404, rewrite.thread.routes.error_message % badf, web2py_error=badf) restricted(read_pyc(filename), environment, layer=filename) elif function == '_TEST': # TESTING: adjust the path to include site packages from settings import global_settings from admin import abspath, add_path_first paths = (global_settings.gluon_parent, abspath('site-packages', gluon=True), abspath('gluon', gluon=True), '') [add_path_first(path) for path in paths] # TESTING END filename = os.path.join(folder, 'controllers/%s.py' % controller) if not os.path.exists(filename): raise HTTP(404, rewrite.thread.routes.error_message % badc, web2py_error=badc) environment['__symbols__'] = environment.keys() code = read_file(filename) code += TEST_CODE restricted(code, environment, layer=filename) else: filename = os.path.join(folder, 'controllers/%s.py' % controller) if not os.path.exists(filename): raise HTTP(404, rewrite.thread.routes.error_message % badc, web2py_error=badc) code = read_file(filename) exposed = regex_expose.findall(code) if not function in exposed: raise HTTP(404, rewrite.thread.routes.error_message % badf, web2py_error=badf) code = "%s\nresponse._vars=response._caller(%s)\n" % (code, function) if is_gae: layer = filename + ':' + function code = getcfs(layer, filename, lambda: compile2(code,layer)) restricted(code, environment, filename) response = environment['response'] vars=response._vars if response.postprocessing: for p in response.postprocessing: vars = p(vars) if isinstance(vars,unicode): vars = vars.encode('utf8') if hasattr(vars,'xml'): vars = vars.xml() return vars def run_view_in(environment): """ Executes the view for the requested action. The view is the one specified in `response.view` or determined by the url or `view/generic.extension` It tries the pre-compiled views_controller_function.pyc before compiling it. """ request = environment['request'] response = environment['response'] folder = request.folder path = os.path.join(folder, 'compiled') badv = 'invalid view (%s)' % response.view patterns = response.generic_patterns or [] regex = re.compile('|'.join(fnmatch.translate(r) for r in patterns)) short_action = '%(controller)s/%(function)s.%(extension)s' % request allow_generic = patterns and regex.search(short_action) if not isinstance(response.view, str): ccode = parse_template(response.view, os.path.join(folder, 'views'), context=environment) restricted(ccode, environment, 'file stream') elif os.path.exists(path): x = response.view.replace('/', '_') files = ['views_%s.pyc' % x] if allow_generic: files.append('views_generic.%s.pyc' % request.extension) # for backward compatibility if request.extension == 'html': files.append('views_%s.pyc' % x[:-5]) if allow_generic: files.append('views_generic.pyc') # end backward compatibility code for f in files: filename = os.path.join(path,f) if os.path.exists(filename): code = read_pyc(filename) restricted(code, environment, layer=filename) return raise HTTP(404, rewrite.thread.routes.error_message % badv, web2py_error=badv) else: filename = os.path.join(folder, 'views', response.view) if not os.path.exists(filename) and allow_generic: response.view = 'generic.' + request.extension filename = os.path.join(folder, 'views', response.view) if not os.path.exists(filename): raise HTTP(404, rewrite.thread.routes.error_message % badv, web2py_error=badv) layer = filename if is_gae: ccode = getcfs(layer, filename, lambda: compile2(parse_template(response.view, os.path.join(folder, 'views'), context=environment),layer)) else: ccode = parse_template(response.view, os.path.join(folder, 'views'), context=environment) restricted(ccode, environment, layer) def remove_compiled_application(folder): """ Deletes the folder `compiled` containing the compiled application. """ try: shutil.rmtree(os.path.join(folder, 'compiled')) path = os.path.join(folder, 'controllers') for file in listdir(path,'.*\.pyc$',drop=False): os.unlink(file) except OSError: pass def compile_application(folder): """ Compiles all models, views, controller for the application in `folder`. """ remove_compiled_application(folder) os.mkdir(os.path.join(folder, 'compiled')) compile_models(folder) compile_controllers(folder) compile_views(folder) def test(): """ Example:: >>> import traceback, types >>> environment={'x':1} >>> open('a.py', 'w').write('print 1/x') >>> save_pyc('a.py') >>> os.unlink('a.py') >>> if type(read_pyc('a.pyc'))==types.CodeType: print 'code' code >>> exec read_pyc('a.pyc') in environment 1 """ return if __name__ == '__main__': import doctest doctest.testmod() web2py-1.99.7.orig/gluon/portalocker.py0000644000175000017500000000732711724764235016521 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- # portalocker.py - Cross-platform (posix/nt) API for flock-style file locking. # Requires python 1.5.2 or better. """ Cross-platform (posix/nt) API for flock-style file locking. Synopsis: import portalocker file = open(\"somefile\", \"r+\") portalocker.lock(file, portalocker.LOCK_EX) file.seek(12) file.write(\"foo\") file.close() If you know what you're doing, you may choose to portalocker.unlock(file) before closing the file, but why? Methods: lock( file, flags ) unlock( file ) Constants: LOCK_EX LOCK_SH LOCK_NB I learned the win32 technique for locking files from sample code provided by John Nielsen in the documentation that accompanies the win32 modules. Author: Jonathan Feinberg Version: $Id: portalocker.py,v 1.3 2001/05/29 18:47:55 Administrator Exp $ """ import logging import platform logger = logging.getLogger("web2py") os_locking = None try: import google.appengine os_locking = 'gae' except: try: import fcntl os_locking = 'posix' except: try: import win32con import win32file import pywintypes os_locking = 'windows' except: pass if os_locking == 'windows': LOCK_EX = win32con.LOCKFILE_EXCLUSIVE_LOCK LOCK_SH = 0 # the default LOCK_NB = win32con.LOCKFILE_FAIL_IMMEDIATELY # is there any reason not to reuse the following structure? __overlapped = pywintypes.OVERLAPPED() def lock(file, flags): hfile = win32file._get_osfhandle(file.fileno()) win32file.LockFileEx(hfile, flags, 0, 0x7fff0000, __overlapped) def unlock(file): hfile = win32file._get_osfhandle(file.fileno()) win32file.UnlockFileEx(hfile, 0, 0x7fff0000, __overlapped) elif os_locking == 'posix': LOCK_EX = fcntl.LOCK_EX LOCK_SH = fcntl.LOCK_SH LOCK_NB = fcntl.LOCK_NB def lock(file, flags): fcntl.flock(file.fileno(), flags) def unlock(file): fcntl.flock(file.fileno(), fcntl.LOCK_UN) else: if platform.system() == 'Windows': logger.error('no file locking, you must install the win32 extensions from: http://sourceforge.net/projects/pywin32/files/') elif os_locking != 'gae': logger.debug('no file locking, this will cause problems') LOCK_EX = None LOCK_SH = None LOCK_NB = None def lock(file, flags): pass def unlock(file): pass class LockedFile(object): def __init__(self,filename, mode='rb'): self.filename = filename self.mode = mode self.file = None if 'r' in mode: self.file = open(filename,mode) lock(self.file,LOCK_SH) elif 'w' in mode or 'a' in mode: self.file = open(filename,mode.replace('w','a')) lock(self.file,LOCK_EX) if not 'a' in mode: self.file.seek(0) self.file.truncate() else: raise RuntimeError, "invalid LockedFile(...,mode)" def read(self,size=None): return self.file.read() if size is None else self.file.read(size) def readline(self): return self.file.readline() def readlines(self): return self.file.readlines() def write(self,data): self.file.write(data) self.file.flush() def close(self): if not self.file is None: unlock(self.file) self.file.close() self.file = None def __del__(self): self.close() if __name__=='__main__': f = LockedFile('test.txt',mode='wb') f.write('test ok') f.close() f = LockedFile('test.txt',mode='rb') print f.read() f.close() web2py-1.99.7.orig/gluon/fileutils.py0000644000175000017500000002644711724764235016200 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ This file is part of the web2py Web Framework Copyrighted by Massimo Di Pierro License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) """ import storage import os import re import tarfile import glob import time import datetime from http import HTTP from gzip import open as gzopen from settings import global_settings __all__ = [ 'parse_version', 'read_file', 'write_file', 'readlines_file', 'up', 'abspath', 'mktree', 'listdir', 'recursive_unlink', 'cleanpath', 'tar', 'untar', 'tar_compiled', 'get_session', 'check_credentials', 'w2p_pack', 'w2p_unpack', 'w2p_pack_plugin', 'w2p_unpack_plugin', 'fix_newlines', 'make_fake_file_like_object', ] def parse_version(version = "Version 1.99.0 (2011-09-19 08:23:26)"): re_version = re.compile('[^\d]+ (\d+)\.(\d+)\.(\d+)\s*\((?P.+?)\)\s*(?P[a-z]+)?') m = re_version.match(version) a,b,c = int(m.group(1)),int(m.group(2)),int(m.group(3)), s = m.group('type') or 'dev' d = datetime.datetime.strptime(m.group('datetime'),'%Y-%m-%d %H:%M:%S') return (a,b,c,d,s) def read_file(filename, mode='r'): "returns content from filename, making sure to close the file explicitly on exit." f = open(filename, mode) try: return f.read() finally: f.close() def write_file(filename, value, mode='w'): "writes to filename, making sure to close the file explicitly on exit." f = open(filename, mode) try: return f.write(value) finally: f.close() def readlines_file(filename, mode='r'): "applies .split('\n') to the output of read_file()" return read_file(filename, mode).split('\n') def abspath(*relpath, **base): "convert relative path to absolute path based (by default) on applications_parent" path = os.path.join(*relpath) gluon = base.get('gluon', False) if os.path.isabs(path): return path if gluon: return os.path.join(global_settings.gluon_parent, path) return os.path.join(global_settings.applications_parent, path) def mktree(path): head,tail =os.path.split(path) if head: if tail: mktree(head) if not os.path.exists(head): os.mkdir(head) def listdir( path, expression='^.+$', drop=True, add_dirs=False, sort=True, ): """ like os.listdir() but you can specify a regex pattern to filter files. if add_dirs is True, the returned items will have the full path. """ if path[-1:] != os.path.sep: path = path + os.path.sep if drop: n = len(path) else: n = 0 regex = re.compile(expression) items = [] for (root, dirs, files) in os.walk(path, topdown=True): for dir in dirs[:]: if dir.startswith('.'): dirs.remove(dir) if add_dirs: items.append(root[n:]) for file in sorted(files): if regex.match(file) and not file.startswith('.'): items.append(os.path.join(root, file)[n:]) if sort: return sorted(items) else: return items def recursive_unlink(f): if os.path.isdir(f): for s in os.listdir(f): recursive_unlink(os.path.join(f,s)) os.rmdir(f) elif os.path.isfile(f): os.unlink(f) def cleanpath(path): """ turns any expression/path into a valid filename. replaces / with _ and removes special characters. """ items = path.split('.') if len(items) > 1: path = re.sub('[^\w\.]+', '_', '_'.join(items[:-1]) + '.' + ''.join(items[-1:])) else: path = re.sub('[^\w\.]+', '_', ''.join(items[-1:])) return path def _extractall(filename, path='.', members=None): if not hasattr(tarfile.TarFile, 'extractall'): from tarfile import ExtractError class TarFile(tarfile.TarFile): def extractall(self, path='.', members=None): """Extract all members from the archive to the current working directory and set owner, modification time and permissions on directories afterwards. `path' specifies a different directory to extract to. `members' is optional and must be a subset of the list returned by getmembers(). """ directories = [] if members is None: members = self for tarinfo in members: if tarinfo.isdir(): # Extract directory with a safe mode, so that # all files below can be extracted as well. try: os.makedirs(os.path.join(path, tarinfo.name), 0777) except EnvironmentError: pass directories.append(tarinfo) else: self.extract(tarinfo, path) # Reverse sort directories. directories.sort(lambda a, b: cmp(a.name, b.name)) directories.reverse() # Set correct owner, mtime and filemode on directories. for tarinfo in directories: path = os.path.join(path, tarinfo.name) try: self.chown(tarinfo, path) self.utime(tarinfo, path) self.chmod(tarinfo, path) except ExtractError, e: if self.errorlevel > 1: raise else: self._dbg(1, 'tarfile: %s' % e) _cls = TarFile else: _cls = tarfile.TarFile tar = _cls(filename, 'r') ret = tar.extractall(path, members) tar.close() return ret def tar(file, dir, expression='^.+$'): """ tars dir into file, only tars file that match expression """ tar = tarfile.TarFile(file, 'w') try: for file in listdir(dir, expression, add_dirs=True): tar.add(os.path.join(dir, file), file, False) finally: tar.close() def untar(file, dir): """ untar file into dir """ _extractall(file, dir) def w2p_pack(filename, path, compiled=False): filename = abspath(filename) path = abspath(path) tarname = filename + '.tar' if compiled: tar_compiled(tarname, path, '^[\w\.\-]+$') else: tar(tarname, path, '^[\w\.\-]+$') w2pfp = gzopen(filename, 'wb') tarfp = open(tarname, 'rb') w2pfp.write(tarfp.read()) w2pfp.close() tarfp.close() os.unlink(tarname) def w2p_unpack(filename, path, delete_tar=True): filename = abspath(filename) path = abspath(path) if filename[-4:] == '.w2p' or filename[-3:] == '.gz': if filename[-4:] == '.w2p': tarname = filename[:-4] + '.tar' else: tarname = filename[:-3] + '.tar' fgzipped = gzopen(filename, 'rb') tarfile = open(tarname, 'wb') tarfile.write(fgzipped.read()) tarfile.close() fgzipped.close() else: tarname = filename untar(tarname, path) if delete_tar: os.unlink(tarname) def w2p_pack_plugin(filename, path, plugin_name): """Pack the given plugin into a w2p file. Will match files at: /*/plugin_[name].* /*/plugin_[name]/* """ filename = abspath(filename) path = abspath(path) if not filename.endswith('web2py.plugin.%s.w2p' % plugin_name): raise Exception, "Not a web2py plugin name" plugin_tarball = tarfile.open(filename, 'w:gz') try: app_dir = path while app_dir[-1]=='/': app_dir = app_dir[:-1] files1=glob.glob(os.path.join(app_dir,'*/plugin_%s.*' % plugin_name)) files2=glob.glob(os.path.join(app_dir,'*/plugin_%s/*' % plugin_name)) for file in files1+files2: plugin_tarball.add(file, arcname=file[len(app_dir)+1:]) finally: plugin_tarball.close() def w2p_unpack_plugin(filename, path, delete_tar=True): filename = abspath(filename) path = abspath(path) if not os.path.basename(filename).startswith('web2py.plugin.'): raise Exception, "Not a web2py plugin" w2p_unpack(filename,path,delete_tar) def tar_compiled(file, dir, expression='^.+$'): """ used to tar a compiled application. the content of models, views, controllers is not stored in the tar file. """ tar = tarfile.TarFile(file, 'w') for file in listdir(dir, expression, add_dirs=True): filename = os.path.join(dir, file) if os.path.islink(filename): continue if os.path.isfile(filename) and file[-4:] != '.pyc': if file[:6] == 'models': continue if file[:5] == 'views': continue if file[:11] == 'controllers': continue if file[:7] == 'modules': continue tar.add(filename, file, False) tar.close() def up(path): return os.path.dirname(os.path.normpath(path)) def get_session(request, other_application='admin'): """ checks that user is authorized to access other_application""" if request.application == other_application: raise KeyError try: session_id = request.cookies['session_id_' + other_application].value osession = storage.load_storage(os.path.join( up(request.folder), other_application, 'sessions', session_id)) except: osession = storage.Storage() return osession def check_credentials(request, other_application='admin', expiration = 60*60): """ checks that user is authorized to access other_application""" if request.env.web2py_runtime_gae: from google.appengine.api import users if users.is_current_user_admin(): return True else: login_html = '
Sign in with your google account.' \ % users.create_login_url(request.env.path_info) raise HTTP(200, '%s' % login_html) else: dt = time.time() - expiration s = get_session(request, other_application) return (s.authorized and s.last_time and s.last_time > dt) def fix_newlines(path): regex = re.compile(r'''(\r |\r| )''') for filename in listdir(path, '.*\.(py|html)$', drop=False): rdata = read_file(filename, 'rb') wdata = regex.sub('\n', rdata) if wdata != rdata: write_file(filename, wdata, 'wb') def copystream( src, dest, size, chunk_size=10 ** 5, ): """ this is here because I think there is a bug in shutil.copyfileobj """ while size > 0: if size < chunk_size: data = src.read(size) else: data = src.read(chunk_size) length = len(data) if length > size: (data, length) = (data[:size], size) size -= length if length == 0: break dest.write(data) if length < chunk_size: break dest.seek(0) return def make_fake_file_like_object(): class LogFile(object): def write(self, value): pass def close(self): pass return LogFile() web2py-1.99.7.orig/gluon/contrib/0000755000175000017500000000000011727360024015240 5ustar josejoseweb2py-1.99.7.orig/gluon/contrib/generics.py0000644000175000017500000000427411724764235017431 0ustar josejose# fix response import re import os import cPickle import gluon.serializers from gluon import current, HTTP from gluon.html import markmin_serializer, TAG, HTML, BODY, UL, XML, H1 from gluon.contenttype import contenttype from gluon.contrib.pyfpdf import FPDF, HTMLMixin from gluon.sanitizer import sanitize from gluon.contrib.markmin.markmin2latex import markmin2latex from gluon.contrib.markmin.markmin2pdf import markmin2pdf def wrapper(f): def g(data): try: output = f(data) return XML(ouput) except (TypeError, ValueError), e: raise HTTP(405, '%s serialization error' % e) except ImportError, e: raise HTTP(405, '%s not available' % e) except Exception, e: raise HTTP(405, '%s error' % e) return g def latex_from_html(html): markmin=TAG(html).element('body').flatten(markmin_serializer) return XML(markmin2latex(markmin)) def pdflatex_from_html(html): if os.system('which pdflatex > /dev/null')==0: markmin=TAG(html).element('body').flatten(markmin_serializer) out,warnings,errors=markmin2pdf(markmin) if errors: current.response.headers['Content-Type']='text/html' raise HTTP(405,HTML(BODY(H1('errors'), UL(*errors), H1('warnings'), UL(*warnings))).xml()) else: return XML(out) def pyfpdf_from_html(html): request = current.request def image_map(path): if path.startswith('/%s/static/' % request.application): return os.path.join(request.folder,path.split('/',2)[2]) return 'http%s://%s%s' % (request.is_https and 's' or '',request.env.http_host, path) class MyFPDF(FPDF, HTMLMixin): pass pdf=MyFPDF() pdf.add_page() html = sanitize(html, escape=False) #### should have better list of allowed tags pdf.write_html(html,image_map=image_map) return XML(pdf.output(dest='S')) def pdf_from_html(html): # try use latex and pdflatex if os.system('which pdflatex > /dev/null')==0: return pdflatex_from_html(html) else: return pyfpdf_from_html(html) web2py-1.99.7.orig/gluon/contrib/gql.py0000644000175000017500000000046011724764235016406 0ustar josejose# this file exists for backward compatibility __all__ = ['DAL','Field','drivers','gae'] from gluon.dal import DAL, Field, Table, Query, Set, Expression, Row, Rows, drivers, BaseAdapter, SQLField, SQLTable, SQLXorable, SQLQuery, SQLSet, SQLRows, SQLStorage, SQLDB, GQLDB, SQLALL, SQLCustomType, gae web2py-1.99.7.orig/gluon/contrib/gae_retry.py0000644000175000017500000000701711724764235017611 0ustar josejosedef autoretry_datastore_timeouts(attempts=5.0, interval=0.1, exponent=2.0): """ Copyright (C) 2009 twitter.com/rcb Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ====================================================================== This function wraps the AppEngine Datastore API to autoretry datastore timeouts at the lowest accessible level. The benefits of this approach are: 1. Small Footprint: Does not monkey with Model internals which may break in future releases. 2. Max Performance: Retrying at this lowest level means serialization and key formatting is not needlessly repeated on each retry. At initialization time, execute this: >>> autoretry_datastore_timeouts() Should only be called once, subsequent calls have no effect. >>> autoretry_datastore_timeouts() # no effect Default (5) attempts: .1, .2, .4, .8, 1.6 seconds Parameters can each be specified as floats. :param attempts: maximum number of times to retry. :param interval: base seconds to sleep between retries. :param exponent: rate of exponential back-off. """ import time, logging from google.appengine.api import apiproxy_stub_map from google.appengine.runtime import apiproxy_errors from google.appengine.datastore import datastore_pb attempts = float(attempts) interval = float(interval) exponent = float(exponent) wrapped = apiproxy_stub_map.MakeSyncCall errors = {datastore_pb.Error.TIMEOUT:'Timeout', datastore_pb.Error.CONCURRENT_TRANSACTION:'TransactionFailedError'} def wrapper(*args, **kwargs): count = 0.0 while True: try: return wrapped(*args, **kwargs) except apiproxy_errors.ApplicationError, err: errno = err.application_error if errno not in errors: raise sleep = (exponent ** count) * interval count += 1.0 if count > attempts: raise msg = "Datastore %s: retry #%d in %s seconds.\n%s" vals = '' if count == 1.0: vals = '\n'.join([str(a) for a in args]) logging.warning(msg % (errors[errno], count, sleep, vals)) time.sleep(sleep) setattr(wrapper, '_autoretry_datastore_timeouts', False) if getattr(wrapped, '_autoretry_datastore_timeouts', True): apiproxy_stub_map.MakeSyncCall = wrapper web2py-1.99.7.orig/gluon/contrib/__init__.py0000644000175000017500000000000511724764235017355 0ustar josejose web2py-1.99.7.orig/gluon/contrib/DowCommerce.py0000644000175000017500000002207011724764235020030 0ustar josejose""" DowCommerce class to process credit card payments with DowCommerce.com Modifications to support Dow Commerce API from code originally written by John Conde http://www.johnconde.net/blog/integrate-the-authorizenet-aim-api-with-python-3-2/ Unkown license, assuming public domain Modifed by Dave Stoll dave.stoll@gmail.com - modifed to support Dow Commerce API """ __all__ = ['DowCommerce'] from operator import itemgetter import urllib class DowCommerce: class DowCommerceError(Exception): def __init__(self, value): self.parameter = value def __str__(self): return str(self.parameter) def __init__(self, username=None, password=None, demomode=False): if not demomode: if str(username).strip() == '' or username == None: raise DowCommerce.DowCommerceError('No username provided') if str(password).strip() == '' or password == None: raise DowCommerce.DowCommerceError('No password provided') else: username = 'demo' password = 'password' self.proxy = None; self.delimiter = '&' self.results = {} self.error = True self.success = False self.declined = False self.url = 'https://secure.dowcommerce.net/api/transact.php' self.parameters = {} self.setParameter('username', username) self.setParameter('password', password) def process(self): encoded_args = urllib.urlencode(self.parameters) if self.proxy == None: results = str(urllib.urlopen(self.url, encoded_args).read()).split(self.delimiter) else: opener = urllib.FancyURLopener(self.proxy) opened = opener.open(self.url, encoded_args) try: results = str(opened.read()).split(self.delimiter) finally: opened.close() for result in results: (key,val) = result.split('=') self.results[key] = val if self.results['response'] == '1': self.error = False self.success = True self.declined = False elif self.results['response'] == '2': self.error = False self.success = False self.declined = True elif self.results['response'] == '3': self.error = True self.success = False self.declined = False else: self.error = True self.success = False self.declined = False raise DowCommerce.DowCommerceError(self.results) def setTransaction(self, creditcard, expiration, total, cvv=None, orderid=None, orderdescription=None, ipaddress=None, tax=None, shipping=None, firstname=None, lastname=None, company=None, address1=None, address2=None, city=None, state=None, zipcode=None, country=None, phone=None, fax=None, emailaddress=None, website=None, shipping_firstname=None, shipping_lastname=None, shipping_company=None, shipping_address1=None, shipping_address2=None, shipping_city=None, shipping_state=None, shipping_zipcode = None, shipping_country=None, shipping_emailaddress=None): if str(creditcard).strip() == '' or creditcard == None: raise DowCommerce.DowCommerceError('No credit card number passed to setTransaction(): {0}'.format(creditcard)) if str(expiration).strip() == '' or expiration == None: raise DowCommerce.DowCommerceError('No expiration number passed to setTransaction(): {0}'.format(expiration)) if str(total).strip() == '' or total == None: raise DowCommerce.DowCommerceError('No total amount passed to setTransaction(): {0}'.format(total)) self.setParameter('ccnumber', creditcard) self.setParameter('ccexp', expiration) self.setParameter('amount', total) if cvv: self.setParameter('cvv', cvv) if orderid: self.setParameter('orderid', orderid) if orderdescription: self.setParameter('orderdescription', orderdescription) if ipaddress: self.setParameter('ipaddress', ipaddress) if tax: self.setParameter('tax', tax) if shipping: self.setParameter('shipping', shipping) ## billing info if firstname: self.setParameter('firstname', firstname) if lastname: self.setParameter('lastname', lastname) if company: self.setParameter('company', company) if address1: self.setParameter('address1', address1) if address2: self.setParameter('address2', address2) if city: self.setParameter('city', city) if state: self.setParameter('state', state) if zipcode: self.setParameter('zip', zipcode) if country: self.setParameter('country', country) if phone: self.setParameter('phone', phone) if fax: self.setParameter('fax', fax) if emailaddress: self.setParameter('email', emailaddress) if website: self.setParameter('website', website) ## shipping info if shipping_firstname: self.setParameter('shipping_firstname', shipping_firstname) if shipping_lastname: self.setParameter('shipping_lastname', shipping_lastname) if shipping_company: self.setParameter('shipping_company', shipping_company) if shipping_address1: self.setParameter('shipping_address1', shipping_address1) if shipping_address2: self.setParameter('shipping_address2', shipping_address2) if shipping_city: self.setParameter('shipping_city', shipping_city) if shipping_state: self.setParameter('shipping_state', shipping_state) if shipping_zipcode: self.setParameter('shipping_zip', shipping_zipcode) if shipping_country: self.setParameter('shipping_country', shipping_country) def setTransactionType(self, transtype=None): types = ['sale', 'auth', 'credit'] if transtype.lower() not in types: raise DowCommerce.DowCommerceError('Incorrect Transaction Type passed to setTransactionType(): {0}'.format(transtype)) self.setParameter('type', transtype.lower()) def setProxy(self, proxy=None): if str(proxy).strip() == '' or proxy == None: raise DowCommerce.DowCommerceError('No proxy passed to setProxy()') self.proxy = {'http': str(proxy).strip()} def setParameter(self, key=None, value=None): if key != None and value != None and str(key).strip() != '' and str(value).strip() != '': self.parameters[key] = str(value).strip() else: raise DowCommerce.DowCommerceError('Incorrect parameters passed to setParameter(): {0}:{1}'.format(key, value)) def isApproved(self): return self.success def isDeclined(self): return self.declined def isError(self): return self.error def getResultResponseShort(self): responses = ['', 'Approved', 'Declined', 'Error'] return responses[int(self.results['response'])] def getFullResponse(self): return self.results def getResponseText(self): return self.results['responsetext'] def test(): import socket import sys from time import time ## TEST VALUES FROM API DOC: # Visa: 4111111111111111 # MasterCard 5431111111111111 # DiscoverCard: 6011601160116611 # American Express: 341111111111111 # Expiration: 10/10 # Amount: > 1.00 (( passing less than $1.00 will cause it to be declined )) # CVV: 999 creditcard = '4111111111111111' expiration = '1010' total = '1.00' cvv = '999' tax = '0.00' orderid = str(time())[4:10] # get a random invoice number try: payment = DowCommerce(demomode=True) payment.setTransaction(creditcard, expiration, total, cvv=cvv, tax=tax, orderid=orderid, orderdescription='Test Transaction', firstname='John', lastname='Doe', company='Acme', address1='123 Min Street', city='Hometown', state='VA', zipcode='12345', country='US', phone='888-555-1212', emailaddress='john@noemail.local', ipaddress='192.168.1.1') payment.process() if payment.isApproved(): print 'Payment approved!' print payment.getFullResponse() elif payment.isDeclined(): print 'Your credit card was declined by your bank' elif payment.isError(): raise DowCommerce.DowCommerceError('An uncaught error occurred') except DowCommerce.DowCommerceError, e: print "Exception thrown:", e print 'An error occured' print 'approved',payment.isApproved() print 'declined',payment.isDeclined() print 'error',payment.isError() if __name__=='__main__': test() web2py-1.99.7.orig/gluon/contrib/sms_utils.py0000644000175000017500000001014311724764235017644 0ustar josejoseSMSCODES = { 'Aliant':'@chat.wirefree.ca', 'Alltel':'@message.alltel.com', 'Ameritech':'@paging.acswireless.com', 'AT&T':'@txt.att.net', 'AU by KDDI':'@ezweb.ne.jp', 'BeeLine GSM':'@sms.beemail.ru', 'Bell Mobility Canada':'@txt.bellmobility.ca', 'Bellsouth':'@bellsouth.cl', 'BellSouth Mobility':'@blsdcs.net', 'Blue Sky Frog':'@blueskyfrog.com', 'Boost':'@myboostmobile.com', 'Cellular South':'@csouth1.com', 'CellularOne':'@mobile.celloneusa.com', 'CellularOne West':'@mycellone.com', 'Cincinnati Bell':'@gocbw.com', 'Claro':'@clarotorpedo.com.br', 'Comviq':'@sms.comviq.se', 'Dutchtone/Orange-NL':'@sms.orange.nl', 'Edge Wireless':'@sms.edgewireless.com', 'EinsteinPCS / Airadigm Communications':'@einsteinsms.com', 'EPlus':'@smsmail.eplus.de', 'Fido Canada':'@fido.ca', 'Golden Telecom':'@sms.goldentele.com', 'Idea Cellular':'@ideacellular.net', 'Kyivstar':'@sms.kyivstar.net', 'LMT':'@sms.lmt.lv', 'Manitoba Telecom Systems':'@text.mtsmobility.com', 'Meteor':'@sms.mymeteor.ie', 'Metro PCS':'@mymetropcs.com', 'Metrocall Pager':'@page.metrocall.com', 'MobileOne':'@m1.com.sg', 'Mobilfone':'@page.mobilfone.com', 'Mobility Bermuda':'@ml.bm', 'Netcom':'@sms.netcom.no', 'Nextel':'@messaging.nextel.com', 'NPI Wireless':'@npiwireless.com', 'O2':'@o2.co.uk', 'O2 M-mail':'@mmail.co.uk', 'Optus':'@optusmobile.com.au', 'Orange':'@orange.net', 'Oskar':'@mujoskar.cz', 'Pagenet':'@pagenet.net', 'PCS Rogers':'@pcs.rogers.com', 'Personal Communication':'@pcom.ru', 'Plus GSM Poland':'@text.plusgsm.pl', 'Powertel':'@ptel.net', 'Primtel':'@sms.primtel.ru', 'PSC Wireless':'@sms.pscel.com', 'Qualcomm':'@pager.qualcomm.com', 'Qwest':'@qwestmp.com', 'Safaricom':'@safaricomsms.com', 'Satelindo GSM':'@satelindogsm.com', 'SCS-900':'@scs-900.ru', 'Simple Freedom':'@text.simplefreedom.net', 'Skytel - Alphanumeric':'@skytel.com', 'Smart Telecom':'@mysmart.mymobile.ph', 'Southern Linc':'@page.southernlinc.com', 'Sprint PCS':'@messaging.sprintpcs.com', 'Sprint PCS - Short Mail':'@sprintpcs.com', 'SunCom':'@tms.suncom.com', 'SureWest Communications':'@mobile.surewest.com', 'SwissCom Mobile':'@bluewin.ch', 'T-Mobile Germany':'@T-D1-SMS.de', 'T-Mobile Netherlands':'@gin.nl', 'T-Mobile UK':'@t-mobile.uk.net', 'T-Mobile USA (tmail)':'@tmail.com', 'T-Mobile USA (tmomail)':'@tmomail.net', 'Tele2 Latvia':'@sms.tele2.lv', 'Telefonica Movistar':'@movistar.net', 'Telenor':'@mobilpost.no', 'Telia Denmark':'@gsm1800.telia.dk', 'Telus Mobility':'@msg.telus.com', 'The Phone House':'@sms.phonehouse.de', 'TIM':'@timnet.com', 'UMC':'@sms.umc.com.ua', 'Unicel':'@utext.com', 'US Cellular':'@email.uscc.net', 'Verizon Wireless (vtext)':'@vtext.com', 'Verizon Wireless (airtouchpaging)':'@airtouchpaging.com', 'Verizon Wireless (myairmail)':'@myairmail.com', 'Vessotel':'@pager.irkutsk.ru', 'Virgin Mobile Canada':'@vmobile.ca', 'Virgin Mobile USA':'@vmobl.com', 'Vodafone Italy':'@sms.vodafone.it', 'Vodafone Japan (n)':'@n.vodafone.ne.jp', 'Vodafone Japan (d)':'@d.vodafone.ne.jp', 'Vodafone Japan (r)':'@r.vodafone.ne.jp', 'Vodafone Japan (k)':'@k.vodafone.ne.jp', 'Vodafone Japan (t)':'@t.vodafone.ne.jp', 'Vodafone Japan (q)':'@q.vodafone.ne.jp', 'Vodafone Japan (s)':'@s.vodafone.ne.jp', 'Vodafone Japan (h)':'@h.vodafone.ne.jp', 'Vodafone Japan (c)':'@c.vodafone.ne.jp', 'Vodafone Spain':'@vodafone.es', 'Vodafone UK':'@vodafone.net', 'Weblink Wireless':'@airmessage.net', 'WellCom':'@sms.welcome2well.com', 'WyndTell':'@wyndtell.com', } def sms_email(number,provider): """ >>> print sms_email('1 (312) 375-6536','T-Mobile USA (tmail)') print 13123756536@tmail.com """ import re if number[0]=='+1': number=number[1:] elif number[0]=='+': number=number[3:] elif number[:2]=='00': number=number[3:] number=re.sub('[^\d]','',number) return number+SMSCODES[provider] web2py-1.99.7.orig/gluon/contrib/spreadsheet.py0000644000175000017500000002207411724764235020137 0ustar josejose""" Developed by Massimo Di Pierro, optional component of web2py, GPL2 license. """ import re import pickle import copy def quote(text): return str(text).replace('\\', '\\\\').replace("'", "\\'") class Node: """ Example:: # controller from gluon.contrib.spreadsheet import Sheet def callback(): return cache.ram('sheet1', lambda: None, None).process(request) def index(): sheet = cache.ram('sheet1', lambda: Sheet(10, 10, URL(r=request, f='callback')), 0) #sheet.cell('r0c3', value='=r0c0+r0c1+r0c2', readonly=True) return dict(sheet=sheet) # view {{extend 'layout.html'}} {{=sheet}} or insert invidivual cells via {{=sheet.nodes['r0c0']}} """ def __init__(self, name, value, url='.', readonly=False, active=True, onchange=None): self.url = url self.name = name self.value = str(value) self.computed_value = '' self.incoming = {} self.outcoming = {} self.readonly = readonly self.active = active self.onchange = onchange self.size = 4 self.locked = False def xml(self): return """ """ % (self.name, self.name, self.computed_value, self.size, self.url, self.name, self.url, self.name, self.url, self.name, (self.readonly and 'readonly ') or '') def __repr__(self): return '%s:%s' % (self.name, self.computed_value) class Sheet: regex=re.compile('(?' + r"[uU]?[rR]?'''([^']+|'{1,2}(?!'))*'''|" + r"'([^'\\]|\\.)*'|" + r'"""([^"]|"{1,2}(?!"))*"""|' + r'"([^"\\]|\\.)*")', re.DOTALL) def dumps(self): dump = pickle.dumps(self) return dump @staticmethod def loads(data): sheet = pickle.loads(data) return sheet def process(self, request): """ call this in action that creates table, it will handle ajax callbacks """ cell = request.vars.keys()[0] if request.args(0) == 'focus': return "jQuery('#%s').val('%s');" % (cell, quote(self[cell].value)) value = request.vars[cell] self[cell] = value if request.args(0) == 'blur': return "jQuery('#%s').val('%s');" \ % (cell, quote(self[cell].computed_value)) elif request.args(0) == 'keyup': jquery = '' for other_key in self.modified: if other_key != cell: jquery += "jQuery('#%s').val('%s');" % \ (other_key, quote(self[other_key].computed_value)) return jquery def __init__(self, rows, cols, url='.', readonly=False, active=True, onchange=None): self.rows = rows self.cols = cols self.url = url self.nodes = {} self.error = 'ERROR: %(error)s' self.allowed_keywords = ['for', 'in', 'if', 'else', 'and', 'or', 'not', 'i', 'j', 'k', 'x', 'y', 'z', 'sum'] self.environment = {} [self.cell('r%sc%s'%(k/cols, k%cols), '0.0', readonly, active, onchange) for k in xrange(rows*cols)] exec('from math import *', {}, self.environment) def delete_from(self, other_list): indices = [k for (k, node) in enumerate(other_list) if k == node] if indices: del other_list[indices[0]] def changed(self, node, changed_nodes=[]): for other_node in node.outcoming: if not other_node in changed_nodes: changed_nodes.append(other_node) self.changed(other_node, changed_nodes) return changed_nodes def define(self, name, obj): self.environment[name] = obj def cell(self, key, value, readonly=False, active=True, onchange=None): """ key is the name of the cell value is the initial value of the cell. It can be a formula "=1+3" a cell is active if it evaluates formuls """ key = str(key) if not self.regex.match(key): raise SyntaxError, "Invalid cell name: %s" % key node = Node(key, value, self.url, readonly, active, onchange) self.nodes[key] = node self[key] = value def __setitem__(self, key, value): key = str(key) value = str(value) node = self.nodes[key] node.value = value if value[:1] == '=' and node.active: # clear all edges involving current node for other_node in node.incoming: del other_node.outcoming[node] node.incoming.clear() # build new edges command = self.re_strings.sub("''", value[1:]) node.locked = False for match in self.regex.finditer(command): other_key = match.group() if other_key == key: self.computed_value = self.error % dict(error='cycle') self.modified={} break if other_key in self.nodes: other_node = self.nodes[other_key] other_node.outcoming[node] = True node.incoming[other_node] = True elif not other_key in self.allowed_keywords and \ not other_key in self.environment: node.locked = True node.computed_value = \ self.error % dict(error='invalid keyword: ' + other_key) self.modified = {} break self.compute(node) else: try: node.computed_value = int(node.value) except: try: node.computed_value = float(node.value) except: node.computed_value = node.value self.environment[key] = node.computed_value if node.onchange: node.onchange(node) self.modified = self.iterate(node) def compute(self, node): if node.value[:1] == '=' and not node.locked: try: exec('__value__=' + node.value[1:], {}, self.environment) node.computed_value = self.environment['__value__'] del self.environment['__value__'] except Exception, e: node.computed_value = self.error % dict(error=str(e)) self.environment[node.name] = node.computed_value if node.onchange: node.onchange(node) def iterate(self, node): output = {node.name: node.computed_value} changed_nodes = self.changed(node) while changed_nodes: ok=False set_changed_nodes = set(changed_nodes) for (k, other_node) in enumerate(changed_nodes): #print other_node, changed_nodes if not set(other_node.incoming.keys()).\ intersection(set_changed_nodes): #print 'ok' self.compute(other_node) output[other_node.name] = other_node.computed_value #print other_node del changed_nodes[k] ok = True break if not ok: return {} return output def __getitem__(self, key): return self.nodes[str(key)] def get_computed_values(self): d={} for key in self.nodes: node = self.nodes[key] if node.value[:1] != '=' or not node.active: d[key] = node.computed_value return d def set_computed_values(self, d): for key in d: if not key in self.nodes: continue node = self.nodes[key] if node.value[:1] != '=' or not node.active: node.value = d[key] def xml(self): import gluon.html (DIV, TABLE, TR, TD, TH, BR) = \ (gluon.html.DIV, gluon.html.TABLE, gluon.html.TR, gluon.html.TD, gluon.html.TH, gluon.html.BR) regex = re.compile('r\d+c\d+') return DIV(TABLE(TR(TH(), *[TH('c%s' % c) for c in range(self.cols)]), *[TR(TH('r%s' % r), *[TD(self.nodes['r%sc%s'%(r, c)]) \ for c in range(self.cols)]) \ for r in range(self.rows)]), BR(), TABLE(*[TR(TH(key), TD(self.nodes[key])) \ for key in self.nodes if not regex.match(key)])).xml() if __name__ == '__main__': s = Sheet(0, 0) s.cell('a', value="2") s.cell('b', value="=sin(a)") s.cell('c', value="=cos(a)**2+b*b") print s['c'].computed_value web2py-1.99.7.orig/gluon/contrib/stripe.py0000644000175000017500000000476211724764235017142 0ustar josejoseimport urllib import simplejson class Stripe: """ Usage: key='' d = Stripe(key).charge( amount=100, currency='usd', card_number='4242424242424242', card_exp_month='5', card_exp_year='2012', card_cvc_check='123', description='test charge') print d print Stripe(key).check(d['id']) print Stripe(key).refund(d['id']) Sample output (python dict): {u'fee': 0, u'description': u'test charge', u'created': 1321242072, u'refunded': False, u'livemode': False, u'object': u'charge', u'currency': u'usd', u'amount': 100, u'paid': True, u'id': u'ch_sdjasgfga83asf', u'card': {u'exp_month': 5, u'country': u'US', u'object': u'card', u'last4': u'4242', u'exp_year': 2012, u'type': u'Visa'}} if paid is True than transaction was processed """ def __init__(self,key): self.key = key def charge(self, amount, currency='usd', card_number='4242424242424242', card_exp_month='5', card_exp_year='2012', card_cvc_check='123', description='test charge'): params = urllib.urlencode({'amount':amount, 'currency':currency, 'card[number]':card_number, 'card[exp_month]':card_exp_month, 'card[exp_year]':card_exp_year, 'card[cvc_check]':card_cvc_check, 'description':description}) u = urllib.urlopen('https://%s:@api.stripe.com/v1/charges' % \ self.key,params) return simplejson.loads(u.read()) def check(self,charge_id): u = urllib.urlopen('https://%s:@api.stripe.com/v1/charges/%s' % \ (self.key,charge_id)) return simplejson.loads(u.read()) def refund(self,charge_id): params = urllib.urlencode({}) u = urllib.urlopen('https://%s:@api.stripe.com/v1/charges/%s/refund'%\ (self.key,charge_id),params) return simplejson.loads(u.read()) if __name__=='__main__': key = raw_input('user>') d=Stripe(key).charge(100) print 'charged',d['paid'] s = Stripe(key).check(d[u'id']) print 'paid',s['paid'],s['amount'] ,s['currency'] s = Stripe(key).refund(d[u'id']) print 'refunded',s['refunded'] web2py-1.99.7.orig/gluon/contrib/gae_memcache.py0000644000175000017500000000240011724764235020175 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """ Developed by Robin Bhattacharyya (memecache for GAE) Released under the web2py license (LGPL) from gluon.contrib.gae_memcache import MemcacheClient cache.ram=cache.disk=MemcacheClient(request) """ import time from google.appengine.api.memcache import Client class MemcacheClient(Client): def __init__(self, request): self.request = request Client.__init__(self) def __call__( self, key, f, time_expire=300, ): key = '%s/%s' % (self.request.application, key) dt = time_expire value = None obj = self.get(key) if obj and (dt == None or obj[0] > time.time() - dt): value = obj[1] elif f is None: if obj: self.delete(key) else: value = f() self.set(key, (time.time(), value)) return value def increment(self, key, value=1): key = '%s/%s' % (self.request.application, key) obj = self.get(key) if obj: value = obj[1] + value self.set((time.time(), value)) return value def clear(self, key): key = '%s/%s' % (self.request.application, key) self.delete(key) web2py-1.99.7.orig/gluon/contrib/gateways/0000755000175000017500000000000011724764270017074 5ustar josejoseweb2py-1.99.7.orig/gluon/contrib/gateways/__init__.py0000644000175000017500000000000211724764235021176 0ustar josejose web2py-1.99.7.orig/gluon/contrib/gateways/fcgi.py0000644000175000017500000012573211724764235020371 0ustar josejose# Copyright (c) 2002, 2003, 2005, 2006 Allan Saddi # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $Id$ """ fcgi - a FastCGI/WSGI gateway. For more information about FastCGI, see . For more information about the Web Server Gateway Interface, see . Example usage: #!/usr/bin/env python from myapplication import app # Assume app is your WSGI application object from fcgi import WSGIServer WSGIServer(app).run() See the documentation for WSGIServer/Server for more information. On most platforms, fcgi will fallback to regular CGI behavior if run in a non-FastCGI context. If you want to force CGI behavior, set the environment variable FCGI_FORCE_CGI to "Y" or "y". """ __author__ = 'Allan Saddi ' __version__ = '$Revision$' import sys import os import signal import struct import cStringIO as StringIO import select import socket import errno import traceback try: import thread import threading thread_available = True except ImportError: import dummy_thread as thread import dummy_threading as threading thread_available = False # Apparently 2.3 doesn't define SHUT_WR? Assume it is 1 in this case. if not hasattr(socket, 'SHUT_WR'): socket.SHUT_WR = 1 __all__ = ['WSGIServer'] # Constants from the spec. FCGI_LISTENSOCK_FILENO = 0 FCGI_HEADER_LEN = 8 FCGI_VERSION_1 = 1 FCGI_BEGIN_REQUEST = 1 FCGI_ABORT_REQUEST = 2 FCGI_END_REQUEST = 3 FCGI_PARAMS = 4 FCGI_STDIN = 5 FCGI_STDOUT = 6 FCGI_STDERR = 7 FCGI_DATA = 8 FCGI_GET_VALUES = 9 FCGI_GET_VALUES_RESULT = 10 FCGI_UNKNOWN_TYPE = 11 FCGI_MAXTYPE = FCGI_UNKNOWN_TYPE FCGI_NULL_REQUEST_ID = 0 FCGI_KEEP_CONN = 1 FCGI_RESPONDER = 1 FCGI_AUTHORIZER = 2 FCGI_FILTER = 3 FCGI_REQUEST_COMPLETE = 0 FCGI_CANT_MPX_CONN = 1 FCGI_OVERLOADED = 2 FCGI_UNKNOWN_ROLE = 3 FCGI_MAX_CONNS = 'FCGI_MAX_CONNS' FCGI_MAX_REQS = 'FCGI_MAX_REQS' FCGI_MPXS_CONNS = 'FCGI_MPXS_CONNS' FCGI_Header = '!BBHHBx' FCGI_BeginRequestBody = '!HB5x' FCGI_EndRequestBody = '!LB3x' FCGI_UnknownTypeBody = '!B7x' FCGI_EndRequestBody_LEN = struct.calcsize(FCGI_EndRequestBody) FCGI_UnknownTypeBody_LEN = struct.calcsize(FCGI_UnknownTypeBody) if __debug__: import time # Set non-zero to write debug output to a file. DEBUG = 0 DEBUGLOG = '/tmp/fcgi.log' def _debug(level, msg): if DEBUG < level: return try: f = open(DEBUGLOG, 'a') f.write('%sfcgi: %s\n' % (time.ctime()[4:-4], msg)) f.close() except: pass class InputStream(object): """ File-like object representing FastCGI input streams (FCGI_STDIN and FCGI_DATA). Supports the minimum methods required by WSGI spec. """ def __init__(self, conn): self._conn = conn # See Server. self._shrinkThreshold = conn.server.inputStreamShrinkThreshold self._buf = '' self._bufList = [] self._pos = 0 # Current read position. self._avail = 0 # Number of bytes currently available. self._eof = False # True when server has sent EOF notification. def _shrinkBuffer(self): """Gets rid of already read data (since we can't rewind).""" if self._pos >= self._shrinkThreshold: self._buf = self._buf[self._pos:] self._avail -= self._pos self._pos = 0 assert self._avail >= 0 def _waitForData(self): """Waits for more data to become available.""" self._conn.process_input() def read(self, n=-1): if self._pos == self._avail and self._eof: return '' while True: if n < 0 or (self._avail - self._pos) < n: # Not enough data available. if self._eof: # And there's no more coming. newPos = self._avail break else: # Wait for more data. self._waitForData() continue else: newPos = self._pos + n break # Merge buffer list, if necessary. if self._bufList: self._buf += ''.join(self._bufList) self._bufList = [] r = self._buf[self._pos:newPos] self._pos = newPos self._shrinkBuffer() return r def readline(self, length=None): if self._pos == self._avail and self._eof: return '' while True: # Unfortunately, we need to merge the buffer list early. if self._bufList: self._buf += ''.join(self._bufList) self._bufList = [] # Find newline. i = self._buf.find('\n', self._pos) if i < 0: # Not found? if self._eof: # No more data coming. newPos = self._avail break else: # Wait for more to come. self._waitForData() continue else: newPos = i + 1 break if length is not None: if self._pos + length < newPos: newPos = self._pos + length r = self._buf[self._pos:newPos] self._pos = newPos self._shrinkBuffer() return r def readlines(self, sizehint=0): total = 0 lines = [] line = self.readline() while line: lines.append(line) total += len(line) if 0 < sizehint <= total: break line = self.readline() return lines def __iter__(self): return self def next(self): r = self.readline() if not r: raise StopIteration return r def add_data(self, data): if not data: self._eof = True else: self._bufList.append(data) self._avail += len(data) class MultiplexedInputStream(InputStream): """ A version of InputStream meant to be used with MultiplexedConnections. Assumes the MultiplexedConnection (the producer) and the Request (the consumer) are running in different threads. """ def __init__(self, conn): super(MultiplexedInputStream, self).__init__(conn) # Arbitrates access to this InputStream (it's used simultaneously # by a Request and its owning Connection object). lock = threading.RLock() # Notifies Request thread that there is new data available. self._lock = threading.Condition(lock) def _waitForData(self): # Wait for notification from add_data(). self._lock.wait() def read(self, n=-1): self._lock.acquire() try: return super(MultiplexedInputStream, self).read(n) finally: self._lock.release() def readline(self, length=None): self._lock.acquire() try: return super(MultiplexedInputStream, self).readline(length) finally: self._lock.release() def add_data(self, data): self._lock.acquire() try: super(MultiplexedInputStream, self).add_data(data) self._lock.notify() finally: self._lock.release() class OutputStream(object): """ FastCGI output stream (FCGI_STDOUT/FCGI_STDERR). By default, calls to write() or writelines() immediately result in Records being sent back to the server. Buffering should be done in a higher level! """ def __init__(self, conn, req, type, buffered=False): self._conn = conn self._req = req self._type = type self._buffered = buffered self._bufList = [] # Used if buffered is True self.dataWritten = False self.closed = False def _write(self, data): length = len(data) while length: toWrite = min(length, self._req.server.maxwrite - FCGI_HEADER_LEN) rec = Record(self._type, self._req.requestId) rec.contentLength = toWrite rec.contentData = data[:toWrite] self._conn.writeRecord(rec) data = data[toWrite:] length -= toWrite def write(self, data): assert not self.closed if not data: return self.dataWritten = True if self._buffered: self._bufList.append(data) else: self._write(data) def writelines(self, lines): assert not self.closed for line in lines: self.write(line) def flush(self): # Only need to flush if this OutputStream is actually buffered. if self._buffered: data = ''.join(self._bufList) self._bufList = [] self._write(data) # Though available, the following should NOT be called by WSGI apps. def close(self): """Sends end-of-stream notification, if necessary.""" if not self.closed and self.dataWritten: self.flush() rec = Record(self._type, self._req.requestId) self._conn.writeRecord(rec) self.closed = True class TeeOutputStream(object): """ Simple wrapper around two or more output file-like objects that copies written data to all streams. """ def __init__(self, streamList): self._streamList = streamList def write(self, data): for f in self._streamList: f.write(data) def writelines(self, lines): for line in lines: self.write(line) def flush(self): for f in self._streamList: f.flush() class StdoutWrapper(object): """ Wrapper for sys.stdout so we know if data has actually been written. """ def __init__(self, stdout): self._file = stdout self.dataWritten = False def write(self, data): if data: self.dataWritten = True self._file.write(data) def writelines(self, lines): for line in lines: self.write(line) def __getattr__(self, name): return getattr(self._file, name) def decode_pair(s, pos=0): """ Decodes a name/value pair. The number of bytes decoded as well as the name/value pair are returned. """ nameLength = ord(s[pos]) if nameLength & 128: nameLength = struct.unpack('!L', s[pos:pos+4])[0] & 0x7fffffff pos += 4 else: pos += 1 valueLength = ord(s[pos]) if valueLength & 128: valueLength = struct.unpack('!L', s[pos:pos+4])[0] & 0x7fffffff pos += 4 else: pos += 1 name = s[pos:pos+nameLength] pos += nameLength value = s[pos:pos+valueLength] pos += valueLength return (pos, (name, value)) def encode_pair(name, value): """ Encodes a name/value pair. The encoded string is returned. """ nameLength = len(name) if nameLength < 128: s = chr(nameLength) else: s = struct.pack('!L', nameLength | 0x80000000L) valueLength = len(value) if valueLength < 128: s += chr(valueLength) else: s += struct.pack('!L', valueLength | 0x80000000L) return s + name + value class Record(object): """ A FastCGI Record. Used for encoding/decoding records. """ def __init__(self, type=FCGI_UNKNOWN_TYPE, requestId=FCGI_NULL_REQUEST_ID): self.version = FCGI_VERSION_1 self.type = type self.requestId = requestId self.contentLength = 0 self.paddingLength = 0 self.contentData = '' def _recvall(sock, length): """ Attempts to receive length bytes from a socket, blocking if necessary. (Socket may be blocking or non-blocking.) """ dataList = [] recvLen = 0 while length: try: data = sock.recv(length) except socket.error, e: if e[0] == errno.EAGAIN: select.select([sock], [], []) continue else: raise if not data: # EOF break dataList.append(data) dataLen = len(data) recvLen += dataLen length -= dataLen return ''.join(dataList), recvLen _recvall = staticmethod(_recvall) def read(self, sock): """Read and decode a Record from a socket.""" try: header, length = self._recvall(sock, FCGI_HEADER_LEN) except: raise EOFError if length < FCGI_HEADER_LEN: raise EOFError self.version, self.type, self.requestId, self.contentLength, \ self.paddingLength = struct.unpack(FCGI_Header, header) if __debug__: _debug(9, 'read: fd = %d, type = %d, requestId = %d, ' 'contentLength = %d' % (sock.fileno(), self.type, self.requestId, self.contentLength)) if self.contentLength: try: self.contentData, length = self._recvall(sock, self.contentLength) except: raise EOFError if length < self.contentLength: raise EOFError if self.paddingLength: try: self._recvall(sock, self.paddingLength) except: raise EOFError def _sendall(sock, data): """ Writes data to a socket and does not return until all the data is sent. """ length = len(data) while length: try: sent = sock.send(data) except socket.error, e: if e[0] == errno.EAGAIN: select.select([], [sock], []) continue else: raise data = data[sent:] length -= sent _sendall = staticmethod(_sendall) def write(self, sock): """Encode and write a Record to a socket.""" self.paddingLength = -self.contentLength & 7 if __debug__: _debug(9, 'write: fd = %d, type = %d, requestId = %d, ' 'contentLength = %d' % (sock.fileno(), self.type, self.requestId, self.contentLength)) header = struct.pack(FCGI_Header, self.version, self.type, self.requestId, self.contentLength, self.paddingLength) self._sendall(sock, header) if self.contentLength: self._sendall(sock, self.contentData) if self.paddingLength: self._sendall(sock, '\x00'*self.paddingLength) class Request(object): """ Represents a single FastCGI request. These objects are passed to your handler and is the main interface between your handler and the fcgi module. The methods should not be called by your handler. However, server, params, stdin, stdout, stderr, and data are free for your handler's use. """ def __init__(self, conn, inputStreamClass): self._conn = conn self.server = conn.server self.params = {} self.stdin = inputStreamClass(conn) self.stdout = OutputStream(conn, self, FCGI_STDOUT) self.stderr = OutputStream(conn, self, FCGI_STDERR, buffered=True) self.data = inputStreamClass(conn) def run(self): """Runs the handler, flushes the streams, and ends the request.""" try: protocolStatus, appStatus = self.server.handler(self) except: traceback.print_exc(file=self.stderr) self.stderr.flush() if not self.stdout.dataWritten: self.server.error(self) protocolStatus, appStatus = FCGI_REQUEST_COMPLETE, 0 if __debug__: _debug(1, 'protocolStatus = %d, appStatus = %d' % (protocolStatus, appStatus)) self._flush() self._end(appStatus, protocolStatus) def _end(self, appStatus=0L, protocolStatus=FCGI_REQUEST_COMPLETE): self._conn.end_request(self, appStatus, protocolStatus) def _flush(self): self.stdout.close() self.stderr.close() class CGIRequest(Request): """A normal CGI request disguised as a FastCGI request.""" def __init__(self, server): # These are normally filled in by Connection. self.requestId = 1 self.role = FCGI_RESPONDER self.flags = 0 self.aborted = False self.server = server self.params = dict(os.environ) self.stdin = sys.stdin self.stdout = StdoutWrapper(sys.stdout) # Oh, the humanity! self.stderr = sys.stderr self.data = StringIO.StringIO() def _end(self, appStatus=0L, protocolStatus=FCGI_REQUEST_COMPLETE): sys.exit(appStatus) def _flush(self): # Not buffered, do nothing. pass class Connection(object): """ A Connection with the web server. Each Connection is associated with a single socket (which is connected to the web server) and is responsible for handling all the FastCGI message processing for that socket. """ _multiplexed = False _inputStreamClass = InputStream def __init__(self, sock, addr, server): self._sock = sock self._addr = addr self.server = server # Active Requests for this Connection, mapped by request ID. self._requests = {} def _cleanupSocket(self): """Close the Connection's socket.""" try: self._sock.shutdown(socket.SHUT_WR) except: return try: while True: r, w, e = select.select([self._sock], [], []) if not r or not self._sock.recv(1024): break except: pass self._sock.close() def run(self): """Begin processing data from the socket.""" self._keepGoing = True while self._keepGoing: try: self.process_input() except EOFError: break except (select.error, socket.error), e: if e[0] == errno.EBADF: # Socket was closed by Request. break raise self._cleanupSocket() def process_input(self): """Attempt to read a single Record from the socket and process it.""" # Currently, any children Request threads notify this Connection # that it is no longer needed by closing the Connection's socket. # We need to put a timeout on select, otherwise we might get # stuck in it indefinitely... (I don't like this solution.) while self._keepGoing: try: r, w, e = select.select([self._sock], [], [], 1.0) except ValueError: # Sigh. ValueError gets thrown sometimes when passing select # a closed socket. raise EOFError if r: break if not self._keepGoing: return rec = Record() rec.read(self._sock) if rec.type == FCGI_GET_VALUES: self._do_get_values(rec) elif rec.type == FCGI_BEGIN_REQUEST: self._do_begin_request(rec) elif rec.type == FCGI_ABORT_REQUEST: self._do_abort_request(rec) elif rec.type == FCGI_PARAMS: self._do_params(rec) elif rec.type == FCGI_STDIN: self._do_stdin(rec) elif rec.type == FCGI_DATA: self._do_data(rec) elif rec.requestId == FCGI_NULL_REQUEST_ID: self._do_unknown_type(rec) else: # Need to complain about this. pass def writeRecord(self, rec): """ Write a Record to the socket. """ rec.write(self._sock) def end_request(self, req, appStatus=0L, protocolStatus=FCGI_REQUEST_COMPLETE, remove=True): """ End a Request. Called by Request objects. An FCGI_END_REQUEST Record is sent to the web server. If the web server no longer requires the connection, the socket is closed, thereby ending this Connection (run() returns). """ rec = Record(FCGI_END_REQUEST, req.requestId) rec.contentData = struct.pack(FCGI_EndRequestBody, appStatus, protocolStatus) rec.contentLength = FCGI_EndRequestBody_LEN self.writeRecord(rec) if remove: del self._requests[req.requestId] if __debug__: _debug(2, 'end_request: flags = %d' % req.flags) if not (req.flags & FCGI_KEEP_CONN) and not self._requests: self._cleanupSocket() self._keepGoing = False def _do_get_values(self, inrec): """Handle an FCGI_GET_VALUES request from the web server.""" outrec = Record(FCGI_GET_VALUES_RESULT) pos = 0 while pos < inrec.contentLength: pos, (name, value) = decode_pair(inrec.contentData, pos) cap = self.server.capability.get(name) if cap is not None: outrec.contentData += encode_pair(name, str(cap)) outrec.contentLength = len(outrec.contentData) self.writeRecord(outrec) def _do_begin_request(self, inrec): """Handle an FCGI_BEGIN_REQUEST from the web server.""" role, flags = struct.unpack(FCGI_BeginRequestBody, inrec.contentData) req = self.server.request_class(self, self._inputStreamClass) req.requestId, req.role, req.flags = inrec.requestId, role, flags req.aborted = False if not self._multiplexed and self._requests: # Can't multiplex requests. self.end_request(req, 0L, FCGI_CANT_MPX_CONN, remove=False) else: self._requests[inrec.requestId] = req def _do_abort_request(self, inrec): """ Handle an FCGI_ABORT_REQUEST from the web server. We just mark a flag in the associated Request. """ req = self._requests.get(inrec.requestId) if req is not None: req.aborted = True def _start_request(self, req): """Run the request.""" # Not multiplexed, so run it inline. req.run() def _do_params(self, inrec): """ Handle an FCGI_PARAMS Record. If the last FCGI_PARAMS Record is received, start the request. """ req = self._requests.get(inrec.requestId) if req is not None: if inrec.contentLength: pos = 0 while pos < inrec.contentLength: pos, (name, value) = decode_pair(inrec.contentData, pos) req.params[name] = value else: self._start_request(req) def _do_stdin(self, inrec): """Handle the FCGI_STDIN stream.""" req = self._requests.get(inrec.requestId) if req is not None: req.stdin.add_data(inrec.contentData) def _do_data(self, inrec): """Handle the FCGI_DATA stream.""" req = self._requests.get(inrec.requestId) if req is not None: req.data.add_data(inrec.contentData) def _do_unknown_type(self, inrec): """Handle an unknown request type. Respond accordingly.""" outrec = Record(FCGI_UNKNOWN_TYPE) outrec.contentData = struct.pack(FCGI_UnknownTypeBody, inrec.type) outrec.contentLength = FCGI_UnknownTypeBody_LEN self.writeRecord(rec) class MultiplexedConnection(Connection): """ A version of Connection capable of handling multiple requests simultaneously. """ _multiplexed = True _inputStreamClass = MultiplexedInputStream def __init__(self, sock, addr, server): super(MultiplexedConnection, self).__init__(sock, addr, server) # Used to arbitrate access to self._requests. lock = threading.RLock() # Notification is posted everytime a request completes, allowing us # to quit cleanly. self._lock = threading.Condition(lock) def _cleanupSocket(self): # Wait for any outstanding requests before closing the socket. self._lock.acquire() while self._requests: self._lock.wait() self._lock.release() super(MultiplexedConnection, self)._cleanupSocket() def writeRecord(self, rec): # Must use locking to prevent intermingling of Records from different # threads. self._lock.acquire() try: # Probably faster than calling super. ;) rec.write(self._sock) finally: self._lock.release() def end_request(self, req, appStatus=0L, protocolStatus=FCGI_REQUEST_COMPLETE, remove=True): self._lock.acquire() try: super(MultiplexedConnection, self).end_request(req, appStatus, protocolStatus, remove) self._lock.notify() finally: self._lock.release() def _do_begin_request(self, inrec): self._lock.acquire() try: super(MultiplexedConnection, self)._do_begin_request(inrec) finally: self._lock.release() def _do_abort_request(self, inrec): self._lock.acquire() try: super(MultiplexedConnection, self)._do_abort_request(inrec) finally: self._lock.release() def _start_request(self, req): thread.start_new_thread(req.run, ()) def _do_params(self, inrec): self._lock.acquire() try: super(MultiplexedConnection, self)._do_params(inrec) finally: self._lock.release() def _do_stdin(self, inrec): self._lock.acquire() try: super(MultiplexedConnection, self)._do_stdin(inrec) finally: self._lock.release() def _do_data(self, inrec): self._lock.acquire() try: super(MultiplexedConnection, self)._do_data(inrec) finally: self._lock.release() class Server(object): """ The FastCGI server. Waits for connections from the web server, processing each request. If run in a normal CGI context, it will instead instantiate a CGIRequest and run the handler through there. """ request_class = Request cgirequest_class = CGIRequest # Limits the size of the InputStream's string buffer to this size + the # server's maximum Record size. Since the InputStream is not seekable, # we throw away already-read data once this certain amount has been read. inputStreamShrinkThreshold = 102400 - 8192 def __init__(self, handler=None, maxwrite=8192, bindAddress=None, umask=None, multiplexed=False): """ handler, if present, must reference a function or method that takes one argument: a Request object. If handler is not specified at creation time, Server *must* be subclassed. (The handler method below is abstract.) maxwrite is the maximum number of bytes (per Record) to write to the server. I've noticed mod_fastcgi has a relatively small receive buffer (8K or so). bindAddress, if present, must either be a string or a 2-tuple. If present, run() will open its own listening socket. You would use this if you wanted to run your application as an 'external' FastCGI app. (i.e. the webserver would no longer be responsible for starting your app) If a string, it will be interpreted as a filename and a UNIX socket will be opened. If a tuple, the first element, a string, is the interface name/IP to bind to, and the second element (an int) is the port number. Set multiplexed to True if you want to handle multiple requests per connection. Some FastCGI backends (namely mod_fastcgi) don't multiplex requests at all, so by default this is off (which saves on thread creation/locking overhead). If threads aren't available, this keyword is ignored; it's not possible to multiplex requests at all. """ if handler is not None: self.handler = handler self.maxwrite = maxwrite if thread_available: try: import resource # Attempt to glean the maximum number of connections # from the OS. maxConns = resource.getrlimit(resource.RLIMIT_NOFILE)[0] except ImportError: maxConns = 100 # Just some made up number. maxReqs = maxConns if multiplexed: self._connectionClass = MultiplexedConnection maxReqs *= 5 # Another made up number. else: self._connectionClass = Connection self.capability = { FCGI_MAX_CONNS: maxConns, FCGI_MAX_REQS: maxReqs, FCGI_MPXS_CONNS: multiplexed and 1 or 0 } else: self._connectionClass = Connection self.capability = { # If threads aren't available, these are pretty much correct. FCGI_MAX_CONNS: 1, FCGI_MAX_REQS: 1, FCGI_MPXS_CONNS: 0 } self._bindAddress = bindAddress self._umask = umask def _setupSocket(self): if self._bindAddress is None: # Run as a normal FastCGI? isFCGI = True sock = socket.fromfd(FCGI_LISTENSOCK_FILENO, socket.AF_INET, socket.SOCK_STREAM) try: sock.getpeername() except socket.error, e: if e[0] == errno.ENOTSOCK: # Not a socket, assume CGI context. isFCGI = False elif e[0] != errno.ENOTCONN: raise # FastCGI/CGI discrimination is broken on Mac OS X. # Set the environment variable FCGI_FORCE_CGI to "Y" or "y" # if you want to run your app as a simple CGI. (You can do # this with Apache's mod_env [not loaded by default in OS X # client, ha ha] and the SetEnv directive.) if not isFCGI or \ os.environ.get('FCGI_FORCE_CGI', 'N').upper().startswith('Y'): req = self.cgirequest_class(self) req.run() sys.exit(0) else: # Run as a server oldUmask = None if type(self._bindAddress) is str: # Unix socket sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) try: os.unlink(self._bindAddress) except OSError: pass if self._umask is not None: oldUmask = os.umask(self._umask) else: # INET socket assert type(self._bindAddress) is tuple assert len(self._bindAddress) == 2 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(self._bindAddress) sock.listen(socket.SOMAXCONN) if oldUmask is not None: os.umask(oldUmask) return sock def _cleanupSocket(self, sock): """Closes the main socket.""" sock.close() def _installSignalHandlers(self): self._oldSIGs = [(x,signal.getsignal(x)) for x in (signal.SIGHUP, signal.SIGINT, signal.SIGTERM)] signal.signal(signal.SIGHUP, self._hupHandler) signal.signal(signal.SIGINT, self._intHandler) signal.signal(signal.SIGTERM, self._intHandler) def _restoreSignalHandlers(self): for signum,handler in self._oldSIGs: signal.signal(signum, handler) def _hupHandler(self, signum, frame): self._hupReceived = True self._keepGoing = False def _intHandler(self, signum, frame): self._keepGoing = False def run(self, timeout=1.0): """ The main loop. Exits on SIGHUP, SIGINT, SIGTERM. Returns True if SIGHUP was received, False otherwise. """ web_server_addrs = os.environ.get('FCGI_WEB_SERVER_ADDRS') if web_server_addrs is not None: web_server_addrs = map(lambda x: x.strip(), web_server_addrs.split(',')) sock = self._setupSocket() self._keepGoing = True self._hupReceived = False # Install signal handlers. self._installSignalHandlers() while self._keepGoing: try: r, w, e = select.select([sock], [], [], timeout) except select.error, e: if e[0] == errno.EINTR: continue raise if r: try: clientSock, addr = sock.accept() except socket.error, e: if e[0] in (errno.EINTR, errno.EAGAIN): continue raise if web_server_addrs and \ (len(addr) != 2 or addr[0] not in web_server_addrs): clientSock.close() continue # Instantiate a new Connection and begin processing FastCGI # messages (either in a new thread or this thread). conn = self._connectionClass(clientSock, addr, self) thread.start_new_thread(conn.run, ()) self._mainloopPeriodic() # Restore signal handlers. self._restoreSignalHandlers() self._cleanupSocket(sock) return self._hupReceived def _mainloopPeriodic(self): """ Called with just about each iteration of the main loop. Meant to be overridden. """ pass def _exit(self, reload=False): """ Protected convenience method for subclasses to force an exit. Not really thread-safe, which is why it isn't public. """ if self._keepGoing: self._keepGoing = False self._hupReceived = reload def handler(self, req): """ Default handler, which just raises an exception. Unless a handler is passed at initialization time, this must be implemented by a subclass. """ raise NotImplementedError, self.__class__.__name__ + '.handler' def error(self, req): """ Called by Request if an exception occurs within the handler. May and should be overridden. """ import cgitb req.stdout.write('Content-Type: text/html\r\n\r\n' + cgitb.html(sys.exc_info())) class WSGIServer(Server): """ FastCGI server that supports the Web Server Gateway Interface. See . """ def __init__(self, application, environ=None, multithreaded=True, **kw): """ environ, if present, must be a dictionary-like object. Its contents will be copied into application's environ. Useful for passing application-specific variables. Set multithreaded to False if your application is not MT-safe. """ if kw.has_key('handler'): del kw['handler'] # Doesn't make sense to let this through super(WSGIServer, self).__init__(**kw) if environ is None: environ = {} self.application = application self.environ = environ self.multithreaded = multithreaded # Used to force single-threadedness self._app_lock = thread.allocate_lock() def handler(self, req): """Special handler for WSGI.""" if req.role != FCGI_RESPONDER: return FCGI_UNKNOWN_ROLE, 0 # Mostly taken from example CGI gateway. environ = req.params environ.update(self.environ) environ['wsgi.version'] = (1,0) environ['wsgi.input'] = req.stdin if self._bindAddress is None: stderr = req.stderr else: stderr = TeeOutputStream((sys.stderr, req.stderr)) environ['wsgi.errors'] = stderr environ['wsgi.multithread'] = not isinstance(req, CGIRequest) and \ thread_available and self.multithreaded # Rationale for the following: If started by the web server # (self._bindAddress is None) in either FastCGI or CGI mode, the # possibility of being spawned multiple times simultaneously is quite # real. And, if started as an external server, multiple copies may be # spawned for load-balancing/redundancy. (Though I don't think # mod_fastcgi supports this?) environ['wsgi.multiprocess'] = True environ['wsgi.run_once'] = isinstance(req, CGIRequest) if environ.get('HTTPS', 'off') in ('on', '1'): environ['wsgi.url_scheme'] = 'https' else: environ['wsgi.url_scheme'] = 'http' self._sanitizeEnv(environ) headers_set = [] headers_sent = [] result = None def write(data): assert type(data) is str, 'write() argument must be string' assert headers_set, 'write() before start_response()' if not headers_sent: status, responseHeaders = headers_sent[:] = headers_set found = False for header,value in responseHeaders: if header.lower() == 'content-length': found = True break if not found and result is not None: try: if len(result) == 1: responseHeaders.append(('Content-Length', str(len(data)))) except: pass s = 'Status: %s\r\n' % status for header in responseHeaders: s += '%s: %s\r\n' % header s += '\r\n' req.stdout.write(s) req.stdout.write(data) req.stdout.flush() def start_response(status, response_headers, exc_info=None): if exc_info: try: if headers_sent: # Re-raise if too late raise exc_info[0], exc_info[1], exc_info[2] finally: exc_info = None # avoid dangling circular ref else: assert not headers_set, 'Headers already set!' assert type(status) is str, 'Status must be a string' assert len(status) >= 4, 'Status must be at least 4 characters' assert int(status[:3]), 'Status must begin with 3-digit code' assert status[3] == ' ', 'Status must have a space after code' assert type(response_headers) is list, 'Headers must be a list' if __debug__: for name,val in response_headers: assert type(name) is str, 'Header names must be strings' assert type(val) is str, 'Header values must be strings' headers_set[:] = [status, response_headers] return write if not self.multithreaded: self._app_lock.acquire() try: try: result = self.application(environ, start_response) try: for data in result: if data: write(data) if not headers_sent: write('') # in case body was empty finally: if hasattr(result, 'close'): result.close() except socket.error, e: if e[0] != errno.EPIPE: raise # Don't let EPIPE propagate beyond server finally: if not self.multithreaded: self._app_lock.release() return FCGI_REQUEST_COMPLETE, 0 def _sanitizeEnv(self, environ): """Ensure certain values are present, if required by WSGI.""" if not environ.has_key('SCRIPT_NAME'): environ['SCRIPT_NAME'] = '' if not environ.has_key('PATH_INFO'): environ['PATH_INFO'] = '' # If any of these are missing, it probably signifies a broken # server... for name,default in [('REQUEST_METHOD', 'GET'), ('SERVER_NAME', 'localhost'), ('SERVER_PORT', '80'), ('SERVER_PROTOCOL', 'HTTP/1.0')]: if not environ.has_key(name): environ['wsgi.errors'].write('%s: missing FastCGI param %s ' 'required by WSGI!\n' % (self.__class__.__name__, name)) environ[name] = default if __name__ == '__main__': def test_app(environ, start_response): """Probably not the most efficient example.""" import cgi start_response('200 OK', [('Content-Type', 'text/html')]) yield 'Hello World!\n' \ '\n' \ '

Hello World!

\n' \ '' names = environ.keys() names.sort() for name in names: yield '\n' % ( name, cgi.escape(`environ[name]`)) form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ, keep_blank_values=1) if form.list: yield '' for field in form.list: yield '\n' % ( field.name, field.value) yield '
%s%s
Form data
%s%s
\n' \ '\n' WSGIServer(test_app).run() web2py-1.99.7.orig/gluon/contrib/rss2.py0000644000175000017500000003452011724764235016520 0ustar josejose#!/usr/bin/env python # -*- coding: utf-8 -*- """PyRSS2Gen - A Python library for generating RSS 2.0 feeds.""" __name__ = 'PyRSS2Gen' __version__ = (1, 0, 0) __author__ = 'Andrew Dalke ' _generator_name = __name__ + '-' + '.'.join(map(str, __version__)) import datetime import cStringIO # Could make this the base class; will need to add 'publish' class WriteXmlMixin: def write_xml(self, outfile, encoding='iso-8859-1'): from xml.sax import saxutils handler = saxutils.XMLGenerator(outfile, encoding) handler.startDocument() self.publish(handler) handler.endDocument() def to_xml(self, encoding='iso-8859-1'): try: import cStringIO as StringIO except ImportError: import StringIO f = StringIO.StringIO() self.write_xml(f, encoding) return f.getvalue() def _element( handler, name, obj, d={}, ): if isinstance(obj, basestring) or obj is None: # special-case handling to make the API easier # to use for the common case. handler.startElement(name, d) if obj is not None: handler.characters(obj) handler.endElement(name) else: # It better know how to emit the correct XML. obj.publish(handler) def _opt_element(handler, name, obj): if obj is None: return _element(handler, name, obj) def _format_date(dt): """convert a datetime into an RFC 822 formatted date Input date must be in GMT. """ # Looks like: # Sat, 07 Sep 2002 00:00:01 GMT # Can't use strftime because that's locale dependent # # Isn't there a standard way to do this for Python? The # rfc822 and email.Utils modules assume a timestamp. The # following is based on the rfc822 module. return '%s, %02d %s %04d %02d:%02d:%02d GMT' % ( [ 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', ][dt.weekday()], dt.day, [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', ][dt.month - 1], dt.year, dt.hour, dt.minute, dt.second, ) ## # A couple simple wrapper objects for the fields which # take a simple value other than a string. class IntElement: """implements the 'publish' API for integers Takes the tag name and the integer value to publish. (Could be used for anything which uses str() to be published to text for XML.) """ element_attrs = {} def __init__(self, name, val): self.name = name self.val = val def publish(self, handler): handler.startElement(self.name, self.element_attrs) handler.characters(str(self.val)) handler.endElement(self.name) class DateElement: """implements the 'publish' API for a datetime.datetime Takes the tag name and the datetime to publish. Converts the datetime to RFC 2822 timestamp (4-digit year). """ def __init__(self, name, dt): self.name = name self.dt = dt def publish(self, handler): _element(handler, self.name, _format_date(self.dt)) # ### class Category: """Publish a category element""" def __init__(self, category, domain=None): self.category = category self.domain = domain def publish(self, handler): d = {} if self.domain is not None: d['domain'] = self.domain _element(handler, 'category', self.category, d) class Cloud: """Publish a cloud""" def __init__( self, domain, port, path, registerProcedure, protocol, ): self.domain = domain self.port = port self.path = path self.registerProcedure = registerProcedure self.protocol = protocol def publish(self, handler): _element(handler, 'cloud', None, { 'domain': self.domain, 'port': str(self.port), 'path': self.path, 'registerProcedure': self.registerProcedure, 'protocol': self.protocol, }) class Image: """Publish a channel Image""" element_attrs = {} def __init__( self, url, title, link, width=None, height=None, description=None, ): self.url = url self.title = title self.link = link self.width = width self.height = height self.description = description def publish(self, handler): handler.startElement('image', self.element_attrs) _element(handler, 'url', self.url) _element(handler, 'title', self.title) _element(handler, 'link', self.link) width = self.width if isinstance(width, int): width = IntElement('width', width) _opt_element(handler, 'width', width) height = self.height if isinstance(height, int): height = IntElement('height', height) _opt_element(handler, 'height', height) _opt_element(handler, 'description', self.description) handler.endElement('image') class Guid: """Publish a guid Defaults to being a permalink, which is the assumption if it's omitted. Hence strings are always permalinks. """ def __init__(self, guid, isPermaLink=1): self.guid = guid self.isPermaLink = isPermaLink def publish(self, handler): d = {} if self.isPermaLink: d['isPermaLink'] = 'true' else: d['isPermaLink'] = 'false' _element(handler, 'guid', self.guid, d) class TextInput: """Publish a textInput Apparently this is rarely used. """ element_attrs = {} def __init__( self, title, description, name, link, ): self.title = title self.description = description self.name = name self.link = link def publish(self, handler): handler.startElement('textInput', self.element_attrs) _element(handler, 'title', self.title) _element(handler, 'description', self.description) _element(handler, 'name', self.name) _element(handler, 'link', self.link) handler.endElement('textInput') class Enclosure: """Publish an enclosure""" def __init__( self, url, length, type, ): self.url = url self.length = length self.type = type def publish(self, handler): _element(handler, 'enclosure', None, {'url': self.url, 'length': str(self.length), 'type': self.type}) class Source: """Publish the item's original source, used by aggregators""" def __init__(self, name, url): self.name = name self.url = url def publish(self, handler): _element(handler, 'source', self.name, {'url': self.url}) class SkipHours: """Publish the skipHours This takes a list of hours, as integers. """ element_attrs = {} def __init__(self, hours): self.hours = hours def publish(self, handler): if self.hours: handler.startElement('skipHours', self.element_attrs) for hour in self.hours: _element(handler, 'hour', str(hour)) handler.endElement('skipHours') class SkipDays: """Publish the skipDays This takes a list of days as strings. """ element_attrs = {} def __init__(self, days): self.days = days def publish(self, handler): if self.days: handler.startElement('skipDays', self.element_attrs) for day in self.days: _element(handler, 'day', day) handler.endElement('skipDays') class RSS2(WriteXmlMixin): """The main RSS class. Stores the channel attributes, with the \"category\" elements under \".categories\" and the RSS items under \".items\". """ rss_attrs = {'version': '2.0'} element_attrs = {} def __init__( self, title, link, description, language=None, copyright=None, managingEditor=None, webMaster=None, pubDate=None, lastBuildDate=None, categories=None, generator=_generator_name, docs='http://blogs.law.harvard.edu/tech/rss', cloud=None, ttl=None, image=None, rating=None, textInput=None, skipHours=None, skipDays=None, items=None, ): self.title = title self.link = link self.description = description self.language = language self.copyright = copyright self.managingEditor = managingEditor self.webMaster = webMaster self.pubDate = pubDate self.lastBuildDate = lastBuildDate if categories is None: categories = [] self.categories = categories self.generator = generator self.docs = docs self.cloud = cloud self.ttl = ttl self.image = image self.rating = rating self.textInput = textInput self.skipHours = skipHours self.skipDays = skipDays if items is None: items = [] self.items = items def publish(self, handler): handler.startElement('rss', self.rss_attrs) handler.startElement('channel', self.element_attrs) _element(handler, 'title', self.title) _element(handler, 'link', self.link) _element(handler, 'description', self.description) self.publish_extensions(handler) _opt_element(handler, 'language', self.language) _opt_element(handler, 'copyright', self.copyright) _opt_element(handler, 'managingEditor', self.managingEditor) _opt_element(handler, 'webMaster', self.webMaster) pubDate = self.pubDate if isinstance(pubDate, datetime.datetime): pubDate = DateElement('pubDate', pubDate) _opt_element(handler, 'pubDate', pubDate) lastBuildDate = self.lastBuildDate if isinstance(lastBuildDate, datetime.datetime): lastBuildDate = DateElement('lastBuildDate', lastBuildDate) _opt_element(handler, 'lastBuildDate', lastBuildDate) for category in self.categories: if isinstance(category, basestring): category = Category(category) category.publish(handler) _opt_element(handler, 'generator', self.generator) _opt_element(handler, 'docs', self.docs) if self.cloud is not None: self.cloud.publish(handler) ttl = self.ttl if isinstance(self.ttl, int): ttl = IntElement('ttl', ttl) _opt_element(handler, 'tt', ttl) if self.image is not None: self.image.publish(handler) _opt_element(handler, 'rating', self.rating) if self.textInput is not None: self.textInput.publish(handler) if self.skipHours is not None: self.skipHours.publish(handler) if self.skipDays is not None: self.skipDays.publish(handler) for item in self.items: item.publish(handler) handler.endElement('channel') handler.endElement('rss') def publish_extensions(self, handler): # Derived classes can hook into this to insert # output after the three required fields. pass class RSSItem(WriteXmlMixin): """Publish an RSS Item""" element_attrs = {} def __init__( self, title=None, link=None, description=None, author=None, categories=None, comments=None, enclosure=None, guid=None, pubDate=None, source=None, ): if title is None and description is None: raise TypeError( "RSSItem must define at least one of 'title' or 'description'") self.title = title self.link = link self.description = description self.author = author if categories is None: categories = [] self.categories = categories self.comments = comments self.enclosure = enclosure self.guid = guid self.pubDate = pubDate self.source = source # It sure does get tedious typing these names three times... def publish(self, handler): handler.startElement('item', self.element_attrs) _opt_element(handler, 'title', self.title) _opt_element(handler, 'link', self.link) self.publish_extensions(handler) _opt_element(handler, 'description', self.description) _opt_element(handler, 'author', self.author) for category in self.categories: if isinstance(category, basestring): category = Category(category) category.publish(handler) _opt_element(handler, 'comments', self.comments) if self.enclosure is not None: self.enclosure.publish(handler) _opt_element(handler, 'guid', self.guid) pubDate = self.pubDate if isinstance(pubDate, datetime.datetime): pubDate = DateElement('pubDate', pubDate) _opt_element(handler, 'pubDate', pubDate) if self.source is not None: self.source.publish(handler) handler.endElement('item') def publish_extensions(self, handler): # Derived classes can hook into this to insert # output after the title and link elements pass def dumps(rss, encoding='utf-8'): s = cStringIO.StringIO() rss.write_xml(s, encoding) return s.getvalue() def test(): rss = RSS2(title='web2py feed', link='http://www.web2py.com', description='About web2py', lastBuildDate=datetime.datetime.now(), items=[RSSItem(title='web2py and PyRSS2Gen-0.0', link='http://www.web2py.com/examples/simple_examples/getrss', description='web2py can now make rss feeds!', guid=Guid('http://www.web2py.com/'), pubDate=datetime.datetime(2007, 11, 14, 10, 30))]) return dumps(rss) if __name__ == '__main__': print test() web2py-1.99.7.orig/gluon/contrib/timecollect.py0000644000175000017500000000676111724764235020141 0ustar josejose# Only Python 2.6 and up, because of NamedTuple. import time from collections import namedtuple Score = namedtuple('Score', ['tag', 'stamp']) class TimeCollector(object): def __init__(self): '''The first time stamp is created here''' self.scores = [Score(tag='start',stamp=time.clock())] def addStamp(self, description): '''Adds a new time stamp, with a description.''' self.scores.append(Score(tag=description, stamp=time.clock())) def _stampDelta(self, index1, index2): '''Private utility function to clean up this common calculation.''' return self.scores[index1].stamp - self.scores[index2].stamp def getReportItems(self, orderByCost=True): '''Returns a list of dicts. Each dict has start (ms), end (ms), delta (ms), perc (%), tag (str) ''' self.scores.append(Score(tag='finish', stamp=time.clock())) total_time = self._stampDelta(-1, 0) data = [] for i in range(1, len(self.scores)): delta = self._stampDelta(i, i-1) if abs(total_time) < 1e-6: perc = 0 else: perc = delta / total_time * 100 data.append( dict( start = self._stampDelta(i-1, 0) * 1000, end = self._stampDelta(i, 0) * 1000, delta = delta * 1000, perc = perc, tag = self.scores[i].tag ) ) if orderByCost: data.sort(key=lambda x: x['perc'], reverse=True) return data def getReportLines(self, orderByCost=True): '''Produces a report of logged time-stamps as a list of strings. if orderByCost is False, then the order of the stamps is chronological.''' data = self.getReportItems(orderByCost) headerTemplate = '%10s | %10s | %10s | %11s | %-30s' headerData = ('Start(ms)', 'End(ms)', 'Delta(ms)', 'Time Cost', 'Description') bodyTemplate = '%(start)10.0f | %(end)10.0f | %(delta)10.0f |' \ + ' %(perc)10.0f%% | %(tag)-30s' return [headerTemplate % headerData] + [bodyTemplate % d for d in data] def getReportText(self, **kwargs): return '\n'.join(self.getReportLines(**kwargs)) def restart(self): self.scores = [Score(tag='start',stamp=time.clock())] if __name__=='__main__': print('') print('Testing:') print('') # First create the collector t = TimeCollector() x = [i for i in range(1000)] # Every time some work gets done, add a stamp t.addStamp('Initialization Section') x = [i for i in range(10000)] t.addStamp('A big loop') x = [i for i in range(100000)] t.addStamp('calling builder function') # Finally, obtain the results print('') print(t.getReportText()) # If you want to measure something else in the same scope, you can # restart the collector. t.restart() x = [i for i in range(1000000)] t.addStamp('Part 2') x = [i for i in range(1000000)] t.addStamp('Cleanup') # And once again report results print('') print(t.getReportText()) t.restart() for y in range(1, 200, 20): x = [i for i in range(10000)*y] t.addStamp('Iteration when y = ' + str(y)) print('') # You can turn off ordering of results print(t.getReportText(orderByCost=False)) web2py-1.99.7.orig/gluon/contrib/qdb.py0000644000175000017500000007676011724764235016411 0ustar josejose#!/usr/bin/env python # coding:utf-8 "Queues(Pipe)-based independent remote client-server Python Debugger" __author__ = "Mariano Reingart (reingart@gmail.com)" __copyright__ = "Copyright (C) 2011 Mariano Reingart" __license__ = "LGPL 3.0" __version__ = "1.01b" # remote debugger queue-based (jsonrpc-like interface): # - bidirectional communication (request - response calls in both ways) # - request with id == null is a notification (do not send a response) # - request with a value for id is a normal call, wait response # based on idle, inspired by pythonwin implementation, taken many code from pdb import bdb import inspect import linecache import os import sys import traceback import cmd import pydoc import threading class Qdb(bdb.Bdb): "Qdb Debugger Backend" def __init__(self, pipe, redirect_stdio=True, allow_interruptions=False, skip=[__name__]): kwargs = {} if sys.version_info > (2, 7): kwargs['skip'] = skip bdb.Bdb.__init__(self, **kwargs) self.frame = None self.i = 1 # sequential RPC call id self.waiting = False self.pipe = pipe # for communication self._wait_for_mainpyfile = False self._wait_for_breakpoint = False self.mainpyfile = "" self._lineno = None # last listed line numbre # replace system standard input and output (send them thru the pipe) if redirect_stdio: sys.stdin = self sys.stdout = self sys.stderr = self if allow_interruptions: # fake breakpoint to prevent removing trace_dispatch on set_continue self.breaks[None] = [] self.allow_interruptions = allow_interruptions self.burst = 0 # do not send notifications ("burst" mode) self.params = {} # optional parameters for interaction def pull_actions(self): # receive a remote procedure call from the frontend: # returns True if action processed # None when 'run' notification is received (see 'startup') request = self.pipe.recv() if request.get("method") == 'run': return None response = {'version': '1.1', 'id': request.get('id'), 'result': None, 'error': None} try: # dispatch message (JSON RPC like) method = getattr(self, request['method']) response['result'] = method.__call__(*request['args'], **request.get('kwargs', {})) except Exception, e: response['error'] = {'code': 0, 'message': str(e)} # send the result for normal method calls, not for notifications if request.get('id'): self.pipe.send(response) return True # Override Bdb methods def trace_dispatch(self, frame, event, arg): # check for non-interaction rpc (set_breakpoint, interrupt) while self.allow_interruptions and self.pipe.poll(): self.pull_actions() # process the frame (see Bdb.trace_dispatch) if self.quitting: return # None if event == 'line': return self.dispatch_line(frame) if event == 'call': return self.dispatch_call(frame, arg) if event == 'return': return self.dispatch_return(frame, arg) if event == 'exception': return self.dispatch_exception(frame, arg) return self.trace_dispatch def user_call(self, frame, argument_list): """This method is called when there is the remote possibility that we ever need to stop in this function.""" if self._wait_for_mainpyfile or self._wait_for_breakpoint: return if self.stop_here(frame): self.interaction(frame, None) def user_line(self, frame): """This function is called when we stop or break at this line.""" if self._wait_for_mainpyfile: if (not self.canonic(frame.f_code.co_filename).startswith(self.mainpyfile) or frame.f_lineno<= 0): return self._wait_for_mainpyfile = 0 if self._wait_for_breakpoint: if not self.break_here(frame): return self._wait_for_breakpoint = 0 self.interaction(frame) def user_exception(self, frame, info): """This function is called if an exception occurs, but only if we are to stop at or just below this level.""" if self._wait_for_mainpyfile or self._wait_for_breakpoint: return extype, exvalue, trace = info # pre-process stack trace as it isn't pickeable (cannot be sent pure) msg = ''.join(traceback.format_exception(extype, exvalue, trace)) trace = traceback.extract_tb(trace) title = traceback.format_exception_only(extype, exvalue)[0] # send an Exception notification msg = {'method': 'exception', 'args': (title, extype.__name__, exvalue, trace, msg), 'id': None} self.pipe.send(msg) self.interaction(frame, info) def run(self, code, interp=None, *args, **kwargs): try: return bdb.Bdb.run(self, code, *args, **kwargs) finally: pass def runcall(self, function, interp=None, *args, **kwargs): try: self.interp = interp return bdb.Bdb.runcall(self, function, *args, **kwargs) finally: pass def _runscript(self, filename): # The script has to run in __main__ namespace (clear it) import __main__ import imp __main__.__dict__.clear() __main__.__dict__.update({"__name__" : "__main__", "__file__" : filename, "__builtins__": __builtins__, "imp" : imp, # need for run }) # avoid stopping before we reach the main script self._wait_for_mainpyfile = 1 self.mainpyfile = self.canonic(filename) self._user_requested_quit = 0 statement = 'imp.load_source("__main__", "%s")' % filename # notify and wait frontend to set initial params and breakpoints self.pipe.send({'method': 'startup', 'args': (__version__, )}) while self.pull_actions() is not None: pass self.run(statement) # General interaction function def interaction(self, frame, info=None): # chache frame locals to ensure that modifications are not overwritten self.frame_locals = frame and frame.f_locals or {} # extract current filename and line number code, lineno = frame.f_code, frame.f_lineno filename = code.co_filename basename = os.path.basename(filename) message = "%s:%s" % (basename, lineno) if code.co_name != "?": message = "%s: %s()" % (message, code.co_name) # wait user events self.waiting = True self.frame = frame try: while self.waiting: # sync_source_line() if frame and filename[:1] + filename[-1:] != "<>" and os.path.exists(filename): line = linecache.getline(filename, self.frame.f_lineno, self.frame.f_globals) else: line = "" # send the notification (debug event) - DOESN'T WAIT RESPONSE self.burst -= 1 if self.burst < 0: kwargs = {} if self.params.get('call_stack'): kwargs['call_stack'] = self.do_where() if self.params.get('environment'): kwargs['environment'] = self.do_environment() self.pipe.send({'method': 'interaction', 'id': None, 'args': (filename, self.frame.f_lineno, line), 'kwargs': kwargs}) self.pull_actions() finally: self.waiting = False self.frame = None def do_debug(self, mainpyfile=None, wait_breakpoint=1): self.reset() if not wait_breakpoint or mainpyfile: self._wait_for_mainpyfile = 1 if not mainpyfile: frame = sys._getframe().f_back mainpyfile = frame.f_code.co_filename self.mainpyfile = self.canonic(mainpyfile) self._wait_for_breakpoint = wait_breakpoint sys.settrace(self.trace_dispatch) def set_trace(self, frame=None): # start debugger interaction immediatelly if frame is None: frame = sys._getframe().f_back self._wait_for_mainpyfile = frame.f_code.co_filename self._wait_for_breakpoint = 0 bdb.Bdb.set_trace(self, frame) # Command definitions, called by interaction() def do_continue(self): self.set_continue() self.waiting = False def do_step(self): self.set_step() self.waiting = False def do_return(self): self.set_return(self.frame) self.waiting = False def do_next(self): self.set_next(self.frame) self.waiting = False def interrupt(self): self.set_step() def do_quit(self): self.set_quit() self.waiting = False def do_jump(self, lineno): arg = int(lineno) try: self.frame.f_lineno = arg return arg except ValueError, e: print '*** Jump failed:', e return False def do_list(self, arg): last = None if arg: if isinstance(arg, tuple): first, last = arg else: first = arg elif not self._lineno: first = max(1, self.frame.f_lineno - 5) else: first = self._lineno + 1 if last is None: last = first + 10 filename = self.frame.f_code.co_filename breaklist = self.get_file_breaks(filename) lines = [] for lineno in range(first, last+1): line = linecache.getline(filename, lineno, self.frame.f_globals) if not line: lines.append((filename, lineno, '', current, "\n")) break else: breakpoint = "B" if lineno in breaklist else "" current = "->" if self.frame.f_lineno == lineno else "" lines.append((filename, lineno, breakpoint, current, line)) self._lineno = lineno return lines def do_read(self, filename): return open(filename, "Ur").read() def do_set_breakpoint(self, filename, lineno, temporary=0, cond=None): return self.set_break(filename, int(lineno), temporary, cond) def do_list_breakpoint(self): breaks = [] if self.breaks: # There's at least one for bp in bdb.Breakpoint.bpbynumber: if bp: breaks.append((bp.number, bp.file, bp.line, bp.temporary, bp.enabled, bp.hits, bp.cond, )) return breaks def do_clear_breakpoint(self, filename, lineno): self.clear_break(filename, lineno) def do_clear_file_breakpoints(self, filename): self.clear_all_file_breaks(filename) def do_clear(self, arg): # required by BDB to remove temp breakpoints! err = self.clear_bpbynumber(arg) if err: print '*** DO_CLEAR failed', err def do_eval(self, arg, safe=True): ret = eval(arg, self.frame.f_globals, self.frame_locals) if safe: ret = pydoc.cram(repr(ret), 255) return ret def do_exec(self, arg): locals = self.frame_locals globals = self.frame.f_globals code = compile(arg + '\n', '', 'single') save_displayhook = sys.displayhook self.displayhook_value = None try: sys.displayhook = self.displayhook exec code in globals, locals finally: sys.displayhook = save_displayhook return self.displayhook_value def do_where(self): "print_stack_trace" stack, curindex = self.get_stack(self.frame, None) lines = [] for frame, lineno in stack: filename = frame.f_code.co_filename line = linecache.getline(filename, lineno) lines.append((filename, lineno, "", "", line, )) return lines def do_environment(self): "return current frame local and global environment" env = {'locals': {}, 'globals': {}} # converts the frame global and locals to a short text representation: if self.frame: for name, value in self.frame_locals.items(): env['locals'][name] = pydoc.cram(repr(value), 255), repr(type(value)) for name, value in self.frame.f_globals.items(): env['globals'][name] = pydoc.cram(repr(value), 20), repr(type(value)) return env def get_autocomplete_list(self, expression): "Return list of auto-completion options for expression" try: obj = self.do_eval(expression) except: return [] else: return dir(obj) def get_call_tip(self, expression): "Return list of auto-completion options for expression" try: obj = self.do_eval(expression) except Exception, e: return ('', '', str(e)) else: name = '' try: name = obj.__name__ except AttributeError: pass argspec = '' drop_self = 0 f = None try: if inspect.isbuiltin(obj): pass elif inspect.ismethod(obj): # Get the function from the object f = obj.im_func drop_self = 1 elif inspect.isclass(obj): # Get the __init__ method function for the class. if hasattr(obj, '__init__'): f = obj.__init__.im_func else: for base in object.__bases__: if hasattr(base, '__init__'): f = base.__init__.im_func break if f is not None: drop_self = 1 elif callable(obj): # use the obj as a function by default f = obj # Get the __call__ method instead. f = obj.__call__.im_func drop_self = 0 except AttributeError: pass if f: argspec = apply(inspect.formatargspec, inspect.getargspec(f)) doc = '' if callable(obj): try: doc = inspect.getdoc(obj) except: pass return (name, argspec[1:-1], doc.strip()) def set_burst(self, val): "Set burst mode -multiple command count- (shut up notifications)" self.burst = val def set_params(self, params): "Set parameters for interaction" self.params.update(params) def displayhook(self, obj): """Custom displayhook for the do_exec which prevents assignment of the _ variable in the builtins. """ self.displayhook_value = repr(obj) def reset(self): bdb.Bdb.reset(self) self.waiting = False self.frame = None def post_mortem(self, t=None): # handling the default if t is None: # sys.exc_info() returns (type, value, traceback) if an exception is # being handled, otherwise it returns None t = sys.exc_info()[2] if t is None: raise ValueError("A valid traceback must be passed if no " "exception is being handled") self.reset() # get last frame: while t is not None: frame = t.tb_frame t = t.tb_next code, lineno = frame.f_code, frame.f_lineno filename = code.co_filename line = linecache.getline(filename, lineno) #(filename, lineno, "", current, line, )} self.interaction(frame) # console file-like object emulation def readline(self): "Replacement for stdin.readline()" msg = {'method': 'readline', 'args': (), 'id': self.i} self.pipe.send(msg) msg = self.pipe.recv() self.i += 1 return msg['result'] def readlines(self): "Replacement for stdin.readlines()" lines = [] while lines[-1:] != ['\n']: lines.append(self.readline()) return lines def write(self, text): "Replacement for stdout.write()" msg = {'method': 'write', 'args': (text, ), 'id': None} self.pipe.send(msg) def writelines(self, l): map(self.write, l) def flush(self): pass def isatty(self): return 0 class QueuePipe(object): "Simulated pipe for threads (using two queues)" def __init__(self, name, in_queue, out_queue): self.__name = name self.in_queue = in_queue self.out_queue = out_queue def send(self, data): self.out_queue.put(data, block=True) def recv(self, count=None, timeout=None): data = self.in_queue.get(block=True, timeout=timeout) return data def poll(self, timeout=None): return not self.in_queue.empty() def close(self): pass class RPCError(RuntimeError): "Remote Error (not user exception)" pass class Frontend(object): "Qdb generic Frontend interface" def __init__(self, pipe): self.i = 1 self.pipe = pipe self.notifies = [] self.read_lock = threading.RLock() self.write_lock = threading.RLock() def recv(self): self.read_lock.acquire() try: return self.pipe.recv() finally: self.read_lock.release() def send(self, data): self.write_lock.acquire() try: return self.pipe.send(data) finally: self.write_lock.release() def startup(self): self.send({'method': 'run', 'args': (), 'id': None}) def interaction(self, filename, lineno, line, *kwargs): raise NotImplementedError def exception(self, title, extype, exvalue, trace, request): "Show a user_exception" raise NotImplementedError def write(self, text): "Console output (print)" raise NotImplementedError def readline(self, text): "Console input/rawinput" raise NotImplementedError def run(self): "Main method dispatcher (infinite loop)" if self.pipe: if not self.notifies: # wait for a message... request = self.recv() else: # process an asyncronus notification received earlier request = self.notifies.pop(0) return self.process_message(request) def process_message(self, request): if request: result = None if request.get("error"): # it is not supposed to get an error here # it should be raised by the method call raise RPCError(res['error']['message']) elif request.get('method') == 'interaction': self.interaction(*request.get("args"), **request.get("kwargs")) elif request.get('method') == 'startup': self.startup() elif request.get('method') == 'exception': self.exception(*request['args']) elif request.get('method') == 'write': self.write(*request.get("args")) elif request.get('method') == 'readline': result = self.readline() if result: response = {'version': '1.1', 'id': request.get('id'), 'result': result, 'error': None} self.send(response) return True def call(self, method, *args): "Actually call the remote method (inside the thread)" req = {'method': method, 'args': args, 'id': self.i} self.send(req) self.i += 1 # increment the id while 1: # wait until command acknowledge (response id match the request) res = self.recv() if 'id' not in res or not res['id']: # nested notification received (i.e. write)! process it! self.process_message(res) elif 'result' not in res: # nested request received (i.e. readline)! process it! self.process_message(res) elif long(req['id']) != long(res['id']): print "DEBUGGER wrong packet received: expecting id", req['id'], res['id'] # protocol state is unknown elif 'error' in res and res['error']: raise RPCError(res['error']['message']) else: return res['result'] def do_step(self, arg=None): "Execute the current line, stop at the first possible occasion" self.call('do_step') def do_next(self, arg=None): "Execute the current line, do not stop at function calls" self.call('do_next') def do_continue(self, arg=None): "Continue execution, only stop when a breakpoint is encountered." self.call('do_continue') def do_return(self, arg=None): "Continue execution until the current function returns" self.call('do_return') def do_jump(self, arg): "Set the next line that will be executed." res = self.call('do_jump', arg) print res def do_where(self, arg=None): "Print a stack trace, with the most recent frame at the bottom." return self.call('do_where') def do_quit(self, arg=None): "Quit from the debugger. The program being executed is aborted." self.call('do_quit') def do_eval(self, expr): "Inspect the value of the expression" return self.call('do_eval', expr) def do_environment(self): "List all the locals and globals variables (string representation)" return self.call('do_environment') def do_list(self, arg=None): "List source code for the current file" return self.call('do_list', arg) def do_read(self, filename): "Read and send a local filename" return self.call('do_read', filename) def do_set_breakpoint(self, filename, lineno, temporary=0, cond=None): "Set a breakpoint at filename:breakpoint" self.call('do_set_breakpoint', filename, lineno, temporary, cond) def do_clear_breakpoint(self, filename, lineno): "Remove a breakpoint at filename:breakpoint" self.call('do_clear_breakpoint', filename, lineno) def do_clear_file_breakpoints(self, filename): "Remove all breakpoints at filename" self.call('do_clear_breakpoints', filename, lineno) def do_list_breakpoint(self): "List all breakpoints" return self.call('do_list_breakpoint') def do_exec(self, statement): return self.call('do_exec', statement) def get_autocomplete_list(self, expression): return self.call('get_autocomplete_list', expression) def get_call_tip(self, expression): return self.call('get_call_tip', expression) def interrupt(self): "Immediately stop at the first possible occasion (outside interaction)" # this is a notification!, do not expect a response req = {'method': 'interrupt', 'args': ()} self.send(req) def set_burst(self, value): req = {'method': 'set_burst', 'args': (value, )} self.send(req) def set_params(self, params): req = {'method': 'set_params', 'args': (params, )} self.send(req) class Cli(Frontend, cmd.Cmd): "Qdb Front-end command line interface" def __init__(self, pipe, completekey='tab', stdin=None, stdout=None, skip=None): cmd.Cmd.__init__(self, completekey, stdin, stdout) Frontend.__init__(self, pipe) # redefine Frontend methods: def run(self): while 1: try: Frontend.run(self) except KeyboardInterrupt: print "Interupting..." self.interrupt() def interaction(self, filename, lineno, line): print "> %s(%d)\n-> %s" % (filename, lineno, line), self.filename = filename self.cmdloop() def exception(self, title, extype, exvalue, trace, request): print "=" * 80 print "Exception", title print request print "-" * 80 def write(self, text): print text, def readline(self): return raw_input() def postcmd(self, stop, line): return not line.startswith("h") # stop do_h = cmd.Cmd.do_help do_s = Frontend.do_step do_n = Frontend.do_next do_c = Frontend.do_continue do_r = Frontend.do_return do_j = Frontend.do_jump do_q = Frontend.do_quit def do_eval(self, args): "Inspect the value of the expression" print Frontend.do_eval(self, args) def do_list(self, args): "List source code for the current file" lines = Frontend.do_list(self, eval(args, {}, {}) if args else None) self.print_lines(lines) def do_where(self, args): "Print a stack trace, with the most recent frame at the bottom." lines = Frontend.do_where(self) self.print_lines(lines) def do_environment(self, args=None): env = Frontend.do_environment(self) for key in env: print "=" * 78 print key.capitalize() print "-" * 78 for name, value in env[key].items(): print "%-12s = %s" % (name, value) def do_list_breakpoint(self, arg=None): "List all breakpoints" breaks = Frontend.do_list_breakpoint(self) print "Num File Line Temp Enab Hits Cond" for bp in breaks: print '%-4d%-30s%4d %4s %4s %4d %s' % bp print def do_set_breakpoint(self, arg): "Set a breakpoint at filename:breakpoint" if arg: if ':' in arg: args = arg.split(":") else: args = (self.filename, arg) Frontend.do_set_breakpoint(self, *args) else: self.do_list_breakpoint() do_b = do_set_breakpoint do_l = do_list do_p = do_eval do_w = do_where do_e = do_environment def default(self, line): "Default command" if line[:1] == '!': print self.do_exec(line[1:]) else: print "*** Unknown command: ", line def print_lines(self, lines): for filename, lineno, bp, current, source in lines: print "%s:%4d%s%s\t%s" % (filename, lineno, bp, current, source), print def test(): def f(pipe): print "creating debugger" qdb = Qdb(pipe=pipe, redirect_stdio=False) print "set trace" my_var = "Mariano!" qdb.set_trace() print "hello world!" print "good by!" saraza if '--process' in sys.argv: from multiprocessing import Process, Pipe pipe, child_conn = Pipe() p = Process(target=f, args=(child_conn,)) else: from threading import Thread from Queue import Queue parent_queue, child_queue = Queue(), Queue() front_conn = QueuePipe("parent", parent_queue, child_queue) child_conn = QueuePipe("child", child_queue, parent_queue) p = Thread(target=f, args=(child_conn,)) p.start() import time class Test(Frontend): def interaction(self, *args): print "interaction!", args def exception(self, *args): print "exception", args #raise RuntimeError("exception %s" % repr(args)) qdb = Test(front_conn) time.sleep(5) while 1: print "running..." Frontend.run(qdb) time.sleep(1) print "do_next" qdb.do_next() p.join() def connect(host="localhost", port=6000, authkey='secret password'): "Connect to a running debugger backend" address = (host, port) from multiprocessing.connection import Client print "qdb debugger fronted: waiting for connection to", address conn = Client(address, authkey=authkey) try: Cli(conn).run() except EOFError: pass finally: conn.close() def main(host='localhost', port=6000, authkey='secret password'): "Debug a script and accept a remote frontend" if not sys.argv[1:] or sys.argv[1] in ("--help", "-h"): print "usage: pdb.py scriptfile [arg] ..." sys.exit(2) mainpyfile = sys.argv[1] # Get script filename if not os.path.exists(mainpyfile): print 'Error:', mainpyfile, 'does not exist' sys.exit(1) del sys.argv[0] # Hide "pdb.py" from argument list # Replace pdb's dir with script's dir in front of module search path. sys.path[0] = os.path.dirname(mainpyfile) from multiprocessing.connection import Listener address = (host, port) # family is deduced to be 'AF_INET' listener = Listener(address, authkey=authkey) print "qdb debugger backend: waiting for connection at", address conn = listener.accept() print 'qdb debugger backend: connected to', listener.last_accepted # create the backend qdb = Qdb(conn, redirect_stdio=True, allow_interruptions=True) try: print "running", mainpyfile qdb._runscript(mainpyfile) print "The program finished" except SystemExit: # In most cases SystemExit does not warrant a post-mortem session. print "The program exited via sys.exit(). Exit status: ", print sys.exc_info()[1] raise except: raise conn.close() listener.close() qdb = None def set_trace(host='localhost', port=6000, authkey='secret password'): "Simplified interface to debug running programs" global qdb, listener, conn from multiprocessing.connection import Listener # only create it if not currently instantiated if not qdb: address = (host, port) # family is deduced to be 'AF_INET' listener = Listener(address, authkey=authkey) conn = listener.accept() # create the backend qdb = Qdb(conn) # start debugger backend: qdb.set_trace() def quit(): "Remove trace and quit" global qdb, listener, conn if qdb: sys.settrace(None) qdb = None if conn: conn.close() conn = None if listener: listener.close() listener = None if __name__ == '__main__': # When invoked as main program: if '--test' in sys.argv: test() # Check environment for configuration parameters: kwargs = {} for param in 'host', 'port', 'authkey': if 'QDB_%s' % param.upper() in os.environ: kwargs[param] = os.environ['QDB_%s' % param.upper()] if not sys.argv[1:]: # connect to a remote debbuger connect(**kwargs) else: # start the debugger on a script # reimport as global __main__ namespace is destroyed import qdb qdb.main(**kwargs) web2py-1.99.7.orig/gluon/contrib/populate.py0000644000175000017500000270472211724764235017472 0ustar josejoseimport re, cPickle, random, datetime IUP = {'shoebill':{'a':1,'187':1},'trout-like':{'parr':1},'fig.':{'19':1},'mcintosh.':{'the':1,'illustration':1},'chiasmodon':{'niger':2},'yellow':{'and':4,'giant':1,'green':2,'red':1,'spots':1},'four':{'brightly':1,'hundred':1,'haunts':1,'feet':1,'solutions':2,'hours.':1,'things':1,'long':1,'.':2,'legs':1,'inches':4,'thousand':1,'million':1,'pairs':2,'hours':1,'satellites':1,'tufts':1,'great':1,'main':1,'of':1,'months':1,'days':1,'times':4,'volumes':1,'inches.':1,'frilled':2,'or':3},'snapping-blades':{'the':1},'aegir':{'on':4},'hanging':{'down':1,'on':2},'bird--evidences':{'of':1},'canes':{'venatici':1},'inheritance.':{'looking':1},'electricity':{'and':5,'belong':1,'is':4,'rotating':2,'held':1,'as':1,'sec':1,'in':1,'yet':1,'predominates':1,'from':1,'there':1,'.':9,'to':1,'which':4,';':4,'has':1,'we':1,'that':1,'here':1,'i.e':1,'like':1,'repel':1,'the':2,'or':1,'attracting':1},'similarity':{'of':3,'between':1},'sunlit':{'side':1},'superficially':{'indistinguishable':1,'like':1},'out-breeding':{'among':1,'when':1,'exogamy':1},'lord':{'popular':1,'kelvin':5,'avebury':1},'non-intelligent':{'experiments':1},'flicking':{'out':1},'meadows':{'and':2,'an':1},'sinking':{'down':2,'according':1,'in':1},'digit':{'of':1,'well':1},'co-operation':{'of':2},'oceans':{'lie':1,'of':1,'there':1,'are':1,'goes':1,'must':1},'pigment':{'and':1,'is':2,'.':1,'as':1,'which':1,';':1},'figs':{'.':1},'fingers.':{'but':1},'experimentally':{'on':1},'bringing':{'of':1,'about':1,'the':2},'elevations':{'and':1,'of':1},'meadow.':{'in':1},'internally':{'hot':1},'whitman':{'says':1,'took':1},'colour--the':{'result':2},'stars.':{'yet':1},'persisted':{'as':1,'until':1},'chameleons':{'the':1,'.':1},'intensification':{'of':1},'succession':{'giving':1,'of':5,'the':1,'has':1,'.':1},'tube--the':{'walls':1},'ultra-violet':{'and':1,'light':1,'waves--which':1,'or':1,'waves':1},'straight':{'ahead':1,'drop':1,'lines':1,'down':1,'through':1,'in':1,'path':2,'line':1,'legs':1,'along':1},'spiders':{'about':1,'were':1,'it':1,'.':1,'scorpions':1,'are':1,'have':1,'in':1},'specially':{'protected':1,'adapted':1},'symmetry.':{'illustration':1},'stiffens':{'.':1},'270':{'a':1,'silk':1,'reproduced':1},'271':{'electrical':1,'from':1},'second':{'and':5,'layer':1,'when':1,'year':1,'extinction':1,'yet':1,'any':1,'group':1,'would':3,'there':1,'question':2,'.':10,'to':1,'millennium':1,'which':1,';':1,'then':1,'we':1,'advantage':1,'that':1,'class':1,'screen.':1,'interglacial':1,'every':1,'longest':1,'not':1,'cousin':1,'copy':1,'opportunity':1,'by':1,'a':1,'great':1,'these':1,'of':1,'or':1,'preparation':1,'printing':1,'error':1,'position':1,'the':2,'chapter':1,'photograph':2},'attended':{'the':1,'by':2},'274':{'photo':1},'275':{'from':1},'278':{'hours':1,'photo':1},'279':{'rotating':1,'the':2},'inanimate':{'world':1},'dormancy':{'.':1},'errors':{'a':1,'in':1},'semicircular':{'canals':1},'phalangers':{'and':1,'flying':1},'thunder':{'and':1,'means':1},'nature.':{'the':1,'typical':1,'what':1,'illustration':1,'one':1},'contributed':{'every':1},'fingers':{'and':6,'to':1,';':1,'2':1,'knocking':1},'lowliness':{'.':1},'fossil':{'horses':1,'remains':2,'series':1,'forms':2,'scorpions':1,'of':2,'species':1},'increasing':{'control--a':1,'temperature':1,'facility':1,'intelligence':1,'complexity':2,'fullness':1,'the':1,'with':1,'day':1},'inducement':{'many':1},'surface--the':{'photosphere--is':1},'chins':{'and':1},'error':{'a':1,'we':1,'is':1,'here':1,'method':2,'to':1,';':1,'or':1,'must':1},'here':{'and':5,'says':1,'is':5,'within':1,'some':1,'it':1,'anticipating':1,'go':1,'seen':1,'again':4,'for':1,'also':1,'rather':1,'concerned':1,'since':1,'.':1,'to':3,'only':2,'cockchafers':1,'you':1,'was':2,'refer':1,'we':2,'let':1,'with':1,'nor':1,'a':1,'of':1,'spontaneously':1,'the':2,'stimulating':1,'are':1},'atoms':{'and':10,'being':1,'is':1,'an':1,'270':1,'whilst':1,'exist':1,'are':4,'have':1,'in':3,'seem':1,'seek':1,'containing':1,'indivisible':1,'from':1,'appear':1,'would':1,'with':1,'had':1,'.':5,'which':2,'got':1,';':2,'has':1,'was':1,'into':1,'do':2,'form':1,'were':4,'but':1,'atoms':2,'break':1,'most':1,'they':1,'put':1,'come':1,'themselves':1,'he':1,'for':1,'of':33,'enter':1,'the':2,'first':1,'at':1},'reported':{'to':1,'in':1,'that':1},'china':{'and':1},'evolutionist':{'s':1,'ideas':1,'suggestion':1},'fire.':{'chief':1,'saturn':1},'substance':{'in':1,'both':1,'from':2,'would':1,'is':1,'after':1,'glowing':1,'reaches':1,'.':3,'will':1,'to':1,'as':2,'but':1,'which':2,'were':1,'known':1,'has':1,'by':1},'contribute.':{'another':1},'k':{'.':1},'second--more':{'than':1},'reports':{'performances':1},'controversy':{'as':1},'forbes':{'observed':1,'tells':1,'history':1},'symmetrical':{'fishes.':1},'heidelbergensis':{'discovered':1},'appropriately':{'giants':1},'divide':{'a':1,'in':1},'owed':{'to':1},'explained':{'on':1,'because':1,'presently':1,'that':1,'later':1,'in':4,'by':1},'lengthen':{'the':1},'replace':{'the':4,'it':1},'brought':{'about':3,'to':3,'into':2,'up':1,'us':1,'their':1,'outside':1,'near':2,'through':1,'together':1,'in':1,'the':1,'its':1},'larger.':{'6':1},'female.':{'the':1},'obligation':{'works':1},'unit':{'body':1,'of':1,'for':1,'areas':1},'disproved--e.g':{'.':1},'spoke':{'of':3},'temperature.':{'if':1},'1892':{'.':1},'occupying':{'a':1},'vol':{'.':4},'untie':{'knots':1},'therefore':{'there':1,'is':2,'it':1,'one':2,'as':1,'are':2,'have':1,'even':1,'little':1,'since':1,'to':1,'survey':1,'means':1,'more':1,'form':1,'that':7,'imagine':1,'not':1,'conspicuous':1,'must':1,'a':2,'always':1,'so':1,'contain':1,'the':1,'called':1},'strike':{'a':1,'to':1,'the':2},'fossiliferous':{'beds':1},'until':{'comparatively':1,'some':1,'it':7,'one':1,'discovered':1,'at':3,'in':1,'its':2,'there':1,'when':1,'finally':1,'we':1,'recently':1,'that':1,'they':5,'such':1,'inconceivable':1,'a':3,'both':1,'i':1,'near':1,'the':3,'once':1},'skill.':{'illustration':1},'females':{'go':1,'the':1,'who':1,'use':1},'9.':{'instinctive':1},'successful':{'hunting':1,'accomplishment':2,'.':1,'notably':1,'race':1,'animal':1,'in':1,'performance':1,';':2,'class':1},'brings':{'about':1,'his':1,'this':1,'them':1,'us':1,'obvious':1,'the':1},'whirling':{'nebulae.':1,'gaseous':1,'streams':1,'motions':1,'electrons':1,'ring':1,'round':1},'glass':{'and':1,'on':1,'by':1,'blown':1,'wall':1,'of':1,'tube':1,'jar':1,'prism':3,'vulcanite':1,'.':2,'walls':1,'vibrate':1,'prism--a':1,'the':2,'tubes':1,'model':2},'inwards':{'each':1},'91':{'photo':1,'after':1,'pictorial':1},'90':{'photo':1,'from':1,'days':2,'per':1},'midst':{'of':1},'92':{'830':2,'as':1,'fossil':1},'95':{'photo':1,'from':1},'immature':{'sperm':1,'egg':1,'larval':1},'circumstances':{'and':1,'of':1,'it':1,'however':1,'indicate':1,'as':1},'locked':{'up':3},'mimickers':{'do':1,'live':1,'though':1,'survive--although':1},'pursue':{'further':1,'the':1},'accomplishment':{'of':2,'would':1},'plunged':{'in':1},'tell-tale':{'evidence':2},'temperatures':{'and':2,'as':1,'enormously':1,'but':1,';':1},'concepts':{'differ':1,'or':1},'plunges':{'into':1},'example':{'a':2,'passes':1,'of':5,'is':1,'three':1,'.':1,'the':1,'out':1},'type.':{'there':1,'steps':1,'it':1,'illustration':1},'encouragement.':{'evidences':1},'nitrates':{'which':1},'organized':{'under':1},'shore.':{'the':1},'dragons':{'and':1,'a':1,'for':1,'stalking':1,'which':1,'the':1,'or':1},'glued':{'to':1,'together':2},'caution':{'is':2,':':1,'in':2},'kingdoms':{'to':1},'want':{'to':1,'that':1},'oil-sheet':{'by':1},'absolute':{'cold':1,'calm':1,'zero':2},'disappearing.':{'thus':1},'travel':{'from':2,'for':1,'that':2,'fifteen':1,'is':1,'it':1,'.':2,'through':1,'at':3,'in':3,'rapidly':1,'with':1,'by':1,'round':1},'drying':{'up':1},'feature':{'of':2,'is':1,'in':2,'that':1},'machine':{'and':1,'readable':1,'which':1,'in':1},'how':{'beautiful':1,'this':2,'all':2,'useful':1,'striking':1,'vertebrates':1,'abundantly':1,'it':6,'long':4,'in':1,'curious':1,'your':1,'their':2,'thoroughly':1,'sunlight':1,'.':1,'to':9,'much':1,'--all':1,'he':1,'admirable':1,'is':1,'whipped':1,'noble':1,'we':4,'express':1,'do':4,'men':1,'but':1,'soon':1,'magnetism':1,'important':1,'infinite':1,'man':1,'a':1,'like':2,'these':2,'many':4,'could':2,'well':1,'swiftly':1,'did':1,'electrons':1,'can':1,'the':14,'professor':1,'are':2},'krait':{':':2,'should':1},'hop':{'.':1},'significance':{'of':3,'is':1,'.':1,'was':1,'that':1},'mueller':{'where':1},'uselessness':{'of':1},'utilise':{'their':1,'the':7,'atomic':1,'directly':1},'ptarmigan':{'very':1,'moults':1},'diagram':{'a':1,'and':1,'illustrating':3,'illustrates':2,'of':10,'showing':3,'.':4,'fig':2,'shows':2,'is':3,'constructed':1},'dinosaurs':{'and':1,'it':1,'which':1,'in':1},'wrong':{'and':1,'side':1,'though':1},'lattice-work':{'than':1,'but':1},'destined':{'to':3,'within':1},'twined':{'round':1},'pearl-bearing':{'river-mussels':1},'factor.':{'we':1},'types':{'and':2,'we':1,'like':2,'especially':1,'that':2,'of':10,'it':1,'.':2,'are':3,'which':3,'suited':1,'the':1,'has':1,'nearly':1},'calves':{'young':1},'effective':{'and':1,'substitutes':1,'ways':1,'camouflaging':1,'flying':1,'.':1,'action':1,';':1,'response':1},'endeavoured':{'instead':1},'attracts':{'every':1},'headquarters':{'of':1},'specks':{'faintly':1},'keeps':{'the':1,'as':1,'an':1},'back--till':{'we':1},'wing':{'and':1,'remains':1,'of':4,'is':3,'.':3,'while':1,'action':1,'has':1,'was':2},'wind':{'and':3,'tugs':1,'from':1,'around':1,'that':1,'pay':1,'.':1,'falls':1},'wine':{'decanter':1},'ovule':{'so':1},'restriction':{'attendant':1},'school.':{'as':1},'effect.':{'the':1,'illustration':1},'vary':{'a':1,'enormously':1,'.':1},'halfpennies':{'.':1},'microbe':{'or':1},'fore-limbs':{'and':3,'a':1,'emerging':1,'of':1},'elevated':{'into':1},'rewarded':{'the':2},'throne.':{'illustration':1},'wrought':{'on':1,'out':2,'in':1},'admirably':{'suited':1},'matures':{'or':1},'fit':{'and':2,'effected':1,'variations':1,'will':1,'to':2,'beautiful':1,'lasts':1,'the':1},'bodies--evolution':{'of':2},'heretofore':{'unimagined':1},'fix':{'dates':1,'after':1,'the':1},'occupations':{'and':1,'whether':1},'survivors':{'in':1},'woolly-haired':{'africans':1,'african':1},'anticipations':{'at':1},'fig':{'4':1,'.':36},'nobler':{'more':1},'hidden':{'disc':1,'from':1,'secrets.':1,'or':1},'alpine':{'heights':1},'admirable':{'indeed':1,'is':1,'adjustment':1,'in':1},'easier':{'to':4,'for':1},'bristle':{'.':1},'bolton.':{'the':3,'orang-utan':1,'chimpanzee':1,'cassowary':1},'f.r.s':{'.':1},'effects':{'and':1,'on':1,'from':1,'of':2,'due':1,'.':1,'are':1},'stars;':{'their':1},'coal-fields':{'is':1,'can':1},'devices.':{'vii':1,'illustration':1},'prize':{'is':1},'represents':{'a':2,'the':4,'an':1},'educable.':{'illustration':1},'humming-birds':{'we':1},'arrow':{'round':1,'shows':1},'obdurate':{'solid':1},'burial':{'customs':1},'financial':{'support':1},'telescope':{'and':1,'because':1,'show':1,'developed':1,'is':4,'it':1,'depends':1,'at':1,'in':1,'takes':1,'49':1,'remains':1,'.':3,':':1,'was':1,'brings':1,'construction':2,'with':1,'of':1,'mount':2,'weigh':1,'the':2},'garment':{'of':5,'by':1,'.':1},'spider':{'called':1,'203':1,'has':1,'that':1,'may':2,'dr':1,'ascends':1,'after':1,'reaches':1,'sunning':2,'jerks':1,'to':4,'s':1,'which':1,'--brushes':1,'with':1,'is':1,'ornithoscatoides':1},'parasites':{'a':1,'have':1,'may':1,'casual':1,'as':1,'are':2,'which':1,'or':1,'often':1},'armour--the':{'sea-urchin':1},'contracting':{'striped':1,'muscles':1,'mass':1,'the':1,'its':1},'depositing':{'eggs':1},'laboratory':{'cambridge':1,'would':1,'had':1,'but':1,'.':1,'at':1,'in':1,';':1,'or':1},'nerve-cell':{'s.c.':1,'m.c.':1,'a.c.':1},'message':{'travels':3,'is':2,'reaches':1},'borne':{'on':1,'just':1,'away':1,'in':1,'usually':1,'by':2,'out':1},'speed.':{'in':1},'excepting':{'the':1},'ice-sheets':{'retreated':1},'unrelated':{'types':1},'adapt':{'itself':1},'centauri':{'4.29':1,'estimated':1},'foundation':{'and':3,'web':1,'makes':1,'is':2,'as':1,'.':3,'project':1,'how':1,'s':3,'at':1,'in':1,'the':5,'was':1,'or':1,'are':1,'anyone':1},'stamping':{'a':1},'assured':{'that':1},'waddle':{'130':1},'strata':{'of':3,'is':1,'when':1,'contained':1,'have':1,';':1,'with':1},'solution':{'containing':1,'that':1,'may':1,'of':4,'within':1,'when':1,'has':1,'was':1},'sensory':{'nerve-fibre':2,'nerve-cell':1,'equipment':1,'nerve-cells':1,'stimulus':1,'fibres':1,'alertness':1},'born.':{'but':1},'crowned':{'with':1},'estimate':{'and':1,'obtained':1,'being':1,'how':1,'this':1,'of':2,'its':1,'these':1,'by':1},'universally':{'true':1},'enormous':{'distances':2,'energy':1,'number':1,'disc-like':1,'pressure--2-1':1,'size':1,'infantile':2,'vibration':1,'speed':1,'depths.':1,'amount':2,'increase':1,'pressures':1,'role':1,'store':1,'dilatable':1,'pressure':1,'jets':1,'velocities':1,'length':1,'activity':1,'velocity':1,'the':1},'bates':{'tells':1,'but':1},'exposing':{'it':1},'merychippus':{';':1,'miocene':1},'shelves':{'of':1},'hind-limbs':{'of':2},'perhaps.':{'moreover':1},'elements--we':{'have':1},'disturbed':{'development':1,'and':1,'.':2},'tempting':{'but':1,'one':1},'ineffectively':{'or':1},'speeds':{'to':1},'appreciable':{'atmosphere':1},'gas-bubbles':{'and':1,'in':1},'wasp':{'or':1,'beetle':2},'subtlety':{'in':1,'that':1},'maladies':{'to':1},'channels':{'or':1},'spinning':{'slowly':1,'threads':1,'round':1},'179':{'a':1,'photograph':1,'reproduced':1},'178':{'photo':1,'after':1},'likes.':{'illustration':1},'175':{'after':1},'174':{'after':1},'flagella':{'.':1},'172':{'000':1,'piltdown':1},'171':{'reproduced':1},'170':{'after':1,'from':1},'bitten':{'by':1},'service':{'to':1,'in':2,'abroad':1,'.':1},'similarly':{'for':1,'suggest':1,'when':1,'our':1,'the':3,'adapted':1,'out':1},'cooling':{'and':1,'white-hot':1,'of':3,'metal':1,'but':1,'down':3,'earth':1,'the':1},'needed':{'.':1,'for':1,'in':1},'master':{'of':1,'the':2,'different':1},'blossoms':{'.':1},'gilbert':{'white':1},'legs':{'and':4,'on':1,'free':1,'.':3,'to':1,'indents':1,'so':1,'are':1,'out':1},'genesis':{'of':1,'.':1},'treasure-house':{'of':1},'listen':{'it':1},'rewards':{'to':1},'fibrous':{'husk':1},'wisdom':{'of':1,'in':1},'egg-producer':{'.':1},'motionless':{'on':1,'at':1,'that':1},'predictable':{'and':1},'collaterals':{'hundreds':1,'.':1},'scarborough':{'and':2},'positively':{'say':2,'that':1,'into':1,'charged':1},'insect-visitors':{';':1},'surer':{'by':1},'showed':{'a':1,'on':1,'great':1,'for':1,'that':9,'is':1,'how':2,'simian':1,'the':1},'miniatures':{'of':1},'tree':{'and':2,'217':1,'notice':1,'of':5,'into':1,'struggles':1,'but':1,'.':2,'to':3,'near':1,'i.e':1,'with':1,'is':2,'before':1},'likely':{'to':5,'that':1,'unless':1,'it':1,'however':1},'idly':{'on':1,'why':1},'project':{'gutenberg-tm':56,'gutenberg':29,'gutenberg:':1,'gutenberg-tm.':1,'from':1},'fly-trap':{'77':1,'when':1,'one':1},'feeling':{'and':2,'of':1,'is':1,'.':1,'their':2,'things':1,'or':1},'acquisition':{'almost':1,'of':1,'made':1,'associated':1,'by':1},'life--the':{'first':2},'groaning':{'and':3},'objects':{'and':1,'do':1,'for':1,'very':1,'but':1,'.':2,'271':1,'take':1,'in':2},'similitude':{'of':2},'oxygen-capture':{';':1},'spectrum':{'and':2,'rays':1,'provides':1,'of':4,'is':2,'emitted':1,'analysis':2,'.':3,'will':1,'as':1,'are':1,'have':1,'the':2},'controversy.':{'in':1},'antagonistic':{'substances':1},'well.':{'illustration':1},'constricted':{'off':1},'oxygen-combustion':{'the':1},'dozen':{'eggs':1,'classes':1,'by':1,'years':1},'affairs':{'on':1,';':1,'would':1},'wholesome':{'superstitions':1},'yolk-forming':{'and':1},'person':{'often':1,'you':1,'or':3,'can':1},'eagerly':{'following':1},'metallic':{'vapours':1},'toothed':{'whales':1,'bird':2,'birds':1},'australia--all':{'sometimes':1},'absorbed':{'but':1,'so':1,'in':1,';':1,'with':1,'by':2},'doors':{'and':1,'of':1,'.':1,'depositing':1,'which':1,'were':1},'season':{'209':1,'it':1,'illustration':1},'concedes':{'the':1},'rhodesia':{'very':1,'178':1},'shall':{'be':2,'we':1,'deal':1,'give':1,'predict':1,'explain':2,'never':1,'content':1,'see':11,'have':1,'not':1,'see.':2,'find':2,'refer':1},'screwing':{'the':1,'it':1},'object':{'and':1,'we':1,'of':2,'.':1,'to':1,'too':1,'in':2,'drawn':1},'diminishing':{'in':1},'victoria':{'b':1,'british':2},'gill-cavity':{'and':1},'mouth':{'and':5,'of':1,'is':1,'there':2,'.':6,'allied':1,'are':1,'in':1,'the':1,'where':1,'into':1,'came':1},'long.':{'in':1},'letter':{'is':1,'there':1,'o':2},'drought':{'and':2,'is':1,'frost':1,'by':1,'extremes':1},'hide-and-seek':{'game':1},'difficulties.':{'illustration':1},'expound':{'their':1},'redistribution':{'is':1},'episode':{'in':1},'available.':{'many':1},'professor':{'holmes':2,'and':1,'thomas':2,'j':3,'tacchini':1,'rayleigh':1,'michael':1,'frederick':1,'chamberlin':1,'yerkes':3,'hickson':1,'starling':1,'lull':3,'church':2,'soddy':3,'eddington':4,'sir':8,'le':1,'royal':1,'young':1,'pickering':1,'soddy.':1,'john':1,'gamble':2,'soddy--as':1,'oscar':1,'perrin':1,'william':1,'flinders':1,'buller':1,'wood':1,'thorndike':3,'e':2,'whitman':1,'h':2,'later':1,'poulton':1,'l':2,'curie':1,'s':1,'r':6,'bayliss':1,'w':3,'of':3,'schuchert':2,'percival':2,'left':1,'schwalbe':1,'lloyd':2},'nineteenth':{'century.':2,'century':6},'mating':{'.':1},'incomplete':{'inaccurate':1,'.':1},'marvel':{'that':1},'hobhouse':{'has':1,'had':1},'insects':{'and':5,'belonging':1,'related':1,'extinct':1,'spring-tails':1,'pterodactyls':1,'whose':1,'by':2,'appear':1,'perhaps':1,'divided':1,'.':3,'to':1,'only':1,'which':1,'birds':1,'we':1,'that':2,'rest':1,'such':1,'with':1,'than':1,'on':1,'made':1,'like':1,'could':1,'carries':1,'can':1,'the':2,'where':1,'spend':1},'sea-snakes':{'such':1},'feather-stars':{'on':1},'apace':{'there':1},'touches':{'the':1,'some':1,'one':1},'flagellates--the':{'originators':1},'methods--one':{'using':1},'shuffling':{'a':1,'the':1},'quaint':{'insects':1,'lop-eared':1,'ways':1,'explorer':1,'creatures':2},'unrest.':{'many':1},'character':{'of':1,'set':1,'except':1},'bush':{'in':1},'touched':{'it.':1,'on':1,'by':1},'rich':{'repertory':1,'inheritance':1,'area':1,'seaweed':1,'in':4},'rice':{';':1},'plate':{'and':2,'reveals':1,'may':1,'of':3,'is':1,'there':1,'however':1,'.':4,'underneath':1,'to':1,'goes':1,';':1,'has':1,'holder':1},'well-advanced':{'stage':1},'wide':{'of':1,'range':2,'spread':1,'departures':1,'apart':1},'foremost':{'living':1},'pocket':{'and':1,'of':1,'is':1},'insect.':{'masking':1},'altogether':{'and':1,'we':1,'from':1,'obscure.':1,'there':1,'.':1,'lies':1,'inattentive.':1,'extinct':1,'the':1,'apart':1},'tips':{'of':1,'form':1},'transmissible.':{'given':1},'societies':{'.':1},'greens':{'and':1},'dipnoi':{'which':1},'patch':{'of':2,'which':1},'men.':{'we':1,'the':1},'fitly':{'use':1},'release':{'date':1,'harness':1},'them.':{'1':1,'we':1,'clodd':1},'hasten':{'matters':1,'however':1},'lesson.':{'we':1},'circling':{'eddies':1,'round':1},'protists':{'the':1,'which':1},'evolutionism':{'with':1},'traverse':{'matter':1,'we':1},'fair':{'to':1},'radium':{'and':6,'discharges':1,'270':1,'as':1,'sec':1,'in':1,'salts':1,'passes':2,'rays':8,'began':1,'that':1,'when':1,'.':2,'to':1,'rays.':1,'john':2,'was':2,'generates':1,'captivated':1,'may':1,'now':1,'a':1,'implied':1,'the':2,'or':2},'niche':{'of':2,'among':1},'radius':{'and':1},'result':{'we':1,'of':10,'is':1,'when':1,'.':1,'will':4,'as':1,'strange':1,'which':1,'in':1,'not':1,'was':2},'fail':{'to':4},'nocturnal':{'birds':1,'animal':1},'skulls':{'high':1,'of':1,'.':1},'best':{'methods':1,'for':1,'of':2,'explanation':1,'.':1,'to':1,'while':1,'suited':1,'thermometer':1,'illustrations':1,'i.e':1,'has':1,'dress':1,'conductors.':1},'oceanic':{'islands':1},'rings':{'and':1,'from':1,'of':1,'mighty':1,'are':1,'in':1,'the':1,'round':1},'frond-like':{'tassels':1,'tags':1},'stealthy':{';':1,'stalking':1},'pressures':{'the':1,'that':1},'score':{'of':1,'but':1,'which':1},'conceptual':{'as':1,'inference':1,'inference--or':1},'propagated':{';':1},'circulating':{'at':1,'the':1,'round':1,'as':1,'in':1},'glasgow':{'and':1},'magnesium':{';':1},'preserve':{'free':1},'claws':{'on':3,'especially':1,'.':1},'men':{'and':2,'indicated':1,'it':1,'as':1,'at':1,'have':1,'oftener':1,'still':1,'ancient':1,'.':5,'to':1,'that--':1,'who':4,'proving':1,'but':2,'arose':1,'with':1,'like':2,'of':19,'s':1,'so':1,'were':1,'the':1,'powers':1,'or':1},'extend':{'far':1,'our':1,'the':1,'towards':1,'outwards':1},'nature':{'and':3,'because':1,'less':1,'is':1,'some':1,'depends':1,'acts':1,'draws':1,'would':1,'there':1,'had':1,'.':5,'which':1,'messrs':2,'drawn':1,';':1,'has':2,'was':3,'more':1,'never':1,'but':1,'includes':1,'november':1,'the':1,'a':1,'about':1,'of':28,'s':8,'ninety-two':1,'messrs.':2,'or':1,'involves':2},'blood-containing':{'tufts':1},'twinkling':{'of':1},'cards':{'and':1,'with':1,'but':1,'.':1,'are':1,'come':1},'extent':{'and':1,'on':2,'what':1,'gauged':1,'of':1,'able':1,'intelligently':1,'by':1,'to':1,';':1,'permitted':1},'carbon':{'immersed':1,'compounds':4,'hydrogen':1,'until':1,'dioxide':1},'debt':{'repaid':1},'well-lighted':{'surface':1},'tyranny':{'of':3},'outcome':{'of':12,'is':2},'sacrificing':{'accuracy':1},'refinement':{'and':1},'country':{'then':1,'of':1,'to':1,'outside':1,'in':2,'nothing':1,'the':1},'conclusions':{'are':1,'which':1},'heating':{'process':1},'tree-toads':{'tree-snakes':1},'dents':{'or':1},'argue':{'fire':1},'adapted':{'for':14,'many':1,'.':1,'to':12,'itself':1,'so':1,'in':1},'asked':{'perhaps':1,'to':1,'what':1,'for':3},'exogamy':{'tending':1},'vain':{'and':1},'canyon':{'60':1,'many':1},'259':{'professor':1},'irresponsibly':{'they':1},'252':{'reproduced':1},'250':{'what':1,'000':2,'miles':1,'fathoms':2,'the':1,'inconceivable':1},'251':{'a':1},'grazing':{'mammals':1,'the':1,'herds':1,'bison':2,'in':1},'254':{'photo':1,'from':1,'reproduced':1},'255':{'reproduced':1},'101':{'after':1},'berenices':{'is':1,'.':1},'union':{'of':3,'with':1},'fro':{'about':1,'more':1},'.':{'secondly':1,'all':12,'three-toed':2,'sci':2,'skeleton':1,'chain':1,'holman':1,'mcintosh.':2,'four':1,'zinc':1,'foundations':1,'contributions':1,'magnifying':1,'certainly':1,'fahr.':1,'father':1,'young':2,'miall':1,'to':27,'finally':2,'romanes':1,'lord':1,'non-intelligent':1,'protective':1,'7':4,'very':5,'every':12,'dando':1,'radio-active':1,'well-finished':1,'f.r.s':1,'louis':1,'laying':1,'t.':1,'p':9,'hickson':1,'small':2,'indemnity':1,'round':1,'upper':1,'feathers':1,'yerkes':1,'electricians':1,'further':1,'langmuir':1,'blue':1,'what':24,'17.--a':1,'pariasaurus':1,'paintings':1,'section':1,'above':3,'dr.':1,'new':3,'movement':1,'cheetahs':1,'sci.':1,'men':1,'here':10,'hundreds':1,'anthropology':2,'let':7,'others':3,'along':3,'f.r.s.':1,'neville':1,'daughter':1,'dividing':1,'chalmers':1,'k':1,'compliance':1,'forbes':3,'usually':1,'adopting':1,'holmes':1,'saunders':3,'24.--the':1,'berridge':8,'newby':1,'cuttlefishes':1,'everybody':1,'from':21,'russell':3,'would':1,'remains':1,'positive':1,'two':5,'anatomical':1,'examination':1,'therefore':2,'6':6,'taken':2,'until':2,'on':19,'flying':3,'inclined':1,'berridge.':10,'chimpanzee':1,'lodge':1,'everywhere':1,'hilger':2,'baby':2,'bates':2,'ward':21,'huxley':3,'dando.':3,'none':2,'animals':2,'f':5,'this':102,'science':5,'when':39,'piltdown':1,'3--the':1,'making':1,'male':1,'history':3,'frogs':1,'high':1,'something':1,'story':1,'presently':1,'sir':2,'end':1,'starch':1,'astronomers':3,'how':7,'orang-utan':1,'occasionally':1,'s.':1,'intelligent':1,'side-view':2,'millikan':2,'information':3,'slipher':1,'perrin':1,'after':15,'deep-sea':1,'waves':1,'such':10,'man':4,'a':95,'forestier':3,'light':6,'clavius':1,'osborn':3,'so':24,'kippax':1,'iii.':1,'sc':1,'evolutionary':1,'barnard':2,'pelican':1,'indeed':4,'21.--typical':1,'murray':2,'thomson':7,'helena':1,'experiments':2,'still':2,'its':14,'soddy':1,'before':1,'25':1,'27':1,'21':1,'22':1,'28':1,'wilkinson.':2,'lowell':5,'23.--star':1,'fabre.':2,'26.--a':1,'estuaries':1,'they':99,'compound':1,'not':6,'olcott':1,'now':23,'nor':2,'nos':1,'6.--solar':1,'f.e.s.':1,'james':1,'radiant':1,'reid.':2,'scharff':1,'associative':1,'weighs':1,'everyone':2,'directly':1,'needless':2,'series':2,'fish':1,'journ':2,'macmillan':3,'12.--jupiter':1,'owing':1,'our':5,'hart':1,'special':2,'out':2,'living':4,'9.--the':1,'furthermore':1,'since':2,'may':1,'america.':3,'safety':1,'rational':1,'10.--solar':1,'sluggish':1,'red':1,'7.--the':1,'quite':1,'fourteen':1,'extraordinary':1,'experimenting':1,'besides':6,'put':3,'detecting':2,'keith':1,'ll.d':2,'organic':1,'g':1,'where':2,'hence':5,'first':3,'18.--a':1,'copper':1,'already':1,'plainly':1,'thereafter':1,'one':16,'another':9,'mercury':1,'given':2,'ancient':2,'limited':2,'similarly':4,'anyone':2,'their':13,'2':23,'caterpillars':1,'white':1,'speaking':2,'x-rays':2,'that':23,'19.--comet':1,'part':2,'somewhat':1,'gilbert':1,'11':1,'10':2,'13':2,'b':7,'15':1,'14':2,'17':1,'16':2,'second':2,'project':3,'matter':2,'r':3,'algol':1,'other':4,'are':1,'and':41,'clerk-maxwell':3,'ltd.':2,'pliocene':1,'ages':4,'lull':4,'sentences':1,'1':26,'apparently':1,'any':1,'viewed':1,'eels':1,'u.s':1,'mic':1,'gravity':1,'note':5,'also':1,'without':4,'take':1,'sirius':1,'even':16,'play':2,'unless':4,'wilson.':2,'though':1,'price':1,'who':2,'hincks':1,'most':6,'combustion':1,'nothing':1,'america':1,'nutritive':1,'constitution':1,'firelight':1,'22.--a':1,'dragon-flies':1,'professor':12,'later':2,'heat':2,'looked':1,'25--giant':1,'electrons':7,'prout':1,'normally':1,'laws':1,'stones':1,'hobhouse':1,'aquatic':1,'charles':2,'14.--the':1,'lloyd':1,'uranus':1,'earth':1,'hinkins':2,'copyright':1,'duncan':1,'only':4,'going':2,'molecules':2,'humdrum':1,'thompson':1,'8':5,'4.--the':1,'darwin':4,'thousands':1,'combe':1,'do':3,'his':1,'fossil':1,'meanwhile':2,'15.--mars':1,'there':106,'watch':1,'watson':1,'12':2,'nearly':2,'distinctly':1,'during':3,'silk':2,'dr':1,'crabs':1,'evolution':3,'h':27,'girdled':1,'twice':2,'discs':1,'20.--comet':1,'she':8,'gibson':1,'1922':1,'intelligence':1,'radium':2,'notice':3,'j.':2,'sec':1,'mud-nests':1,'mcgregor.':12,'5.--diagram':1,'tropisms':1,'federal':1,'artificial':1,'birds':1,'3':19,'between':5,'probably':2,'email':1,'crookes':2,'we':115,'tylor':1,'fox-bat':1,'however':5,'8.--the':1,'atoms':2,'both':7,'c':18,'wallace':1,'many':17,'taking':1,'according':6,'s':21,'1.--diagrams':1,'johnstone':1,'otherwise':1,'among':4,'goodrich':1,'simple':4,'had':1,'jeans':1,'whatever':3,'pycraft':1,'church':1,'moreover':9,'newbigin':1,'broadening':1,'marett':1,'geddes':1,'much':5,'sponges':1,'bragg':2,'life':3,'modern':1,'partly':1,'c.':1,'four-toed':1,'luther':1,'13.--saturn':1,'shepstone.':6,'races':1,'despite':1,'an':14,'161':1,'those':4,'sound':1,'adaptations':1,'unlike':1,'these':36,'lightner':1,'16.--the':1,'n':2,'while':2,'suppose':1,'viii':1,'2.--the':1,'fore-limb':2,'then':4,'vol':1,'vi':1,'is':4,'thus':48,'it':317,'iv':2,'ii':2,'middle':2,'in':152,'mcgregor':2,'if':76,'jenner':1,'headley':1,'perhaps':13,'things':1,'make':1,'sollas':1,'babies':1,'9':2,'several':1,'yucca':1,'higher':1,'ball':1,'see':4,'kelvin':1,'v.':1,'kinnaman':1,'moving':2,'lower':2,'i':3,'no':11,'mccabe':1,'contact':1,'furneaux':1,'comparisons':1,'the':569,'redistribution':1,'just':2,'being':1,'generally':1,'rest':1,'ideas':1,'disguise':1,'ritchie':2,'years':1,'paul':1,'yet':11,'like':1,'smith':1,'except':2,'potential':1,'4':15,'5':8,'putnam':2,'possibly':1,'boxes':1,'royalty':2,'five':1,'6.':1,'apart':4,'tail':1,'d':1,'lightning':1,'enregistered':1,'arthur':7,'donations':1,'t':1,'interbreeding':1,'webb':1,'old':1,'flattely':1,'triceratops':1,'some':37,'jupiter':2,'easygoing':1,'gradually':1,'for':44,'shall':1,'skeletons':1,'everything':2,'does':1,'subtlest':1,'newcomb':2,'11.--mars':1,'each':13,'illustration':2,'subconscious':1,'great':1,'although':4,'affording':1,'by':18,'macpherson.':1,'actual':1,'extending':1,'of':25,'o':1,'sea-horse':1,'whence':3,'larmor':1,'gregory':1,'consequently':1,'or':6,'naturalists':1,'serviss':1,'kapp':1,'reactions':1,'within':3,'chemists':1,'mic.':1,'mills.':2,'haddon':2,'protozoa':1,'swimmers':1,'nowadays':1,'theoretically':1,'technically':1,'doubtless':1,'linnaeus':1,'additional':1,'her':1,'placing':1,'brute':1,'long':1,'why':2,'moseley':3,'daniell':1,'stars':1,'duffus.':2,'energy':3,'naturally':1,'lowest':1,'gluten':1,'mammals':1,'but':138,'cloth':1,'curiously':1,'white.':1,'with':8,'he':39,'october':1,'whether':5,'j':40,'up':1,'idiosyncrasies':1,'stages':1,'similar':2,'sometimes':6,'taste':1,'certain':1,'metals':1,'general':2,'as':35,'ether':1,'at':22,'adams':2,'again':1,'compared':2,'curie':1,'9.':1,'c.:':1,'pickering':1,'electrical':1,'you':12,'picture':1,'energetic':1,'carpenter':1,'marshes':1,'fishes':2,'ramsay':1,'building':1,'e':5,'glass':1,'persistent':1,'together':1,'brocklehurst.':4,'mckready':1,'functionless':1,'keane':1,'once':1},'much':{'indebted':1,'harm':1,'smaller':2,'less':4,'wall':1,'intelligence':1,'subtlety':1,'alive':1,'parasites':1,'as':5,'disarranged':1,'right':1,'in':5,'sought':1,'beyond':1,'exhausted':1,'if':1,'nearer':2,'use':1,'cut':1,'from':1,'for':4,'.':2,'better':1,'to':10,'changed':1,'change':1,'progress':1,';':1,'has':1,'dreaded':1,'energy':2,'more':24,'scepticism':1,'used':2,'paperwork':1,'greater':5,'trace':1,'that':1,'importance':2,'gliding':1,'is':1,'controversy':1,'damaged':1,'denser':1,'speculation':1,'bigger':1,'simpler':1,'a':1,'on':1,'surer':1,'faster':1,'of':5,'larger':2,'stronger':1,'greater--a':1,'easier':1,'so':1,'truth':1,'light':1,'the':3,'movement':1},'pedigree--man':{'s':1},'104':{'after':1},'sponges':{'stinging':1,'zoophytes':1,'jellyfishes':1,'spongillidae':1,'are':1,'corals':1,'jellyfish':1},'smolts':{'and':1,'which':1},'fry':{'become':1,'about':2,'rises':1,'ltd.':2},'105':{'an':1},'exactness':{'with':1},'life':{'and':15,'among':1,'because':1,'although':1,'exists':1,'is':6,'it':1,'lies':1,'namely':1,'through':4,'are':3,'in':13,'palaeozoic':1,'best':1,'if':1,'depend':1,'for':1,'to':4,'remains':1,'began':1,'there':2,'had':1,'1914':1,'1':1,'.':17,'of':19,'whole':1,'which':3,';':4,'before':1,'was':2,'as':4,'than':1,'that':1,'after':1,'possible':1,'illustration':1,'but':4,'utterly':1,'during':1,'166':1,'continued':1,'by':1,'a':1,'on':18,'depends.':1,'has':4,'animals':1,'1921':2,'many':1,'depends':2,'will':1,'s':1,'can':1,'though':1,'each':1,'at':1,'taxed':1,'the':3,'history':1,'where':1,'or':1,'72':1},'latro':{'that':2},'retrospect':{'looking':1},'in-breeding':{'endogamy':1,'tended':1},'conifers':{'and':1,'ginkgos':1,'shall':1},'luther':{'the':1,'burbank':1},'shepstone.':{'light':1,'the':2,'modern':1,'100-inch':1,'lightning':1},'connaissance':{'du':1},'tree-mice':{'tree-porcupines':1},'child':{'of':4,'s':4,'does':1,'.':1,'that':1},'chili':{'where':1},'spin':{'round':1},'breast-pocket':{';':1},'control--a':{'promise':1},'adaptations':{'and':1,'of':1,'or':1,'to':5,'which':1,'such':1,'by':1},'heidelberg':{'man':5,':':2,'was':1,'sand-pit':1,'in':2},'contemp':{'.':1},'viii':{'foundations':1,'.':2},'flooding':{'space':1},'elaborate':{'burial':1},'picturing':{'a':1},'remembering':{'the':1,'that':1},'played':{'an':1},'equator':{'and':1,'of':1,'.':1,'seems':1,'i.e':1},'photographer.':{'as':1},'obeying':{'the':2},'player':{'is':1},'australia':{'perhaps':2,'is':1,'190':1,'it':1,'to':1,'neoceratodus':1,'which':1,'the':1,'95':1},'anticipating':{'the':1,'we':1},'south.':{'illustration':1},'plants.':{'sec':1,'illustration':1},'said.':{'illustration':1},'open-water':{'period':1,'turtles':1},'damaged':{'disk':1,'by':1},'feebler':{'and':1,'until':1},'things':{'and':6,'endowed':1,'is':1,'effectively':1,'as':1,'are':1,'in':2,'dr':1,'.':6,'to':1,'which':2,'wildly':1,';':1,'was':1,'horses':1,'do':1,'we':3,'that':5,'with':1,'you':1,'he':1,'on':1,'like':1,'e.g':1,'without':1,'mixed':1,'or':1},'format':{'other':1,'with':1,'used':1,'must':1},'killdeer':{'plover':1},'dissimilars':{'tends':1},'clucking':{'of':1},'gateways':{'to':1,'of':3},'double-breathers':{'dipnoi':1},'elliott':{'fry.':2,'fry':1},'emphatic':{'notice':1,'rejection':1},'european':{'fauna':1,'lynx':1},'increased.':{'electrons':1,'illustration':1},'fairly':{'what':1,'complicated':1,'mastered':1},'typhoid':{'fever':1},'georgics':{'to':1},'middle-aged':{'and':1},'effectively':{'to':1,'e.g':1,'conquered.':1,'.':1},'pioneers':{'men':1},'race-history':{'.':1},'tune':{'to':1},'registering':{'steps':1},'stupendous':{'energy':1,'collection':1,'.':1},'matters':{'little':1,'greatly':1},'erectus':{'found':1},'-mammal':{'and':1},'raindrops':{'and':1},'opinions':{'with':1},'boyhood':{'the':1},'sea-skimmers':{'halobatidae':1},'sleeps':{'upright':1},'golden':{'draperies':1,'plover':1,'age':5,'eagles.':1,';':1},'expensively':{'for':1},'distribute':{'a':1,'this':1,'copies':1,'it':1,'the':1,'or':2},'rotated':{'that':1},'beset':{'with':1},'disguise':{'and':1,'besides':1,'is':1,'.':3,'sec':1,'which':1,'differs':1,'the':1,'with':1,'or':1},'neanderthalers':{'and':1},'falcon':{'s':2},'glue-like':{'threads':1},'hen-pigeon':{'may':1},'rushing':{'torrent':1},'succeeding':{'ages':2},'lasso':{'minute':1},'99712':{'.':1},'spectacles':{'in':1},'seal':{'right':1},'old-fashioned':{'type':1,'way':1},'had':{'gone':2,'remained':1,'appeared':2,'dived':1,'some':1,'few':1,'increased':1,'brought':1,'wit':1,'at':1,'human':1,'seen':1,'swallowed':1,'enjoyed':1,'to':8,'really':1,'established':1,'given':1,'surmised':1,'proceeded':1,'rushed':1,'there':2,'been':18,'anatomical':1,'their':5,'only':1,'definitely':1,'emerged':1,'probably':1,'learned':2,'mainly':1,'claws':2,'his':1,'tried':1,'feathers':1,'gathered':1,'never':1,'extended':1,'anticipated':1,'its':4,'haunted':1,'no':4,'survived':1,'become':2,'not':6,'suspected':1,'disappeared':1,'undoubtedly':1,'a':10,'discovered':1,'great':2,'these':1,'many':1,'actually':1,'fish-like':1,'large':1,'passed':2,'teeth':2,'found':1,'the':1,'pulled':1,'waited':1,'something':1},'salmon--forming':{'new':1},'thickening':{'or':1},'saturn--the':{'moon--the':1},'collections':{'of':1},'easy':{'business':1,'for':1,'haunt':1,'.':4,'to':6,'times--glacial':1},'irresponsive':{'.':1},'botanists':{'that':1},'east':{'has':1,'when':1,'are':1,'which':1},'eocene':{'and':1,'n':1,'era':1,'n.':1,'period':1},'good-humoured':{'talkativeness':1},'up--a':{'clever':1},'elevation':{'and':1,'of':2},'survival':{'of':1,'with':1,'.':2},'semi-fluid':{'carbon':1},'possible':{'origin':1,'and':1,'instruments':1,'it':1,'according':1,'are':1,'in':1,'moreover':1,'yet':1,'enemies':1,'again':1,'evolution.':1,'for':4,'basis':1,'favouring':1,'.':1,'colours':1,'to':13,'that':6,'however':1,'but':1,'a':1,'kind':1,'outline':1,'when':1,'haunts':1,'seeds':1,'steps':1,'victory':1,'error':1,'or':1},'knife-blade-like':{'to':2,'larva':2},'firmer':{'though':1},'possibly':{'run':1,'show':1,'there':1,'outside':1,'attain':1,'have':1,'in':1},'indicative':{'not':1,'of':1},'birth':{'and':2,'of':2,'gestation':1,'.':3,'to':1,'the':1,'with':1},'shadow':{'and':1,'cast':2,'across':1,'on':1},'unique':{'and':1,'solution':1,'in':1,'property':1,'ensemble':1,'discovery':1},'12:30':{'p.m':1},'occurring':{'in':2},'desire':{'to':3,'that':1},'skull-walls':{'sir':1},'collection.':{'a':1,'lord':2,'charles':1,'sir':1,'j':1},'process--a':{'process':1,'building':1},'enregistered':{'reactions':1,'rhythms':1,'hereditarily':1,'it':1,'instinctive':2,'reactions.':1},'steps':{'followed':1,'of':1,'per':1,'which':1,'in':9,'by':1},'beneficial':{'partnerships':1,'partnership':1,'external':1,'.':1},'right':{'and':1,'into':1,'we':1,'as':1,'at':1,'in':1,'out':1,'indicate':1,'away':1,'to':2,'answer':1,'has':1,'146':1,'resting':1,'direction':1,'hand':1,'angles':4,'path':1,'with':1,'this':1,'of':4,'or':2},'old':{'quarters':1,'philosophical':1,'before':1,'terrestrial':1,'lady':1,'young':2,'.':1,'to':1,'going':1,'which':1,'entomologist':1,'editions':1,';':1,'red':2,'showing':1,'middle-aged':1,'they':1,'world':2,'with':2,'stone':4,'land':1,'word':1,'could':1,'haunts':1,'race':1,'so':1,'margin':1,'view':1},'creek':{'.':1},'crowd':{'of':1},'people':{'then':1,'would':1,'213':1,'just':1,'their':1,'arguing':1,'who':1,'.':1,'start':1,'s':1,'know':1,'have':3,'in':1,'fail':1,'wrongly':1},'predominance':{'of':1},'crown':{'of':3,'corona':1,'but':1},'deflection':{'of':3},'crows':{'but':1},'dragons--the':{'first':1},'animate':{'nature':5},'creep':{'slowly':1,'up':2},'enemies':{'a':1,'and':1,'for':1,'who':1,'except':1,'but':1,'.':5,'as':1,'which':1},'for':{'all':6,'aquatic':2,'untold':1,'unseen':1,'accurate':1,'seizing':4,'years':3,'egg-laying':1,'not':1,'existence.':2,'converting':1,'its':11,'negligence':1,'current':1,'rapid':1,'knowledge':1,'instance':25,'body-making.':1,'reasons':1,'believing':1,'capturing':1,'pursuing':1,'grasping':1,'weeks':1,'thousands':3,'over':3,'them':1,'good':1,'worse':1,'food':7,'gauging':1,'balancing':2,'existence--which':1,'every':3,'nearly':2,'they':8,'half':2,'mixing':4,'highly':1,'several':2,'identifying':3,'humming-birds':1,'this':8,'miles':1,'common':1,'activity':2,'speculation':1,'bone':2,'dexterity':1,'another':2,'intelligence':1,'radium':1,'some':4,'catching':4,'jupiter':1,'vocal':1,'existence':13,'our':4,'sport':2,'special':1,'blood-vessel':1,'crunching':1,'what':2,'three':1,'giving':1,'drifting':1,'brief':1,'increase':1,'new':3,'allowing':1,'receiving':1,'ever':4,'safety.':1,'measuring':1,'we':4,'reproduction':1,'parental':1,'example.':1,'terse':1,'of':1,'here':2,'water':2,'feeding':1,'nowhere':1,'although':3,'sedentary':1,'science':2,'dry':1,'comparison':1,'enormous':1,'actual':1,'respiration':1,'branch-gripping':1,'many':12,'violence':1,'adventures':1,'generations':1,'swimming':2,'nerve':1,'striking':1,'keenness':1,'obtaining':1,'seven':1,'one':1,'learning':1,'accepting':1,'.':1,'millions':14,'life--the':2,'man--the':1,'additional':1,'her':2,'their':2,'race-history':1,'there':8,'copies':2,'long':2,'by':1,'whom':1,'much':1,'motility':1,'themselves':1,'analysing':3,'fourteen':1,'hearing.':1,'more':6,'free':1,'exploring':1,'excavating':2,'himself':1,'north':1,'that':4,'ages':3,'releasing':1,'instance.':1,'about':1,'it':29,'carrying':1,'observations':1,'chasing':1,'coal--dissipation':1,'considerable':1,'it--radium.':1,'plants':1,'keeping':1,'animals':1,'thirty':1,'these':4,'us.':1,'access':1,'generating':1,'sifting':2,'life--water':1,'project':1,'while':1,'future':1,'midday':1,'thirty-five':1,'aesthetic':1,'life.':1,'example':6,'are':1,'and':1,'bearing':1,'amenity':1,'almost':1,'alongside':1,'mind':1,'life':6,'avoiding':1,'an':6,'as':2,'his':1,'evening':1,'something':2,'in':5,'counting':2,'any':5,'if':2,'utility':2,'us':3,'climate':1,'granted':1,'when':1,'offspring':1,'how':1,'damages':1,'holding':2,'so':1,'profiting':1,'higher':2,'supersaturated':1,'unpalatability':1,'centuries':1,'food.':1,'most':1,'moving':1,'two':1,'supposing':3,'such':1,'foothold':1,'sally':1,'man':8,'a':49,'muscle':1,'natural':1,'observation':1,'professor':2,'itself':2,'coal':2,'shore':1,'engulfing':1,'five':1,'fresh':1,'the':104,'crayfish':1,'playing':1},'bottom':{'may':1,'of':1,'and':1,'than':1,'.':2},'fox':{'all':2,'plays':1,'the':1,'or':1},'individuals':{'die':1,'who':1,'are':1,'each':1},'exposition':{'to':1},'landscape':{'effects':1},'invasions':{'of':1,'there':1},'surging':{'fire.':1},'man--body':{'and':1},'monkey-ape-man':{'.':1},'palatable':{'and':3,'butterflies':1,'flesh':1},'substitutes':{'for':2},'energy':{'and':7,'all':1,'force':1,'is':16,'it':2,'an':1,'produced':2,'as':4,'are':3,'in':6,'go':1,'if':1,'by':2,'or':1,'from':2,'would':2,'come':1,'since':1,'had':3,'expressed':1,'.':18,'to':3,'is.':1,'which':10,'tends':1,'streams':1,';':2,'has':1,'energy':1,'287':1,'greater.':1,'we':2,'that':4,'may':4,'sufficient':1,'derived':1,'but':1,'cannot':2,'let':1,'such':1,'originated':1,'than':1,'nor':1,'must':1,'a':1,'brought':1,':':1,'locked':2,'like':2,'this':1,'of':40,'into':1,'later':1,'equal':1,'across':1,'will':1,'so':1,'can':1,'ineffectively':1,'the':1,'disappears':1,'could':1,'came':1,'for':1},'dental':{'troubles.':1},'unfrozen':{'at':1},'life-or-death':{'quality':1},'substituted':{'for':1},'shifting':{'of':1},'losing':{'a':1,'the':1,'its':1},'memorable':{'because':1},'joule':{'who':1},'tide-producing':{'power':1},'emits':{'when':1,'rays--the':1},'shaken':{'.':1},'restlessness':{';':1,'an':1},'predisposition':{'to':1},'opossums':{'feigning':2,'are':2},'o':{'.':3,'as':1,'there':1,'in':1},'oneness':{'of':1},'wave-length':{'of':2,'is':1,'corresponds':1},'herring-gull':{'is':1},'slightly':{'from':1,'changed':1,'developed.':1,'simplified.':1},'lamprey':{'.':1},'raised':{'to':1,'higher':1,'from':1,'in':2,'many':1},'cloud-screen.':{'illustration':1},'statements':{'concerning':1,'that':1,'might':1,'.':1},'facility':{'of':2,'in':1},'non-protrusive':{'face':1},'son':{'of':1},'beings':{'on':1,'whose':1,'in':1},'raises':{'the':1},'sow':{'broadcast':1,'and':1,'again.':1},'spores':{'and':1,'of':1},'pairs':{'of':3},'shoots':{'and':1,'from':1},'polaris':{'76':1},'fields.':{'virgil':1},'fabric':{'of':1},'wonder-horse':{'with':1},'support':{'and':3,'a':1,'life':1,'of':1,'its':1,'to':1,'the':1,'has':1,';':1},'constantly':{'driven':1,'pouring':2,'rising':1,'splitting':1,'for':1},'width':{'.':1},'grasping':{'of':1,'the':1,'lifting':1},'physicists':{'and':3,'did':1,'of':4,'who':1,'but':1,'to':1},'greatness':{'and':1},'resulted':{'from':1,'in':2},'music':{'of':1,'had':1},'telegraph':{'and':1,'cables':1},'offer':{'serious':1,'rewards':1,'was':1,'no':1},'fascination':{'about':1},'forming':{'associations':2,'what':1,'good':1,'useful':1,'these':1,'of':1,'an':1,'part':1,'in':1,'vegetable':1,'new':1,'the':2,'ordinary':1},'shoot':{'out':3},'hemisphere':{'learned':1,'throughout':1},'thickness.':{'a':1},'survive':{'douching':1,'for':1,'being':1,'when':1,'prolonged':2,'but':1,'.':1,'high':1,'without':1,'the':2},'beech':{'a':1},'statement.':{'illustration':1},'otter':{'a':1,'is':1,'one':1,'239':1,'which':1,'or':1},'week':{'four':1,'or':2,'in':1},'death--procession':{'of':1},'inside':{'and':2,'a':2,'is':1,'are':1,'have':1,'the':3},'arrow-worms':{'in':1},'devices':{'it':1,'adaptations':1,'which':1,'.':1},'lays':{'stress':1,'her':2,'many':1,'an':1,'the':2,'its':1},'masterfulness':{'of':1},'soldering':{'of':1},'palm':{'and':2,'of':1},'procyon':{'10.5':1},'cormorants':{'and':1},'150':{'to':1,'000':5},'153':{'anatomical':1},'later':{'chapter':1,'on':2,'differ':1,'on.':1,'sir':1,'section':1,'there':1,'ages':1,'.':3,'discovered':1,'to':1,'stage':3,'which':1,'in':3,'the':2,'still':1,'than':1,'christened':1,'section.':1},'proved':{'what':1,'that':2,'very':1,'of':1,'equal':1,'but':1,'.':1,'to':2,'as':1,'too':1},'157':{'side-view':1,'photo':1,'the':1,'after':1},'156':{'photo':2},'158':{'darwin':1},'as-is':{'with':1},'palm;':{'and':1},'proves':{'fatal.':1},'exist':{'on':2,'all':1,'there':1,'would':1,'since':1,'.':2,'in':4,'between':1,'apart':1},'melan':{'dr':1},'sprouts':{'kale':1},'redolent':{'of':1},'stolidity':{'gives':1},'floor':{'of':7,'.':2},'glacier':{'that':1},'negatively-electrified':{'body':1,'ones':1},'uttered':{'until':1},'flood':{'of':4,'in':1},'nestling':{'bittern':1},'beginning--whatever':{'we':1},'deep-seated':{'connection':1,'difference':1},'entomologist':{'mr':1},'irresistible':{'.':1},'superfluous':{'length':1,'twig':1},'roll':{'themselves':1,'over':1},'friar-birds':{'of':1},'thoroughgoing':{'internal':1},'palms':{'and':1},'non-moulting':{'winged':1},'teats':{'injects':1},'mariner':{'s':1},'transported':{'in':1},'irs.':{'the':1},'scale':{'on':1,'we':1,'far':1,'of':4,'is':1,'in':2,'but':1,'to':1,'each':1,'the':4},'intent':{'efforts':1},'foot-print':{'of':1},'variable':{'monitor':2,'hare':2,'as':1,'stars':3,'in':1,'new':1,'before':1,'stock':1},'cleaver':{'of':1},'commensalism':{'with':1,'eating':1,'i.e.':1,'where':1},'fastened':{'to':1,'by':1,'up':1,'on':1},'microbes':{'such':1,'invading':1,'to':1},'packets':{'one':1},'coastlines':{'.':1},'ottawa':{'by':1},'time':{'and':11,'is':3,'it':2,'as':6,'in':5,'immemorial.':1,'thought':1,'rapidly':1,'for':1,'their':1,'with':3,'since':1,'when':5,'.':7,'to':5,'onwards':1,'swift':1,';':1,'until':1,'ahead.':1,'we':2,'energy':1,'that':5,'very':1,'than':1,'however':2,'much':1,'great':1,'a':1,'they':1,'during':1,'come':1,'by':1,'nor':1,'ago':1,'wide':1,'immemorial':1,'last':1,'like':2,'showed':1,'of':11,'required':1,'reminding':1,'appearing':1,'so':1,'she':1,'were':1,'about':1,'the':12,'or':1},'adult':{'and':1,'eel':1,'life':1,'by':1,'.':2},'peacock':{'and':1,'for':1},'irrigation':{'of':1},'chain':{'of':2,'instincts':1,'.':1},'perch':{'when':1},'colour-change':{'bony':1,'is':2,'sometimes':1,'expresses':1,':':2,'occurs':1},'lawlessly':{'they':1},'activated':{'by':1},'crocodile':{'pipes':1,'is':2,'would':1},'avalanche':{'.':1},'skate':{'and':1,'places':1},'93':{'000':2},'witmer.':{'peter':1},'ebooks.':{'':1},'hold':{'a':1,'all':1,'that':1,'of':2,'it':1,'their':2,'in':1,'the':1},'rottenness':{'eaters':1},'methodically':{'onwards':1},'94':{'photo':1,'from':1},'efficiencies':{'supply':1},'209':{'a':1,'homing':1},'chequered':{'by':1,'but':1},'walking-fish':{'or':2},'separated.':{'perhaps':1},'downloading':{'copying':1},'gisbert':{'electricity':1},'navigable':{'kingdom':1},'choice':{'of':1},'92.9':{'1.00':1},'gloomy':{'prognostications':1,'gorilla.':1},'bustle':{'of':1},'fullest':{'ears':1},'right-handed':{'and':1},'exact':{'and':1,'intensity':1,'it':1,'limits':1},'minute':{'and':2,'signs':1,'tag--but':1,'unicellular':1,'planets':1,'in':1,'diamond-like':1,'surfaces':1,'living':1,'rays':1,'organisms':2,'measurements':1,'.':1,'particles':1,'molecules':1,'6':1,'fragments':1,'that':1,'crustaceans':3,'after':1,'but':1,'hand':1,'waves':1,'satellites':1,'atoms':1,'transparent':2,'animals':2,'atom':1,'traces':1,'or':1},'tear':{'into':1,'asunder':1,'them':1,'are':1},'leave':{'me':1,'them':1,'this':1,'well':1,'atoms':1,'their':1,'the':4,'open':1,'him':1,'creatures':1},'solved':{'four':2,'there':1,'it':1},'settle':{'these':1,'on':1,'down':3},'team':{'at':2},'depository':{'of':2,'the':1,';':1,'he':1},'speculation':{'and':1,'about':1,'.':3,'is':2,'that':1},'unpaying':{'boarders':1},'prevent':{'you':1},'thinkers':{'the':1,'since':1,'have':2},'occurrence':{'of':5,'.':1},'chimpanzee--and':{'it':1},'insignificant':{'compared':1,'one':1},'trails':{'a':1},'milligram':{'of':1},'gnawed':{'the':1},'roof':{'of':3},'depressions':{'of':1},'mind--even':{'in':1},'parachuting':{'animals':1,'.':1},'educate':{'the':1},'leaf-butterfly':{'kallima':1},'axes':{'follow':1,'of':1},'melt':{'in':1},'current':{'rang':1,'is':6,'intellectual':1,'through':1,'275':1,'in':2,'279':1,'seems':1,'exhibits':1,'.':4,'to':1,'is.':1,'which':1,'instead':1,'was':2,'therefore':1,'donation':1,'not':1,'with':1,'the':2,'of':3,'passing':1,'where':1},'remembered':{'that':4},'looking':{'is':1,'backwards':6,'at':3,'extraordinarily':1},'period--its':{'length':1},'falling':{'and':1,'on':1,'stone':2,'into':1,'body':1,'water':2,'weights':1,'between':1,'particles':1},'ground':{'a':1,'on':2,'what':1,'his':1,'again.':1,'would':1,'though':1,'is':1,'or':2,'when':1,'by':1,'pushed':1,'as':1,'flapping':1,'in':1,'has':1,'the':2,'.':5,'was':1,'generate':1,'he':1},'coccyx':{'at':1},'climbs':{'on':2,'the':2,'up':1},'honour':{'of':1},'mauer.':{'d-e.':1},'understanding':{'and':1,'of':1},'exceptions':{'the':1,'as':1,'that':2},'magnetism':{'and':1,'we':1,'gravitation':1,'is':3,'supposes':1,'.':1,'differs':1,'he':1},'nemesis':{'of':2},'yards':{'and':1,'a':1,'off':1},'address':{'specified':1},'alone':{'is':2,'.':4,'swamp':1,'the':1,'has':1,'by':2},'along':{'a':3,'copper':1,'many':1,'lines':1,'two':1,'an':1,'its':1,'at':1,'which':3,'certain':2,'the':15,'with':9,'by':2},'dwindling':{'counterpart':1,'relic':1,'of':1,'structure--the':1,'race':1,'relics':1,'structures':1,'resources':1,'must':1},'anchoring':{'structures':1},'momentous':{'event':1,'step':1,'.':1,'except':1,'that':1},'testings':{'.':1},'neville':{'extinct':1},'brilliant':{'workers':1,'young':1,'or':1,'early':1,'experiment':1,'photosphere':1,'failures':1,'conquest':1,'coloration':1,'redness':1},'studied':{'a':1,'the':1,'was':1,'by':1},'wherever':{'the':2,'there':1},'commonly':{'found':1,'accepted':1},'brazilian':{'forest':1},'accomplished':{'in':1,'if':1},'ineffective':{'way':1,'movements':1},'vitiated':{'air':1},'studies':{'of':1},'unification.':{'we':1},'tasks':{'of':2},'love':{'as':1,'.':1,'hunger':1},'prefer':{'to':1},'relations.':{'when':1},'betraying':{'its':1},'deep-water':{'marine':1},'sky':{'means--light':1,'means':1,'no':1,'.':2,'will':1,'to':1,'overhead':2,'at':1,'in':1,'probably':1,'where':1},'engrain':{'capacities':1},'working':{'from':1,'of':2,'into':1,'methodically':1,'against':1,'powerfully':1,'which':1,'or':1,'out':1},'mankind--steps':{'in':1},'formulated':{'the':2},'positive':{'and':7,'knowledge':2,'electricity':6,'particles':1,'charge':1,'in':1,'the':1,';':1},'-fish':{'embryo':1},'anatomical':{'distinctions':1,'proof':2,'genius.':1,'structure':1,'evidence':1},'vigour':{'and':1,'of':1,'.':1},'down-breaking':{'disruptive':1},'opposed':{'to':1},'films':{'of':2},'scope':{'to':1},'theoretical':{'basis':1},'ten-miles-wide':{'moons':1},'perishes':{'for':1},'periophthalmus':{'of':1,'common':2},'chapters--the':{'feeding':1},'afford':{'food':1,'a':1,'to':2},'apparent':{'strokes':1,'suddenness':1,'.':1,'motion':1,'to':1,'stroke':1,'motions':1,'exceptions':1,'creeping':1},'assimilation':{'exceeding':1},'validity':{'there':1},'minnows':{'and':2,'learned':1,'were':1},'appendix':{'alone':1,'at':1,'which':1},'everywhere':{'forming':1,'there':1,'like':1,'in':1},'virtue':{'of':5,'as':1},'blood.':{'as':1},'disparagement':{'tentative':1},'easiest':{'of':1},'petrel':{'the':1,'or':2,'is':1},'logos':{'which':1,'.':1},'modernised':{'types':1},'originally':{'a':2,'derived':2,'intelligent':1,'supposed':1},'rutherford':{'and':2,'sir':1,'246':1,'one':2,'christened':1},'imagination.':{'the':1,'organic':1},'moulted':{'which':1,'in':1},'life--water':{'that':1},'believes':{'that':1},'printing':{'august':1,'april':4,'may':1,'june':4,'september':1,'sept':1},'values':{'most--control':1},'slowness':{'.':1},'stature':{'and':1,'than':1,'human':1},'believed':{'not':1,'to':1,'by':2,'that':2},'admired':{'the':1},'short-limbed':{'but':1},'frogs':{'and':3,'a':1,'show':1,'may':1,'sometimes':1,'herald':1,'jumping':1,'have':1,'meet':1,'along':1},'bulkiest':{'structure':1},'parachute':{'of':1,';':1,'wing':1,'before':1},'locks':{'.':1},'one--the':{'old':1},'238':{'photo':2,'whereas':1},'239':{'photo':1},'unveiled':{'in':1,'.':1},'allowed':{'to':1,'aliens':1,'for':1,'her':1,'of':1},'evidently':{'light':1,'puzzled':1},'232':{'photo':2},'233':{'photo':4},'winter':{'and':4,'by':2,'in':1,'of':1,'within':1,'freeze':1,'scene':2,'whiteness':1,'plumage':2,'.':1,'are':1,'sets':1,'nor':1,'the':1,'has':1,'dress':1,';':1,'retreat':1},'venation':{'of':1},'chromatophores':{'and':1,'in':1},'foul':{'waterholes':1,'with':1},'protozoon':{'and':1,'has':1,'or':1,'.':1},'s.':{'fairbanks':1,'illustration':1},'elephant':{'and':2,'rhinoceros':1,'a':1,'.':1,'helping':1,'at':1,'they':1,'was':1},'northwards':{'for':1},'divides':{'and':1,'into':2,'is':1},'edinburgh':{'the':1},'snaps':{'secure':1},'explores':{'a':1},'explorer':{'which':1},'motive-force':{'in':1},'spot':{'and':1,'on':2,'23':1,'though':1,'at':1,'where':1},'convincingly':{'the':1},'muellerian':{'after':1},'date':{'living':1,'from':1,'for':1,'on':1,'of':2,'contact':1,'at':1,':':1},'such':{'ingenious':1,'and':1,'remarkable':1,'publications':1,'constituents':1,'is':5,'metals':1,'well-known':2,'contrasts':1,'as':72,'diverse':1,'are':1,'planets':1,'in':1,'speed':1,'birds':1,'enemies':1,'dense':1,'things':1,'phrases':1,'unity':1,'wonderfully':1,'way':1,'instruments':2,'if':1,'conditions':1,'important':1,'movement':1,'that':3,'rock':1,'apparent':1,'furnaces':1,'depths':1,'wave-motions':1,'races':1,'fishes':1,'cases':2,'intelligent':1,'active':1,'stage':1,'a':19,'dangers':1,'changes':1,'occasions':1,'damage.':1,'betelgeux':1,'cells':1,'motion':1,'thing':4,'states':1,'hard-and-fast':1,'temperatures':2,'time':1,'similar':1,'order':1},'behaviour--experimenting':{'learning':1},'truly':{'wonderful':3},'data':{'transcription':1,'for':1},'codes':{'that':1},'lids':{'to':1,';':1},'waggons':{'at':1},'sy':{'1':1,'2':1},'forestier':{'of':3},'varieties':{'of':1,'which':1,'altogether':1},'conscious':{'guile':1,'agent':1,'imitation':1},'naturae':{'meaning':1,'the':1},'st':{'.':2},'inhabiting':{'this':1,'the':2},'castings':{'and':1},'remoter':{'part':1},'so':{'chicks':1,'they':2,'among':1,'fond':1,'subtle':1,'still':1,'generous':1,'slow':1,'young':1,'late':1,'to':3,'differently':1,'rich':1,'he':1,'clouded':1,'do':2,'good':1,'far':14,'safe':1,'apt':1,'closely':1,'vast':2,'easily':1,'like':2,'keenly':1,'shaped':1,'forth':3,'large':1,'stupid':1,'she':1,'small':2,'where':1,'simple.':1,'often':1,'attenuated':1,'are':1,'helpless':1,'pronounced':1,'for':1,'restricted':1,'below':1,'does':1,';':1,'numerous':1,'common':2,'we':6,'recently':1,'inextricably':1,'completely':1,'rapid':1,'strong':1,'by':1,'momentous':1,'gained':1,'on':16,'great':3,'many':7,'sensitive':1,'rudely':1,'striking':1,'powerful':1,'marked':2,'one':1,'long':3,'quickly':1,'readily':1,'fast':1,'from':1,'there':4,'sunlight':1,'.':3,'much':15,'clever':3,'that':43,'forming':1,'minute':1,'motionless':1,'mounted':1,'inconspicuous':1,'wide':1,'arranged':1,'this':1,'up':1,'will':1,'while':1,'obvious':1,'of':1,'similar':1,'bright--the':1,'is':3,'it':8,'an':1,'effectively':1,'as':6,'in':4,'clearly':1,'relatively':1,'proceeds':1,'very':3,'hot':1,'absorbed':1,'instead':1,'firmly':1,'watery':1,'may':1,'important':1,'conspicuous':1,'a':2,'short':1,'crowded':1,'clear':1,'well':1,'near':2,'deeply':1,'species':1,'fresh':1,'the':8},'sc':{'the':1},'mud-flats':{';':1},'pulled':{'.':1,'down':1,'twice':1,'at':1,'the':3,'by':4},'outflowing':{'network':2},'unsolicited':{'donations':1},'lighter':{'and':1,'materials':2,'in':1,'atomic':2,'.':1},'differences':{'separating':1,'of':3,'in':3,'between':2},'below.':{'1.f.':1,'illustration':2,'1.c':1},'copious':{'supply':1},'course':{'and':1,'associated':1,'is':1,'it':2,'an':1,'are':1,'in':1,'confirms':1,'her':1,'unknown':1,'there':2,'been':1,'to':2,'only':1,'5':1,'easy':1,'has':1,'be':2,'we':3,'cannot':1,'not':1,'with':1,'by':1,'he':2,'a':2,'for':3,'of':24,'the':2},'experiments':{'suggested':1,'towards':1,'proved':1,'chiefly':1,'showed':1,'that':1,'of':5,'in':4,'enabled':1,'.':4,'indicate':1,'without':1,'have':1,'which':1,'usually':1,'checked':1,'with':2},'frequents':{'two':1},'insurgence':{'and':2,'of':2},'tendency':{'to':11,'that':1,'among':1,'by':1,'of':2},'solitary':{'bit':1,'or':1},'limbs':{'is':1,'to':2,'at':1,';':1,'with':1,'or':1},'derive':{'their':1,'from':1},'yawning':{'in':2},'thumb':{'and':5,'th':1},'did.':{'looking':1},'hot':{'and':2,'gaseous':1,'for':1,'gas':1,'when':1,'but':1,'.':2,'as':1,'weather':1,'earth':1,'cinder':1,'or':1,'bodies':1},'decreases':{'.':1},'attraction':{'produces':1,'of':1,'is':1,'.':1,'can':1,'between':2},'creations':{'of':1,'.':1},'dwarfs':{'.':1},'constitutes':{'matter':2,'one':2},'instantly':{'fly':1},'conveying':{'it':1},'thereby':{'buoyed':1,'escapes':1},'earth--the':{'earth-knot':1},'youth.':{'sec':1},'experiment.':{'we':1},'indigenous':{'wild':2},'records':{'of':2,'the':1,'or':1,'.':1},'year.':{'in':1},'overpowering':{'and':1,'its':1},'water-shrew.':{'freshwater':1},'sorted':{'out':2},'twilight':{'by':1,'no':1},'runners':{'that':1},'one-seventh':{'and':1},'find.':{'fresh':1},'creation.':{'the':1},'establishing':{'itself':1,'or':1,'associations.':1},'veins':{'on':1,'of':1},'instability':{'and':1},'eighty-seven--and':{'that':1},'quarter':{'of':4,'days':2},'habitat-zones':{'and':1},'limb.':{'it':1},'turtle':{'found':1,'the':1,'that':1,'which':1,'of':1},'square':{'of':1,'.':1,'miles':2,'inch':2,'our':1,'the':1},'retrieve':{'its':1,'her':1},'receipt':{'of':1,'that':1},'parachutists--':{'flying':1},'prisms':{'the':1,'are':1},'woodcraft':{'the':1},'owing':{'to':4,'in':1},'entering':{'a':1,'the':4,'into':1},'beetle':{'running':1,'which':4},'instinct--the':{'mind':1},'neighbourhood':{'of':1},'crowding':{'there':1},'river-tortoises':{'which':1},'abide':{'by':1},'collisions':{'.':1},'contained':{'good':1,'meat':1,'in':4},'protections':{'against':1},'washington.':{'illustration':1},'suggesting':{'that':2},'granites':{'while':1},'ascendant':{'and':1},'soap-bubble':{'.':2},'siege':{'are':1},'million':{'millions':1,'square':1,'million':2,'stars.':1,'volts':1,'is':1,'trillion':1,'atoms':1,'meteorites':1,'miles':3,'electrons':1,'stars':1,'in':1,'horsepower':1,'250':1,'years':9,'.':1,'times':6},'envelop':{'the':1},'possibility':{'of':12,'is':1,'that':2,'in':1},'quite':{'uninterested':1,'certain':5,'direct':1,'comfortable':1,'as':1,'clever':1,'at':1,'impossible':1,'extinct':1,'indifferent':1,'readily':1,'different':5,'emancipated':1,'artificial':1,'difficult':1,'separated':1,'independent':1,'sure':2,'possible':2,'lively.':1,'invisible':1,'apart':3,'a':2,'easily':1,'novel':1,'clear':1,'so':3,'fundamental':1,'obscure':1,'away':1},'disintegrates':{'generates':1},'complicated':{'and':2,'elements':1,'than':1,'convolutions.':1,'atoms':1,'to':1,'atom':1,'cases':1,'wave':1,'by':1},'besides':{'even':1,'all':1,'his':1,'her':1,'turtles':1,'that':1,'this':1,'monkeys--in':1,'violent':1,'sunlight':1,'.':2,'these':1,'acting':1,'pulling':1,'struggle':1,'which':1,'instinctive':1,'the':4,'perceptual':1,'those':1},'remainder':{'of':1},'seventy':{'or':1},'vivum':{'e':1},'shores':{'and':1,'going':1,'which':1,'.':1},'training':{'given':1,'they':1,'nor':1,'.':1},'possum':{'lying':1},'tree-sloths':{'for':1,'tree-shrews':1},'undisguised':{'shore-animals':1},'ostrich':{'and':1,'with':1},'wanderers':{'.':1},'disguises':{'which':1},'massive':{'bulk':1,'jaws':1,'lower':1,'face':1},'routes':{'became':1,'round':1},'learning.':{'vi':1,'vii':1,'illustration':1,'animal':1},'puny':{'infant':1},'toads--it':{'serves':1},'emotion':{'as':1,'is':1},'saving':{'the':2,'clauses.':1},'symmetry':{'of':1,'is':1,'.':1,'well':1,'must':1},'serpent':{';':1},'spoken':{'of':1,'language':1},'one':{'over':1,'atom':3,'not':1,'mile':3,'whose':1,'cut':1,'group':1,'championed':1,'except':1,'should':3,'to':2,'primordial':2,'main':1,'might':2,'resting-place':1,'digit':1,'animal':1,'big':1,'colour--the':2,'answer':1,'year.':1,'cannot':1,'half':1,'foot':1,'rotation':2,'day':4,'three-hundredth':1,'reality--the':1,'name':1,'magnet':1,'fitness':1,'served':1,'side':5,'kernel':1,'revolution':1,'telescope':1,'second':1,'martian':1,'year':1,'close':1,'thinks':2,'living':1,'for':1,'disease':1,'time.':1,'discovers':1,'above':1,'example':1,'consisting':1,'body':6,'we':1,'state':1,'million':2,'here':1,'objects':1,'illustration':1,'key':1,'put':1,'sadly':1,'by':1,'momentous':1,'extreme':1,'on':4,'substance':1,'asks':1,'of':101,'local':1,'thing':3,'s':2,'place':3,'or':1,'comes':1,'family':1,'embodiment':2,'another':16,'comprises':1,'pulls':1,'cloud':1,'from':3,'would':3,'hundred-thousandth':1,'.':7,'water-shed':1,'crab':1,'half-hour':1,'was':2,'toe':1,'direction':1,'knows':2,'form':1,'that':3,'successful':1,'thousand':2,'but':1,'another.':1,'manifestation':1,'hopes':1,'line':1,'with':3,'must':1,'kind':3,'has':1,'type':1,'as':1,'will':1,'near':1,'obvious':1,'can':6,'country':1,'piece':1,'remembers':1,'and':8,'pound':3,'stream':2,'is':8,'hardly':1,'say':1,'way':2,'at':2,'in':3,'helium':1,'globe.':1,'end':6,'parish':1,'food-plant':1,'other':1,'which':3,'inch':1,'physical':1,'week':1,'snail':1,'may':1,'after':1,'molecule':1,'hand':2,'plane':3,'such':1,'class':2,'man':2,'planet':1,'owns':1,'colour':3,'electron':1,'element':1,'more':1,'time':5,'the':1,'lined':1,'egg':1,'order':1},'spanish':{'don.':1},'open':{'pipe':1,'sea':25,'jaws':1,'waters':2,'there':1,'up':1,'one':1,'water':1,'atlantic':1,'sea.':1,'doors':1,'sea--the':1,'the':1,'gateways':1},'city':{'ut':1,'like':1},'bite':{'of':1,'at':1},'indicate':{'a':2,'the':4,'that':1,'first':1,'an':1},'2':{'and':4,'among':1,'show':1,'gradual':1,'in':1,'it':1,'chromosomes.':3,'feet':1,'tons':1,'jupiter':2,'escape':1,'paternal':1,'egg':1,'nebulae':1,'factors':1,'physiological':1,'.':11,'0':1,'3':1,'holding':1,'newly':1,'500':3,'we':2,'maternal':1,'inches':2,'respectively':1,'instinctive':1,'canals':1,'with':1,'by':1,'a':1,'represents':1,'of':3,'the':13,'changes':1},'vapoury':{'tail':1},'stuffed':{'their':1},'bits':{'.':1},'lingering':{'influence':1,'here':1},'vapours':{'and':1,'that':1,'of':1,'whirling':1,'imaginable':1,'.':1,'above':1},'on.':{'we':1,'there':1,'illustration':1,'sec':1,'in':1,'the':3,'recent':1},'viviparous':{'the':1},'gently.':{'these':1},'proving':{'everything':1,'trying':1,'itself':1},'s.c.':{'on':1},'herds':{'extended':1},'absorbs':{'most':1,'the':2,'all':1},'photographic':{'emulsions':1,'plate':11,'negative':1},'structure.':{'differences':1,'in':1},'vapour.':{'millions':1},'meteors':{'and':2,'what':1,'showing':2,':':1,'approach':1,'or':2},'third':{'and':2,'case':1,'layer':1,'eyelid':2,'form':1,'of':3,'night':2,'rings':1,'digit':1,'haunt':1,'trial':1,'printing':1,'great':1,'have':1,'atom':1,'answer':1,'interglacial':3},'depressed':{'into':1},'himself.':{'when':1},'weapons--the':{'sea-anemone':1},'siding':{'we':1},'future':{'and':1,'for':1,'reproductive':1,'of':1,'holds':1,'.':6,'access':1,'cannot':1,'let':1,'need':1,'research':1,'generations.':1},'17-1':{'2':1},'trekking':{'to':1},'college':{'of':2,'observatory.':4},'wandering':{'about':1,'amoeboid':2,'.':1},'johnstone':{'j':1},'prospect':{'for':3,'.':1},'thousandths':{'of':1},'royalties':{'.':1,'under':1},'sac':{'beneath':1},'turned':{'towards':1,'from':1,'into':5,'round':1,'to':1,'sharply':1,'rapidly':2,'the':1,'its':1},'argument':{'supposes':1,'implies':1},'alley':{'at':1},'auroral':{'displays':1},'say':{'just':1,'is':1,'some':1,'it':2,'an':1,'brain':1,'as':1,'at':2,'in':1,'our':1,'its':1,'what':2,'for':1,'sodium':1,'much':2,'began':1,'there':3,'ignorabimus.':1,'.':2,'other':1,'therefore':1,':':1,'reflex':1,'more':4,'presently.':1,'we':2,'full':1,'that':26,'mammals':1,'here':1,'unification':1,'they':3,'half':1,'by':1,'a':1,'about':1,'like':1,'of':5,'enthusiastic':1,'according':1,'without':1,'ignoramus':1,'the':9},'buried':{'and':1,'eggs':1,'his':1,'egg':1,'alive':1},'horsepower':{'.':1},'1':{'and':3,'testing':1,'it':2,'an':1,'100th':1,'drawings':1,'in':1,'before':2,'67':2,'25':1,'giant':1,'for':1,'no':1,'sun':1,'except':1,'.':10,'1':1,'to':1,'340':1,'mars':1,'progress':1,'we':1,'300':1,'dam':1,'67000':1,'but':1,'000':2,'125':2,'367':1,'drought':1,'20417':1,'with':1,'by':1,'evolution':1,'1800':1,'of':4,'35':1,'1845':1,'the':12,'two':1},'sap':{'reminding':1,'and':1,'which':1},'saw':{'and':1,'a':1,'all':1,'that':1,'may':1,'is':1,'earlier':1,'about':2,'heard':1,'combine':1,'in':2,'the':1,'has':1,'was':1},'1903.':{'illustration':1},'law.':{'if':1},'unsuitable':{'and':1,'pools':1},'downwards':{'on':1,'along':1,'at':1},'aside':{'to':1,'conventional':1,'only':1},'zoo':{'with':1,'were':1},'note':{'that':1,'of':2,'is':2,'its':1,'how':2,'the':9,'still':1,'by':1},'take':{'frogs':1,'it':1,'an':3,'as':1,'in':1,'our':2,'its':1,'what':1,'from':1,'rather':1,'long':1,'1':1,'to':2,'much':1,'400':1,'place.':1,'photographs':1,'centuries':1,'advantage':1,'between':2,'about':1,'leaps':1,'one':1,'a':6,'great':2,'light':1,'up':1,'us':1,'place':1,'five':1,'the':10,'root':2,'50':1},'fruit-fly':{'drosophila':1},'wanting':{'of':1},'powers--man':{'still':2},'butterfly':{'kallima':2,'showed':1,'which':1,'an':1},'scents.':{'the':1},'hunt':{'insects':1,'from':1},'wilson.':{'peripatus':1,'rock':1},'opposite':{'pans':1,'direction':2,'electric':1,'ways':1,'of':1,'ends':1,'side':2,'picture.':1,'directions':3,'page':1},'knew':{'to':1,'what':1,'.':1,'but':1,'less':1},'molecule':{'of':4,'is':2,'contains':1,'as':1,'every':1,'therefore':1,':':1,'with':1},'talk':{'of':1},'detect':{'and':2,'a':2,'them':1,'less':1,'this':1,'as':2,'such':1,'the':2},'printed':{'cards':1,'on':2,';':1,'and':1,'editions':1},'remarks':{'of':1},'inserted':{'nuts':1},'pages':{'for':1},'adaptability':{'of':1},'average':{'distance':1,'would':1,'level':1,'of':1,'men':1,'molecule':1,'height':1,'depth':1,'5':1,'human':1,'estimate':1,'organism':1},'drive':{'electric':1},'crowd--we':{'cannot':1},'unabated':{'to':1},'messier':{'31':2},'atlantic':{'and':1,'cod-banks':1,'some':1,'.':1,'crowds':1,'overcome':1},'salt':{'and':1,'did':1,'of':1,'lake':2,'.':1,'water':2,'projects':1},'laws':{'and':1,'of':5,'alone':1,'regulating':1,'in':1},'walking':{'and':2,'on':1,'wood':1,'powers':2,'movements':1},'pencilled':{'above.':1},'definite':{'direction':2,'constant':1,'periodic':1,'positions':1,'function--we':1,'answers':1,'possibilities':1,'entities':1,'step':1,'race':1,'figures':1,'nervous':1,'learning':2,'mammals':2,'routes':1,'position':2,'concentric':1,'type':1,'order':1,'bronze':1},'imagines':{'when':1},'friction':{'and':1,'on':1,'.':1,'when':1,'of':1},'far-reaching':{'importance':1,'influences.':1,'with':1,'discoveries':1,'consequences':2},'bright':{'star':1,'globe':1,'lines':5,'central':1,'white':1,'cloudlets':1,'image':1},'fiord':{'estuary':1},'scarce':{'as':1,'multiplying':1},'imagined':{'the':1,'entity':1},'beetles':{'and':1},'slot':{'and':1,'of':1},'colony-making':{'protozoon':1},'slow':{'and':1,'like':1,'boiling':1,'one':1,'down':2,'to':3,'as':1,'vibrations':1,'although':1,'changes':1},'representation':{'of':6,'to-day':1},'gravers':{'and':1},'fox-terrier':{'turned':1},'liberation':{'and':1},'going':{'on':17,'appearing':1,'that':1,'back':5,'one':2,'to':4,'through':1,'farther':1,'on.':8,'beyond':1,'outward':1,'concern':1},'uppermost':{'portion':1,'layer':1},'helmholtz':{'lord':1},'dispute':{'as':1,'the':1},'evolution--but':{'even':1},'hindmost':{'pair':1},'guarded':{'against':1},'tail.':{'now':1,'it':1,'but':1,'man':1},'infallibly':{'between':1},'genera':{'and':1},'eel-fare':{'includes':1},'freezing':{'.':1,'point':1},'theory--had':{'a':1},'also--protection':{'for':1},'clearest':{'realities':1},'shallow-water':{'species':1},'keenly':{'aware':1},'parasitic':{'sporozoa':1,'death':1},'toads':{'newts':1,'and':2,'jump':1,'sometimes':1},'absurdly':{'small':1},'liable':{'to':3,'such':1},'where':{'and':1,'copper':1,'words':1,'it':10,'deep':1,'an':1,'sea':1,'any':1,'dense':1,'no':1,'there':5,'its':1,'their':1,'does':3,'routine':1,'you':1,'alertness':1,'we':3,'very':1,'they':2,'alone':1,'instinctive':1,'a':3,'this':2,'these':1,'each':1,'the':24},'sake--imitation--the':{'mind':1},'vision':{'and':1,'is':3,'holds':1,'than':1,'in':1},'press.':{'comparative':1},'proof--man':{'s':1},'attenuated':{'that':1},'electrons--and':{'the':1},'reign.':{'they':1},'silurian':{'and':1,'the':1,'when':1,'period':2,'rocks':1},'up':{'and':8,'individually':1,'intelligence':2,'into':14,'it':1,'general':1,'light-waves':1,'at':1,'questions':1,'in':10,'impressions':1,'rivulets':1,'the':26,'any':1,'living':1,'what':1,'from':2,'for':2,'how':1,'.':5,'to':8,'between':1,'estuaries':1,'new':1,'energy':1,'his':1,'an':1,'substances':1,'our':2,'nonproprietary':1,'trees':1,'but':1,'such':1,'one':1,'with':6,'by':10,'a':9,'on':5,'organic':1,'these':1,'light':1,'leaves':1,'carbon':3,'so':2,'of':9,'again':2,'everything':1,'photosynthesis':1,'or':4},'distended.':{'eventually':1},'impressions':{'go':1,'of':1,'.':1},'hastened':{'the':1},'830':{'000':2},'inequalities':{'of':1,'in':1},'compounds':{'to':1,'from':1,'activated':1,'like':1,'out':1},'representatives':{'of':3,'sometimes':1,'had':1,'except':1,'.':1},'under-skin':{'or':1,'.':1},'secondaries':{'are':1},'dormitory':{'instead':1},'--which':{'have':1},'moons':{'we':1,'of':4,'four':1,'to':1,'which':2,'certain':1,'round':1},'affecting':{'it':1,'nerve-cells':1},'man.':{'a':1,'on':1,'animals':1,'pariasaurus':1,'4':1,'triceratops':1,'it':1,'deperet':1,'according':1,'1':1,'illustration':1,'such':1,'eocene':1,'man':1},'volvox':{'a':1,'69':1,'the':1,'is':1,'.':1},'fir':{'cones':1},'spectroscopy':{'is':1},'vertical':{'line':1,'bars':1},'screen':{'and':1,'we':1,'for':1,'means':1,'where':1,'is':1,'.':4,'through':1,'which':1,'producing':1,'make':1,'glowed':1},'dome':{'like':1,'.':1},'ancestors--a':{'wolf':1},'big-brain':{'type':4},'proterozoic':{'ages':1,'eras':1,'era':1},'jets':{'of':2,'or':1},'engravings.':{'factors':1},'spark':{'on':1,'this':1,'.':1,'271':1,'274':1,'consists':1,'an':1,'or':1},'well-protected':{'pupa':1},'concentrated':{'upon':2},'circumference':{'so':1,'.':1},'many':{'insects':1,'instincts':1,'years':1,'bivalves':1,'experiments':2,'facts':1,'contributions':1,'birds':4,'young':2,'forms':4,'parts':2,'anticipations':1,'reptiles':2,'inventions':1,'thousands':2,'which':1,'tenses':1,'very':1,'crustaceans':1,'portions':1,'more.':1,'far-reaching':1,'minute':1,'fossils':1,'nerve-endings':1,'countries':1,'corners':1,'miles':2,'brownish':1,'small':4,'freshwater':1,'generations':1,'people':1,'animals':9,'fish':1,'parasites':1,'individual':1,'universes':2,'hundredfold':1,'creatures':2,'oceanic':1,'for':1,'ways':1,'migrations':1,'new':1,'open-sea':1,'levels--the':1,'we':1,'were':2,'hours':1,'broken':1,'directions.':1,'yards':1,'directions':3,'about':1,'brilliant':1,'of':23,'months':2,'haunts':1,'times':3,'shore-animals':2,'tree-loving':1,'already':1,'useful':1,'annelids':1,'another':1,'fees':1,'protozoa':2,'establish':1,'millions':5,'ancient':1,'would':1,'.':1,'tropical':1,'stars':2,'dangers':1,'more':1,'acquisitions':2,'that':2,'mammals':3,'regard':1,'sciences.':1,'amphibians':1,'cases':9,'an':1,'plants':1,'prehistoric':1,'unsegmented':1,'places':1,'apples':1,'planes':1,'drops':1,'similar':2,'and':2,'likewise':1,'days':3,'have':1,'domesticated':1,'occur':1,'different':5,'things':1,'shore':1,'astronomers':4,'other':9,'doors':1,'units':1,'mysteries':1,'kinds':1,'thoroughgoing':1,'eggs':1,'swiftly':1,'problems':1,'important':1,'waves':1,'fishes':1,'types':2,'a':3,'land':1,'minutes':1,'sometimes':1,'peculiarities':1,'electrons':1,'nuclei':1},'moon.':{'illustration':1},'estimates.':{'the':1},'thickly':{'peopled':2},'s':{'chicks':1,'atmosphere':3,'skeleton':1,'sentence':1,'stinging-cells':1,'instincts':1,'sheltering':1,'brain':3,'snapping-blades':1,'hairs--an':1,'skin':2,'chicken':2,'visceral':1,'principal':1,'web':3,'anvil':1,'interesting':1,'instruction':1,'monkeys':1,'hidden':1,'real':1,'beginnings.':1,'return':1,'orbit':1,'arboreal':3,'big':1,'theory--had':1,'famous':2,'shell--there':1,'sons':2,'moods':1,'saying':1,'hands':1,'press':7,'world':1,'rotation':4,'continued':1,'day':4,'runs':1,'establishment':1,'cry':1,'solution':1,'experiments':1,'activity':1,'sake--imitation--the':1,'ceaseless':1,'mental':2,'energy':2,'mongoose':1,'notice':1,'past':1,'affiliation':1,'books':1,'mighty':1,'year':1,'laboratory':1,'indirect':1,'ascent':2,'arm':1,'shining':1,'pedigree':2,'apparatus':2,'nebula':6,'crust':4,'finger':1,'rational':1,';':2,'eggs':1,'discovery':1,'body':8,'prerogative.':1,'theory':2,'leg':1,'beak-like':1,'men':4,'behaviour':1,'magnetism':2,'compass':1,'dwindling':1,'tide-producing':1,'intense':1,'advance':2,'great':2,'derivation':1,'side':1,'croaking-sacs':1,'patagium':1,'action':1,'history':2,'frequent':1,'skill':1,'point':4,'feelings':1,'inquisitive':1,'long':2,'beak':2,'theory.':1,'story':1,'sake':1,'initial':1,'frog':1,'.':26,'dropping':1,'pedigree--man':1,'structure':1,'danger-note':1,'white':1,'store':1,'mundane':1,'eyes':2,'hard':1,'flight':1,'relationship':4,'cluck':1,'training':1,'shard':1,'bulk':1,'heat':2,'surface':19,'ear':1,'food-canal':1,'essays':1,'he':1,'pull':2,'wise':1,'skull':3,'solid':2,'gravitational':1,'bill':12,'fly-trap':1,'light':4,'propeller':1,'head.':1,'earth.':1,'ein':1,'and':1,'words:':1,'discovery.':1,'ingenuity':1,'horns':1,'escape':1,'mind':3,'head':3,'apartness':1,'dog':1,'shell':1,'at':1,'cathedral':1,'wonderful':1,'clothing':1,'laws.':1,'movements':2,'cage':1,'rays':5,'maxim:':1,'diurnal':1,'inheritance':1,'heat.':1,'forceps':1,'blood-relationship':1,'food':1,'strange':1,'animal':1,'hedgehog-like':1,'predestined':1,'civilisation':1,'composition':1,'conclusion':1,'vestigial':1,'nest':1,'philosophy':1,'reach':1,'hand':1,'ancestors':4,'mouth':1,'device':1,'does;':1,'sand-grouse':1,'descent':3,'mysteries':2,'remote':1,'expert':1,'foot':1,'undeniable':1,'age':2,'handiness.':1,'coastlines':1,'star-book':1,'mass':1,'gill-plates.':1,'the':2,'wing':4,'goals':1},'mane':{'reaching':1},'expended':{'their':1},'flipper':{'of':3},'expression':{'of':6,'is':1,'as':1,'are':1,'familiar':1,'instinctive':1,'has':1},'moon;':{'it':1},'riddle':{'that':1},'stoats':{'hares':1},'ants':{'and':5,'beneath':1,'bees':3,'are':1,'hive':1},'air-breathing':{'insects':1,'arthropods':3,'amphibians':1,'invertebrates':1},'boar':{'and':1,'below':1,'coloured':1,'were':1},'extinct':{'and':2,'reptile':2,'apes':1,'animals':2,'volcanoes':1,'fish':1,'flying':3,'leaving':1,'monsters':1,'neanderthal':1,'reptiles':1,'types--':1,'race':1,'in':1,'not':1,'vegetarian':2,'type':1,'or':1,'pterodactyls':1,'flightless':2},'twig':{'and':1,'breaks':1,'for':1},'want.':{'illustration':1},'fitful':{'gleams':2},'collides':{'with':1},'cetaceans':{'some':1},'stretch':{'of':1,'vast':1},'mounting':{'of':1},'lettering':{'to':1},'diurnal':{'tint.':1,'variation':1},'collided':{'with':1},'combined':{'to':1,'operation':1},'finger-tip':{'they':1},'reflective':{'one':1},'covering':{'and':1,'many':1,'is':1,'of':2},'recaptures':{'it':1},'day--a':{'long':1},'enable':{'their':1,'the':1,'us':4},'gist':{'of':2},'lakelets':{'of':1},'thousand':{'and':1,'or':2,'trillion':2,'of':1,'cells':2,'million':2,'together':1,'years':10,'millions':1,'miles':3,'.':1,'steep':1,'thousand':1,'generations':1,'times':6},'formed':{'a':1,'then':1,'has':1,'from':3,'float':1,'young':1,'it':1,'solids':1,'at':1,'sandstones':1,'in':2,'the':4,'.':2,'by':2},'haunt':{'forever':1,'for':1,'of':8,'some':1,'stops':1,'includes':1,'so':1,'which':1,'has':1},'photos':{':':5},'indents':{'the':1},'observe':{'these':1,'and':1,'in':1},'infusorians':{'to':1,'like':1},'diffuse':{'and':1,'gas':1},'co-ordination':{'of':1},'prominence':{'to':1,'by':1,'would':1},'intimately':{'associated':1,'bound':1},'dints':{'impressed':1,'have':1},'confidently':{'say':1},'situation':{'.':5,'for':1,'in':1},'region':{'smaller':1,'of':5,'is':1,'when':1,'to':1,'at':1,'known':1,'the':4,'called':1,'south':2},'girth':{'.':1},'concatenation':{'of':1},'birth.':{'enough':1},'regularity':{'of':1},'rock-cod':{'requires':1},'ascii':{'start':1,'or':2},'adopted.':{'the':1},'binary':{'compressed':1},'beginning.':{'in':1},'shuts':{'on':1},'preparatory':{'to':1},'perpetually':{'giving':1},'coconuts':{'is':1},'emulsions':{'can':1},'way.':{'this':1,'bearing':1},'wires':{'as':1,'are':1,'in':1},'sickness':{'.':5},'edges':{'and':1,'of':4},'advertisement':{'impressing':2},'six':{'meant':1,'feet':1,'great':1,'main':1,'inches':1,'very':1,'thousand':1,'months':1,'quite':1,'colours':1,'to':2,'miles':1,'greatly':1,'years':1,'weeks':1,'stages':2},'volcanoes':{'.':1},'tentacle':{'touches':1},'know':{'and':2,'almost':1,'indeed':1,'is':1,'it':4,'not':1,'as':2,'are':1,'in':1,'if':1,'fire':1,'what':1,'from':1,'their':1,'when':3,'gases':1,'.':3,'to':2,'outside':1,';':1,'be':1,'that':17,'very':1,'but':1,'nothing':1,'now':2,'with':1,'a':1,'also':1,'about':1,'to-day':2,'whether':3,'of':4,'no':1,'definitely':2,'far':1,'life.':1,'the':5,'nothing.':1,'something':1},'peculiarities':{'and':1,'of':5,'.':1,'say':1,'in':2,'such':1},'costs':{'and':2},'engulfing':{'and':1,'large':1,'in':1},'unimagined':{'.':1},'persistently':{'used':1,'resorted':1},'216':{'photo':2},'summer':{'and':2,'full':1,'darkness':1,'of':1,'green-flies':1,'months':1,'scene':2,'day':1,'plumage':1,'s':1,'does':1,'at':1,'weather.':1,'than':1},'followed.':{'illustration':1},'manifold':{'significance.':1,'influence':1},'213':{'photo':2},'being':{'already':1,'closely':1,'swept':2,'blown':1,'unpalatable':1,'able':1,'moved':1,'investigated.':1,'an':3,'held':1,'as':1,'set':2,'dried':2,'human':1,'nonplussed':1,'swallowed':2,'any':1,'given':1,'built':1,'to':1,'washed':2,'due':1,'continually':1,'liberated':1,'outside':1,'incessantly':1,'deposited':1,'surveyed':1,'endowed':1,'polygamous':1,'more':2,'a':1,'affected':1,'evolved':1,'that':3,'very':1,'mammals':1,'formed':1,'what':1,'driven':1,'imperfectly':1,'nourished':1,'dissipated':1,'on':1,'than':1,'regrown':1,'thrown':1,'begins':2,'devoured':1,'indivisible':1,'embryos':1,'frozen':2,'consumed':1,'utilised':1,'replaced':1,'greatly':1,'hurled':1,'each':1,'quick':1,'the':3,'left':1,'reinforced':1},'drone-fly':{'is':1},'slime':{'from':1},'rest':{'and':1,'repair':1,'assured':1,'of':5,'is':1,'belong':1,'.':3,'till':1,'through':1,'in':1},'steamer':{'and':1},'crust.':{'on':1},'potentiality':{'of':1},'aspect.':{'illustration':1},'water-basins':{'or':1},'ligula':{'or':1},'weekly':{'nature':1},'occasional':{'light':1,'flash':1,'traces':1},'tactility':{'.':2},'geological':{'clock':1,'time-table':1,'estimates.':1,'tree':1,'middle':1,'periods':1,'time':1,'past.':1},'silver':{'on':1,'mirror':1},'instrument':{'and':1,'again':1,'used':2,'for':3,'that':1,'of':3,'however':1,'to':1,'which':2,'in':1,'the':2,'has':1,'ever':1,'gets':1},'formative':{'times':1},'continuation':{'of':2},'prominently':{'whenever':1,'displaying':1},'form-resemblance.':{'illustration':1},'skies':{'.':1},'aspects':{'of':3,'matter':1,'folk':1,'.':1},'around':{'sun':1,'the':8,'its':1,'us':1,'an':2},'decomposed':{'into':1},'dart':{'to':1},'dark':{'sprawling':1,'and':1,'absorbing':1,'spots--they':1,'in':1,'silent':1,'nebula':1,'moorland':1,'spots':1,'forms':1,'to':1,'only':1,'parts':1,'stars':1,';':1,'body':1,'bands':2,'water':1,'heat':1,'lines.':1,'markings':1,'areas':1,'varieties':1,'corners':1,'region':1,'fringe':1,'lines':3,'matter':1,'of':1},'bandage':{'which':1},'vacuum':{'tube--the':1,'tube':7,'tubes':1,'.':2},'world':{'and':2,'would':1,'new.':1,'throwing':1,'is':4,'within':1,'an':1,'as':1,'are':2,'in':2,'provokes':1,'if':1,'wondered':1,'internat':1,'when':1,'.':13,'without':1,'too':1,'which':2,';':2,'was':1,'over':1,'then':1,'knows':1,'means':1,'becomes':1,'who':1,'but':2,'than':2,'like':1,'a':1,'about':1,'for':2,'of':7,'professor':1,'monkeys':3,'will':1,'s':1,'became':1,'can':2,'always':1,'biological':1,'the':2,'entered':1,'settled':1,'came':1,'once':1},'breakage':{'plane':1},'vague':{'idea':1},'dare':{'not':1,'say':1,'one':1},'sensational':{'stories':1,'estimates':1,'discoveries':1},'60':{'spotted':1,'000':2,'reproduced':1,'days':1},'fossils':{'we':1,'e.g':1,'of':1,'when':1,'but':1,'coloured':1,'.':1,'in':1,'binding':1,'many':1,'by':1},'pole':{'to':2,';':1,'of':5,'was':1,'in':1},'claw':{'it':1},'stationary':{'.':1},'clap':{'of':1},'65':{'photo':1,'reproduced':1},'satisfactory':{'and':1,'fossils':1,'or':1,'way':1},'fives':{'or':1},'wattle':{'or':1},'law--senses':{'of':1},'lobster':{'swimming':1},'all-pervading':{'similitude':2},'diving':{'in':1,'flying':1,'capacity':1,'but':1,'suit':1},'racial':{'evolution':2,'profit.':1,'ventures':1,'strains':1,'vigour':1,'change':2,'qualities':1,'process':1,'qualities--notably':1},'armoured':{'fishes':1},'thinks':{'of':1,'the':1,'that':3,'less':1},'wrongly':{'call':1,'shows':1},'dissociated':{'and':1},'dimensions':{'11':1,'this':1,'.':2,'cannot':1,'in':1,'than':1},'cavity':{'the':2},'memories':{'and':1,'of':3},'noon':{'of':1},'tree-snake':{'is':1},'nook':{'of':1},'favourite':{'answer':1},'semotilus':{'atromaculatus':2},'918':{'miles':1},'happened':{'to':2,'over':1,'later':1,'in':2,'one':1},'levels--the':{'tendency':1},'transmutation':{'of':1,'brighten':1,'would':2},'refer':{'to':3,'throughout':1},'scientific':{'glories':1,'methods':1,'habit':2,'mind':2,'imagination':1,'caution':1,'weekly':1,'instruments.':1,'ideas':6,'way':1,'description':1,'description.':1,'american.':1,'men':2,'problems':1,'hypothesis':1,'statement.':1,'spirit':1,'man':1,'acquisitions':1,'definition':1,'study':1,'american':1,'way.':1,'spectator':1,'position':1},'power':{'used':1,'from':1,'stations':1,'of':37,'stations.':1,'that':1,'to':1,'enough':1,'in':1,'or':1,'is':2},'intimate':{'physiological':1,'part':1,'partnership':3,'physiology':1},'sprung':{'from':1},'precious.':{'illustration':1},'endogamy':{'tending':1},'five.':{'if':1},'lens':{'and':2,'weighs':1,'of':1,'is':1,'two':1,'.':3,'four':1,'near':1,'however':1,'at':2,'resolved':1,';':1,'called':1},'stone':{'implements':3,'and':1,'neolithic':1,'curlews':1,'generates':1,'hunting':1,'resting':1,'of':1,'age':3,'implements--knives':1,'until':1,'to':1,'running':1,'.':1,'into':1,'living':1,'the':2,'trying':1,'its':1,'or':1,'age.':3},'origins':{'are':1},'swarms':{'of':1},'industry':{'and':1},'slender':{'stream':1},'side':{'and':5,'for':1,'tells':1,'of':19,'actions':1,'.':8,'to':9,'below':1,'so':2,'are':1,'veins':1,';':1,'must':1,'was':2,'by':1,'view':1},'practicable':{'to':1},'act':{'though':1,'of':2,'was':1,'against':1,'as':2,'together':1,'experimentally':1,'instinctively':1,'with':1},'composed--':{'one':1},'johnston':{'in':1},'--brushes':{'off':1},'puzzle-box':{'at':1},'diversely':{'adapted':1},'fundraising':{'.':1},'burning':{'and':1,'coal':1,'wood':1,'of':1},'image':{'and':1,'of':2,'.':1},'electricity.':{'what':1,'4':1},'surinam':{'toad':4},'carey':{'s':2},'mic.':{'sci.':1},'sneering':{'curl':1},'wave-movements':{'on':1},'lively':{'cheerful':1,'and':1,'commotion':1,'.':1},'wade':{'cautiously':1},'excrementitious':{'material':1},'snakes':{'are':3,'.':1},'tropical':{'shores':1,'africa':2},'repertory.':{'from':1,'according':1},'her':{'and':1,'silken':1,'family':2,'supply':1,'almost':1,'advantage.':1,'hand.':1,'mind':1,'hindmost':1,'young':1,'chin':1,'in':1,'arm':1,'web':1,'ancestors':1,'two':1,'stealthy':1,'short':1,'to':2,'tail':1,'eggs':6,'body':2,'life':1,'maternal':1,'offer':1,'nest':1,'attention':1,'back':2,'behaviour':1,'nimble':1,'mouth-parts':1,'intent':1,'beak':1,'instinctive':1,'teacher':2,'clumps':1,'a':1,'perceptions':1,'cocoon':1,'limits':1,'performances':1,'except':1,'range':1,'race':1,'teeth':1,'mouth':1,'relation':1},'bristles':{'.':1},'reflectors':{'and':1,'.':1},'symbiosis':{'.':1},'secretion':{'such':1,'of':1},'hen':{'leave':1,'there':1,'which':1},'bubble':{'would':1,'of':3,'ascends':1,'coloured':1,'as':1,'are':1,'were':1,'the':1,'is':2},'survives':{'in':1},'journ':{'.':2},'continents':{'and':4,'are':1,'.':1},'secreted':{'strange':1,'from':2,'by':1},'semnopithecus':{'entellus':1},'mammals':{'and':9,'among':1,'there':2,'besides':1,'show':2,'enjoy':1,'it':1,'as':2,'including':1,'are':3,'have':2,'in':1,'ourselves':1,'whose':1,'by':2,'from':1,'hoofed':1,'did.':1,'burrowers':1,'.':13,'to':2,'master':1,'emerged':1,';':2,'save':1,'is':1,'we':2,'repeat':1,'which':1,'may':1,'but':1,'like':9,'arose':1,'they':2,'such':4,'flowering':1,'now':1,'adaptive':1,'possess':1,'off':1,'especially':1,'e.g':1,'these':1,'always':1,'will':1,'very':1,'the':2,'furnish':1},'nitrogenous':{'waste':2,'material':1},'foreheads':{'well-marked':1},'another.':{'investigation':1,'sec':1,'besides':1,'illustration':1},'survived':{'and':1},'elimination':{'of':3},'mice':{'learn':1},'with':{'all':8,'pointing':1,'less':1,'frontispiece.':1,'over':1,'particular':1,'worms':2,'yellow':1,'far-reaching':1,'hind-legs':1,'experiments':1,'human':1,'signs':1,'alternative':1,'its':12,'colour-associations':1,'one':4,'cave-bear':1,'remarkable':1,'decomposing':1,'much':5,'young':2,'reason--lays':1,'better':1,'insects':1,'neighbours':1,'internal':1,'microscopic':1,'4':3,'disgust':1,'gravel':1,'instincts':1,'awareness':2,'alternating':2,'them':3,'his':11,'increased':1,'permission':1,'arboreal':1,'capacities':1,'longish':1,'balancing':1,'negative':1,'words':2,'instinctive':1,'silk':1,'motor':1,'progressive':1,'sense-organs':1,'ageing':1,'large':4,'this':11,'coco-nut':1,'each':1,'perceptual':1,'traces':1,'engravings':1,'mental':1,'intelligence':2,'energy':2,'hard':1,'some':6,'plumage':1,'us':1,'our':3,'instinct--the':1,'rough':1,'folk':1,'planetesimal':1,'what':3,'definite':1,'fingers':2,'worship':1,'difficulties':1,'rational':1,'numerous':2,'public':1,'scientific':1,'zest':1,'cellulose':1,'seaweeds':1,'out-flowing':1,'extraordinary':1,'compressed':1,'tartan':1,'by':1,'universals.':1,'both':1,'great':7,'freshwater':2,'distinctness':1,'many':3,'parts':1,'motion':1,'benevolence':2,'grain':1,'greatly':1,'atoms.':1,'warning':1,'or':2,'embryo':1,'copper':1,'equally':1,'there':1,'peculiar':1,'sweet':1,'powerful':1,'marked':1,'hearing':1,'sympathy':2,'unicellular':1,'another':4,'such':3,'faraday':1,'.':1,'open':1,'your':1,'fossil-bearing':1,'startling':1,'little':1,'her':3,'shells':1,'positive':1,'flying':1,'two':1,'particulars':1,'anyone':1,'their':9,'2':2,'which':17,'reptiles':1,'vapours':1,'life':1,'only':1,'that':1,'becoming':1,'apparent':1,'flinty':1,'stone':1,'amphibians':1,'it':7,'offers':1,'determination':1,'external':1,'excellent':1,'prodigious':2,'an':11,'active':2,'considerable':2,'those':2,'animals':1,'adaptations':1,'glory':1,'these':4,'instinct':2,'sea-anemones':1,'project':2,'matter':2,'paragraph':2,'temperatures':1,'wicketed':1,'concepts':1,'wild':1,'about':1,'more':6,'beliefs':1,'something':2,'and':1,'associated':1,'protrusive':1,'almost':2,'certain':3,'universal':1,'suggestions':2,'few':1,'general':4,'as':1,'breathing':1,'numbers':1,'aristotle':1,'in':6,'partner':2,'mediocre':1,'agility':1,'any':2,'currents':1,'masterly':1,'astonishing':1,'different':2,'awkward':1,'no':2,'unsuitable':1,'ideas':1,'immense':1,'pectoral':1,'food':1,'other':3,'coconuts':1,'animal':1,'ordinary':1,'enormous':1,'calendar-keeping':1,'rude':1,'opposite':1,'mentality':1,'unsurpassed':1,'most':1,'mankind':1,'moss':1,'mendel':1,'astronomy':1,'buttonholes':1,'man':2,'a':72,'short':1,'branches':1,'traps':1,'conscious':1,'others.':1,'professor':1,'incredible':1,'eddies':1,'peculiarities':1,'points':1,'electrons':2,'very':1,'the':149,'mating':1,'reserve':1},'pull':{'of':3,'acting':1,'which':1,'each':1,'the':3,'than':2},'rush':{'violently':1,'through':1,'of':2},'october':{'10':1,'3':2,'5':2},'stoneless':{'plum':1},'world-cloud':{'of':1},'universe--astronomical':{'instruments.':1},'nearest':{'planet':1,'to':5,'star':2,'stars':2,'of':1},'agree':{'rather':1,'to':7,'.':1,'with':1,'that':2},'darker':{'in':1},'gone':{'furthest':1,'far':1,'back.':1,'to':1,'through':1,'in':1,'wild':2,'further':1,'beyond':1,'by':1},'haunts--such':{'as':1},'certain':{'comets':1,'individuality':1,'abilities':1,'hormones--itself':1,'facial':1,'repertory':1,'is':2,'pre-arrangements':1,'number':1,'actions':1,'sounds':1,'internal':1,'depth':1,'from':1,'degree':2,'microbes':1,'that':15,'peculiarities':1,'parts':1,'black':1,'units':1,'ancestor':1,'lichens':1,'long-headed':1,'backgrounds':1,'we':1,'clever':1,'kinds':1,'desires':1,'substances':1,'ductless':1,'however':1,'effective':1,'atoms':1,'sensory':1,'dinosaurs':1,'chemicals':1,'words':1,'cases':3,'minerals':1,'types':2,'areas':1,'plants':1,'dark':2,'kind':1,'difficulties':1,'predisposition':1,'commands':1,'lines':2,'strange':1,'amount':7,'implied':1,'limit':1,'of':1,'fixed':1},'ak':{'99712':1},'cuttles':{'or':1},'am':{'of':1},'an':{'ovule':1,'impression':4,'atmosphere':1,'evolutionary':1,'earthworm':5,'astronomical':1,'egg-cell':1,'infant':3,'aquatic':1,'atomic':2,'intricate':2,'earth':1,'abundant':2,'imagined':1,'outer':1,'anvil':1,'interesting':13,'apple--out':1,'endeavour':1,'instrument':4,'advanced':1,'easy':2,'orange':1,'electrical':2,'adequate':1,'unprecedented':1,'equilibrium':1,'increased':2,'advantage':1,'arboreal':3,'inspiriting':1,'indubitable':1,'educative':1,'account':1,'indigenous':2,'answer':3,'unimportant':1,'historic':1,'asymmetrical':1,'aerolite.':1,'awful':1,'instinctive':2,'emergence':1,'antiquity':2,'association':1,'eye-piece':1,'old-established':1,'evolution':1,'onion':1,'organ':3,'extremely':1,'unnecessary':1,'absurdly':1,'emphatic':1,'intensification':1,'activity':1,'entirely':2,'automatic':3,'essential':3,'associative':1,'adaptation':1,'unsatisfied':1,'abbreviated':1,'old':1,'x-ray':2,'insignificant':1,'energy':2,'animalcule':1,'hour.':1,'inkling':2,'astronomer':2,'individual':5,'all-pervading':2,'exuberant':1,'ascent':1,'extinct':5,'electric':20,'index':1,'apparatus':2,'opaque':1,'open':1,'ice':1,'hereditary':1,'increase':2,'appreciative':1,'indian':1,'eight-armed':2,'economical':1,'inborn':2,'indication':1,'antler':1,'increasing':2,'eagle':1,'evolving':2,'earlier':4,'explosive':1,'aeroplane':2,'intimate':1,'ever-lengthening':1,'exudation':1,'illustration':6,'outfit':1,'egg':1,'extraordinary':2,'experimenting':1,'immature':2,'expansion':2,'arithmetical':1,'invisible':2,'entrancing':1,'exciting':2,'advance':1,'enormous':10,'instant':1,'indivisible':1,'envelope.':1,'exceptionally':1,'amount':1,'ineffective':1,'anthropoid':3,'invitation':1,'offshoot':1,'observation':1,'expression':1,'elongated':1,'untutored':1,'utterly':1,'exuberance':1,'intellectual':1,'echo':1,'active':1,'appropriate':1,'eleventh':1,'extraneous':1,'eventful':2,'elementary':1,'inorganic':3,'immensely':1,'electronic':1,'ether':4,'ancient':3,'elastic':1,'eclipse.':1,'alligator':2,'unknown':1,'indispensable':1,'outline':2,'approximate':1,'immense':7,'intermediate':1,'examination':2,'inner':2,'interest':1,'ounce':1,'egg-layer':1,'exploring':1,'extensive':1,'imperfect':2,'amoeba':1,'inclined':1,'immediate':1,'idea':1,'appreciation':1,'external':2,'impulse':2,'atom':16,'upright':1,'improved':1,'institution':1,'encyclopaedia':1,'otter':1,'abundance':1,'exception':1,'apprenticeship':2,'hour':2,'eclipse':3,'harmonious':1,'obvious':1,'empty':2,'historical':1,'emotional':1,'outflame':1,'average':2,'undercharged':1,'assemblage':1,'enforced':1,'angel':1,'almost':2,'expanding':1,'expedient':1,'ant':3,'aristotle':1,'element':2,'apparently':1,'everyday':1,'open-water':1,'angle':2,'infantile':1,'awkward':1,'alphabet':1,'eloquent':1,'american':2,'event':1,'instance':1,'epoch':1,'internal':2,'inquiry':1,'oar':1,'animal':19,'elephant':1,'inch':19,'ordinary':6,'intelligent':6,'explanation':2,'unutterably':1,'independent':1,'extended':1,'easygoing':1,'opposite':1,'actual':2,'object':3,'astounding':2,'insect':5,'important':6,'appreciable':1,'advertisement':1,'infinite':3,'alpha':1,'irretraceable':1,'advantageous':1,'older':1,'undeniable':1,'age':2,'electron':8,'innocent-looking':1,'ocean':2,'intruder.':1,'exceedingly':1,'experimental':2,'african':2,'inhabitant':1,'opportunity':2,'order':1},'as':{'peacock':1,'all':2,'hunger':1,'being':1,'when':2,'mackerel':1,'dancers':1,'soon':1,'rest':1,'symbols':2,'brain':1,'bright':1,'dog':1,'vastly':1,'go':1,'graptolites':1,'expressions':1,'fine':1,'yet':4,'before':2,'one':6,'slow':1,'thrilling':1,'greenwich':1,'fit':1,'sodium':2,'possible.':1,'deposits':1,'examples':2,'to':38,'must':1,'wood':1,'smolts':1,'molecules':1,'ours':1,'gills':1,'has':6,'noctiluca':1,'frogs':1,'good':1,'pre-dravidians.':1,'easily':1,'very':1,'big':1,'locusts':1,'sappers':1,'possible':2,'dark':1,'every':1,'nearly':1,'they':17,'instinctive':1,'now':1,'dr':1,'crabs':1,'worlds':1,'evolution':1,'fossils':1,'heat-waves':1,'cavendish':1,'gifted':1,'modern':1,'large':3,'rods.':1,'stuff':1,'mind-body':1,'relics':1,'each':1,'beasts':1,'amoebae':1,'imprints':1,'mathematical':1,'reactions':1,'set':3,'rats':1,'grouse':1,'curved':1,'radium':2,'creation':1,'some':1,'dead':1,'parasites':1,'miniatures':1,'among':1,'are':2,'specified':1,'body-mind':1,'our':2,'fear':1,'best':1,'happens':2,'established':1,'shown':9,'palaeolithic':1,'for':1,'1850':1,'fingers':1,'food':3,'may':1,'health':1,'monkeyish':1,'copper':1,'public':1,'iron--and':1,'can':1,'granites':1,'we':59,'wheat':1,'inert':1,'cauliflower':1,'nature':1,'equivalent':1,'valuable':1,'atoms':1,'water':2,'basalts':1,'members':1,'represented':1,'oxalic':1,'safer':1,'dwindling':1,'by':1,'change':1,'on':1,'great':2,'kids':1,'of':1,'taking':1,'chamberlin':1,'thinking':1,'cormorants':1,'other':1,'grilse.':1,'peripatus':1,'heavy':2,'equally':1,'there':6,'bricks':1,'explained':1,'powerful':2,'marked':1,'parachutists':1,'walt':1,'freely':1,'einstein':1,'thick':1,'obliging':1,'earthworms':1,'he':3,'described':1,'crocodiles':1,'distinct':1,'twenty':1,'cradles':1,'two':1,'long':9,'quickly':1,'their':4,'much':4,'sponges':1,'man':1,'was':1,'empty':1,'clever':1,'corresponding':1,'that':7,'leptocephali':1,'shoots':1,'mentality':1,'about':1,'amphibians':1,'glass':1,'heat':2,'regards':11,'external':1,'mounted':1,'with':1,'those':9,'inconspicuous':1,'darwin':2,'hour':1,'brusque':1,'reliable':1,'this':2,'sea-anemones':1,'lungbooks':1,'will':1,'matter':3,'projecting':1,'thin':1,'many':6,'cats':1,'primitive':2,'refractors':1,'distinguished':2,'ants':2,'something':2,'collecting':1,'stubborn':1,'bullhead':1,'defined':1,'is':11,'year':1,'it':60,'an':14,'professor':5,'well.':1,'pieces':1,'numbers':1,'aristotle':1,'in':30,'handle':1,'lambs':1,'any':1,'if':16,'cave-men':1,'sir':3,'different':1,'compared':2,'no':1,'shell-shock':1,'means':1,'uranium':1,'far':5,'internal':1,'useless':1,'pure':1,'elephant':1,'resembling':1,'you':2,'volplanes':1,'higher':1,'open-water':1,'used':1,'beauty':1,'though':1,'contrasted':1,'mutual':1,'rain':1,'most':2,'but':1,'significant':1,'such':2,'elvers':1,'commensalism':1,'probable':1,'a':95,'crystals':1,'safe':1,'pithecanthropus':1,'light':1,'clear':1,'sun-spots':1,'well':11,'grilse':1,'donkeys':1,'having':1,'beds':1,'these':2,'electrons':1,'mechanical':1,'at':1,'the':98,'drawing':1,'restored':2},'associating':{'certain':1},'at':{'distances':1,'all':21,'rest':2,'four':1,'london':1,'its':10,'20':1,'work.':2,'mauer':2,'paris':1,'those':1,'heidelberg':1,'dates':1,'seventy':1,'his':2,'washington.':1,'mathura':1,'birth':1,'half':1,'12:30':1,'least.':1,'colonising':1,'night':9,'fixed':1,'right':4,'learning':1,'some':4,'coldrum':1,'home':4,'once.':1,'sunrise':1,'3':1,'various':3,'between':1,'nine':2,'each':1,'things--that':1,'hundreds':1,'here':1,'nightfall':1,'by':3,'great':2,'last':4,'many':2,'dublin':1,'so':1,'times':1,'http:':6,'first':9,'cambridge':1,'successive':1,'one':6,'another':2,'250':2,'total':2,'from':1,'twenty':1,'three':1,'least':20,'.':1,'their':2,'2':1,'186':2,'gibraltar':1,'leisure.':1,'500':1,'flight':1,'www.gutenberg.org':2,'that':6,'about':1,'but':1,'92':1,'present':12,'this':7,'work':3,'piltdown':1,'abrupt':1,'4557':1,'1.':1,'and':1,'it':1,'an':7,'niagara':1,'in':1,'any':9,'these':3,'different':4,'no':3,'perhaps':1,'things':1,'other':3,'sobral':2,'which':3,'new':1,'ordinary':1,'enormous':1,'simplicity':1,'opposite':1,'our':1,'earlier':1,'hand':2,'most':1,'two':1,'last--that':1,'such':1,'a':43,'lower':1,'e':1,'ottawa':1,'st':1,'809':1,'sunset':1,'the':123,'drawing':1,'once':11},'fumbling':{'at':1},'walks':{'of':1,'slowly':1,'erect':1},'watched':{'and':1},'tranquil':{'world':1},'dawn':{'of':10,'breaking':1,'to':1},'uplifts':{'of':1},'collie':{'at':1},'pliohippus':{'about':1},'2001':{'the':1},'predestined':{'plan.':1},'puppy':{'came':1},'contemporaries':{'in':1},'fry.':{'sir':1,'j':1,'but':1},'indemnify':{'and':1},'vocabulary':{'so':1},'walk.':{'how':1},'terra':{'firma':3},'gifts':{'as':1},'herbs':{'and':1},'environing':{'difficulties':2},'dives--':{'--carrying':1},'waterhouse':{'hawkins':1},'partitioned':{'box':1},'tricks':{'given':1},'mask':{'their':1,'the':1},'mimic':{'the':1,'is':1},'mass':{'and':3,'condensed':1,'of':20,'is':2,'spinning':1,'333':1,'persisted':1,'in':2,'gave':2},'dislodgment':{'is':1},'original':{'ancestors':1,'form':2,'plain':1,'nebula':1,'crust':1,'moorings':1,'greek':1,'peculiarities':1,'cradle':2,'home':3,'hole':1,'first':1},'external':{'methods':1,'opening':1,'hangers-on':1,'of':1,'partnership':1,'pouch;':1,'registration':1,'gills':2,'pouch':1,'method':1},'period--the':{'twenty':1},'sci':{'.':2},'consider':{'a':1,'what':1,'that':1,'.':1,'possibilities.':1,'the':7,'man':1},'elements.':{'sec':1},'31900':{'4':1},'instincts':{'and':1,'where':1,'are':1,'but':1,'.':2},'landlocked':{'corners':1,'dwindling':1},'debris':{'and':1,'of':1},'upkeep':{'of':1},'welfare':{'of':2},'reasoning':{'that':1,'man':1,'.':1},'causes':{'and':1,'of':1,'sleeping':4,'.':1,'the':1,'an':3},'particles':{'and':2,'move':1,'as':1,'are':4,'suspended':1,'in':2,'250':1,'even':1,'.':3,'which':3,'travelling':2,'was':1,'more':1,'may':1,'upon':1,'he':1,'on':1,'of':17,'will':1,'were':2,'the':2,'or':1},'careful':{'and':1,'comparison':1,'reading':1,'calculation':1,'observers':1,'piecing':1,'experiments':1,'way':1,'education':1},'disciples':{'of':1},'hunting':{'enabling':1,'on':1,'leopards':2,'or':2,'small':1},'spirit':{'of':4,'.':2},'to':{'all':6,'consider':4,'remarkable':1,'land-snails':1,'relieve':1,'yellow':1,'four':2,'mild':1,'skate':1,'go':13,'follow':1,'discern':1,'whose':1,'calculate':2,'animal':1,'paris':1,'shrinkage':1,'send':1,'environment':4,'charge':1,'reptiles':1,'swoop':1,'vegetation.':1,'include':1,'crest':4,'shoot':1,'point':3,'arboreal':2,'dispense':2,'induce':1,'me':2,'smack':1,'every':2,'trough':1,'fall':4,'affect':2,'converge':1,'monkeys':2,'look':6,'exaggerate':1,'tear':1,'try':2,'this':19,'settle':2,'us.':1,'speculation':1,'tortoises':2,'prevent':1,'force':1,'ten':1,'discover':4,'jump':1,'surrounding':1,'pass':7,'link':1,'further':2,'changefulness':1,'folk':1,'paralyse':1,'inspire.':1,'what':5,'giving':1,'disentangle':1,'asia':1,'him.':1,'experiment':4,'new':3,'alertness':1,'elsewhere.':1,'fend':1,'berthelot':1,'slow':2,'sink':1,'making':1,'evolutionist':1,'100':1,'fifteen':1,'interpret':1,'wait':1,'dry':9,'great':4,'receive':2,'30':1,'alaska':1,'anchor':1,'credit':3,'amount':1,'social':1,'climb':1,'otters':1,'changes':1,'say--of':1,'secure':2,'complying':1,'africa':1,'replace':2,'put':3,'decrease':2,'instinct--a':1,'establish':2,'estimate':3,'manipulate':1,'everybody':1,'use':5,'proceed':1,'prove':1,'two':5,'almost':1,'live':4,'doubt':2,'call':2,'strike':3,'survive':2,'themselves':1,'evolve.':1,'tell':4,'more':4,'breathe':5,'substances':1,'expose':1,'impress':1,'about':2,'extinction.':1,'particular':2,'scale.':1,'hold':1,'effort':1,'fly':2,'account':6,'pursue':1,'science':1,'work':2,'pieces--a':1,'reproduce':1,'learn':15,'meet':5,'pick':1,'control':2,'compare':1,'type.':1,'tap':1,'give':17,'sense':1,'accept':2,'pieces':1,'high':1,'his':10,'something':2,'slip':1,'arise':2,'handle':1,'keep':4,'attract':1,'occur':2,'huge':1,'end':2,'sit':1,'provide':3,'travel':10,'1':1,'how':1,'vital':1,'hop':1,'answer':4,'over-population':1,'stir':1,'both.':1,'utilise':5,'sir':2,'lag':1,'eighty':1,'germinal':1,'moult':1,'produce':1,'lighting':1,'lay':2,'date':1,'such':2,'bloom':1,'grow':1,'man':15,'a':76,'attempt':2,'remember':1,'light':5,'spout':1,'element':2,'inquire':4,'maintain':2,'deposit':1,'allow':4,'enter':3,'order':1,'punting':1,'contraction.':1,'help':3,'move':7,'vary':1,'stability':1,'insurgence':1,'its':16,'perfect':1,'26':1,'fit':2,'fix':3,'water-weed':1,'equalise':1,'absence':1,'overcome':1,'them':6,'good':1,'return':5,'greater':1,'introduce':1,'break':3,'mention':1,'conquer':2,'half':1,'accumulate':2,'speculate':2,'realize':1,'maintaining':1,'possess':3,'subtler':1,'form.':1,'evade':2,'condense':2,'vibrations':1,'realise':5,'each':2,'cliffs':1,'side':5,'mean':3,'square':1,'retrieve':2,'mental':2,'generation':2,'recapitulate':1,'tip':2,'expect':2,'measure':3,'our':13,'happen':1,'witness':1,'clothe':1,'depress':1,'profit':2,'open':3,'abide':1,'strangers':1,'sustain':1,'adapt':1,'7':1,'impart':1,'medicine':1,'twenty-five':1,'cause':1,'red':1,'metchnikoff':1,'assist':1,'associate':2,'interpose':1,'given':1,'sneak':2,'reason':1,'base':1,'struggle':1,'ask':2,'obliteration':1,'cough':1,'generate':1,'reflect':1,'prepare':1,'language':1,'david':1,'turn':4,'place':2,'deep-sea':1,'loud':1,'think':12,'south':1,'predominate':1,'feed':3,'striking':1,'feel':3,'one':6,'another':13,'carry':4,'radiate':1,'ring':1,'fiji':1,'172':1,'millions':1,'guess':1,'their':13,'bite':1,'construct':2,'anyone':1,'indicate':2,'master':2,'king-crabs':1,'white':1,'bits':1,'listen':1,'efface':1,'nutrition':1,'hug':1,'x-rays':1,'that':11,'continuous':1,'serve':2,'direct':1,'part':2,'peck':1,'insect-visitors--began':1,'10':1,'require':1,'tree':2,'project':3,'matter':1,'fruits':2,'gigantic':1,'and':6,'exert':1,'modern':1,'say':46,'lull':1,'have':19,'accompany':1,'any':2,'eels':1,'offer':1,'isolate':1,'gravity':1,'note':1,'blushing':1,'build':5,'which':31,'destroy':2,'begin':8,'acquire':1,'electric':1,'trace':2,'wind-blown':1,'reach':7,'complexity.':1,'most':3,'detect':4,'eight':1,'glow':6,'expound':1,'seize':1,'professor':1,'gather':2,'science.':1,'drive':1,'face':3,'furnish':1,'weigh':1,'justify':2,'institutions':1,'incomplete':1,'show':14,'fifty':1,'bring':3,'determine':3,'tree.':1,'melt':1,'earth':2,'find':19,'wriggle':1,'generation.':1,'knowledge':1,'environing':1,'explain':9,'storms':1,'eat':1,'surroundings':1,'betray':1,'darwin':3,'hope':1,'do':17,'waltz':1,'hit':2,'get':17,'beat':1,'express':1,'watch':1,'bear':3,'instinctive':1,'dr':1,'him':3,'comply':1,'reveal':1,'evolution':1,'investigate':1,'release':1,'them.':1,'freshwater':1,'where':2,'respond':1,'traverse':1,'set':1,'resist':1,'see':9,'sea':3,'violet':1,'fail':1,'find.':1,'gravitation':1,'sail':1,'birds':2,'pressures':1,'various':1,'conceptual':1,'donate':2,'glasgow':1,'man.':3,'notice':8,'extend':1,'parental':1,'deliver':1,'succeed':1,'wear':2,'travellers':1,'distinguish':2,'come':3,'improve':1,'both':2,'protect':3,'last':3,'many':2,'contract':1,'laplace':1,'plants':1,'admit':2,'cylindrical':2,'lash':1,'swallow':1,'radio-activity':1,'supply':2,'smother':1,'kin-sympathy':1,'subscribe':1,'pole':2,'air-breathing':3,'250':1,'technicalities':1,'speak':5,'decline':1,'raise':2,'deep':1,'teach':1,'create':2,'three':1,'.':2,'whom':1,'much':1,'change':2,'mars':2,'waste':1,'500':1,'life':2,'describe':3,'flight':1,'amphibians':1,'assert':1,'observe':2,'understand':9,'reason.':1,'an':14,'diffuse':1,'those':6,'sound':1,'adaptations':1,'these':2,'leave':4,'twigs':1,'britain':1,'near':1,'suppose':9,'guide':2,'spawn':4,'apprehend':1,'lapland':1,'it':7,'sting':1,'itself':2,'blame.':1,'everyday':1,'capture':4,'different':1,'develop':1,'perform':1,'suggest':3,'make':23,'cross':1,'unite':1,'check':1,'them--as':1,'split':1,'copying':1,'crustaceans':1,'several':1,'dusk':1,'kelvin':1,'nest':1,'drink':1,'hang':1,'effect':1,'viewing':1,'moving':1,'experiment.':1,'patagonia':1,'expend':1,'in':1,'miss':1,'mother':1,'very':2,'the':388,'left':1,'mingle':1,'being':1,'uranium':1,'accurate':1,'obtain':1,'rest':1,'electrification':1,'select':1,'harmonise':1,'identify':1,'human':2,'colonise':2,'fearful':1,'readers':2,'conclude':1,'deposits':1,'board':1,'snap':1,'save':2,'humanity':1,'scientific':1,'take':11,'swim':1,'read':4,'big':2,'possible':1,'dart':1,'five':1,'know':8,'decipher.':1,'press':1,'immediately':1,'tick':2,'insert':1,'rotate':6,'backboned':1,'electronic':1,'hunt':1,'tons':1,'roll':1,'collect':2,'continue':2,'seashore':1,'soft':1,'herons':1,'side--a':1,'shed':1,'right':1,'deal':8,'titan':1,'some':21,'play':2,'certain':1,'deduce':1,'convey':1,'escape':1,'star':1,'scale':2,'avoid':2,'separate':1,'ether':1,'leap':1,'behave':1,'cloud':1,'quote':1,'prof':1,'warranties':1,'trout':1,'illustrate':2,'be':180,'incandescence':1,'obey':2,'reaching':1,'rock':1,'breed.':1,'utter':1,'become':7,'instinct':3,'littoral':1,'five.':1,'throw':4,'shine':1,'stone':1,'age.':1,'conceal':1,'practical':1,'her':2,'act':2,'or':3,'imitation':1,'within':1,'guard':1,'promise':1,'sow':1,'excrementitious':1,'propel':1,'acquiesce':1,'support':2,'transform':1,'sunlight':2,'start':2,'suit':1,'enregister':3,'attach':1,'manufacture':1,'north':2,'complete':2,'form':13,'educate':1,'ascend':1,'believe':6,'regard':1,'heat':2,'hear':1,'another.':2,'heap':1,'atom':4,'promote':1,'considerable':2,'donate.':1,'count':3,'folk-ways':1,'us':24,'record':1,'convince':1,'grasp':2,'demonstrate':1,'stages':2,'similar':2,'agree':1,'150':3,'cover':3,'year':1,'rubble':1,'muscular':1,'disease':1,'as':1,'exist':4,'paraguay':1,'domesticated':1,'trip':1,'fill':2,'discriminate':5,'inborn':1,'compel':1,'other':8,'5':1,'branch':2,'test':1,'you':5,'shrink':2,'picture':1,'repeat':1,'indemnify':1,'mankind':1,'living':1,'walk.':1,'drift':1,'terra':3,'overtax':1,'recognise':6,'scores':1,'astronomy':1,'land':3,'sail.':1,'cling':2,'assume':1,'age':2,'lift':2,'time':1},'tail':{'and':2,'often':1,'is':1,'it':1,'as':1,'are':1,'in':1,'if':1,'from':1,'seems':1,'two':1,'.':5,'rivals':1,'which':2,';':1,'by':1,'projects':1,'a':1,'always':1,'coiled':1,'of':2,'served':1},'postglacial':{'times.':1},'th':{'.':1},'lankester':{'to':1,'has':1,'says:':1,'between':1},'animals--birds':{'and':1},'degeneration':{'may':1},'case':{'we':2,'better.':1,'although':1,'no':1,'these':1,'of':38,'is':2,'there':1,'it':3,'.':3,'leads':1,'to':1,'that':1,'however':2,'they':1,'in':2,'known':1,'probably':1,'the':2,'with':2,'than':1},'cause.':{'section':1},'cloud-belts':{'and':1},'puzzled':{'over':1,'when':1},'discrepant':{'.':1},'floated':{'on':1},'square-jawed':{'short-limbed':1},'trillions':{'of':9},'c-f.':{'the':1},'interpreting':{'the':1,'in':1},'instinct.':{'the':1},'m.d':{'.':2},'condition':{'of':2,'the':1,'had':1,';':1,'.':1},'s.f.':{'3':1},'accompanying':{'diagram':1},'marvellous':{'still':1,'atom':1},'ageing':{'.':1},'laying':{'down':2,'aside':1},'joined':{'to':1,'them--a':1},'large':{'and':3,'telescope':1,'insects':1,'fish':2,'in':1,'colony':2,'number':6,'bath':1,'brain':1,'as':3,'planets':1,'mirror':2,'skulls':1,'size':2,'rhinoceros':1,'scale':3,'heads':1,'lungs':1,'ventral':1,'masses':1,'proportion':1,'.':2,'terminal':1,'internal':1,'red':2,'we':1,'testes':1,'degree':1,'that':1,'quantities':1,'eggs':1,'ovaries':1,'however':1,'haunt':1,'lens':4,'meteorites':1,'coil':1,'marine':2,'telescopes':1,'areas':1,'a':1,'animals':1,'eye-sockets':1,'gape':2,'ones.':1,'magnet':1,'gibbon':1,'amount':1,'amphibian':1,'of':1,'excesses':1,'ready-made':1,'section':1,'anthropoid':1},'dinosaur':{'about':1,'reptiles.':1,'stock':1},'sand':{'and':3,'of':1,'over':1,'so':1,'.':2},'swirling':{'seething':1},'three-millionth':{'of':2,'part':1},'harry':{'johnston':1},'small':{'and':2,'shark':1,'family':2,'insects':1,'ears':1,'spider':2,'one':1,'bright':1,'spiders':1,'such':1,'globes':1,'intestine':1,'patch':1,'frog-hoppers':1,'creatures':1,'web':1,'compared':1,'group':1,'pin':2,'organisms':1,'water-animals':1,'gossamer':1,'organism':1,'per':1,'.':3,'particles':3,'to':3,'individuals':1,'vocabulary--he':1,'fraction':3,'units':1,'figures':1,';':1,'molecules':1,'coal-field':1,'tortoise-shell':1,'polyps':1,'fry.':1,'ripples':1,'multiple':1,'minority':1,'degree':1,'that':2,'may':1,'mammals':3,'tides':2,'whirling':1,'but':2,'it':1,'lens':1,'moths':1,'scale':2,'fishes':2,'number':1,'importance':1,'quantity':2,'volume':1,'about':1,'animals':4,'pests':1,'bullet':1,'items':1,'batteries':1,'corona':1,'bee':1,'staff.':1,'part':2,'donations':1,'anthropoid':1,'shore-animals':2,'arboreal':1,'sea-anemone-like':2,'marble--there':1,'crab':3,'are':1},'mammal':{'and':1,'essentially':1,'sucks':1,'is':1,'when':1,'mind':1,'s':1,'as':1,'mind.':1,'in':1,'the':1,'stocks':1,'with':1},'autotomy.':{'in':1},'abbreviated':{'recapitulation':1},'quicker':{'than':1},'methodical':{'habits':1},'proof--embryological':{'proof--man':1},'197':{'diagram':1,'000':1},'196':{'the':1},'191':{'hornbill':1,'life-history':1,'avocet':1,'spoonbill':1,'puffin':1,'falcon':1},'hour.':{'these':1,'the':1},'193':{'early':1},'192':{'hind-leg':1,'photo':1},'past':{'and':5,'a':1,'all':1,'generation.':1,'in':1,'century.':1,'ages--for':1,'generation':1,'there':1,'upon':1,'it':1,'amphibians':1,'one':1,'.':3,'at':1,'which':1,'time':1,'the':1,'still':1,';':1,'persisting':1},'displays':{'its':1,'.':1},'pass':{'on':2,'gradually':1,'from':3,'vertically':1,'suddenly':1,'over':1,'amongst':1,'by':1,'to':4,'behind':1,'through':11,'between':1,'along':2,'straight':1,'before':1},'situated':{'near':1,'at':1},'17.--a':{'map':1},'richard':{'owen':1},'clock':{'we':1,'would':1,'.':1,'struck':1,'beating':1,';':1},'section':{'of':2,'later':1,'1':1,'3':2,'2':1,'through':3,'4':2,'5':1},'reproduction':{'a':1,'both':1,'from':1,'for':1,'may':1,'is':2,'.':5,'which':1},'scientists':{'confront':1},'method':{'and':1,'used':1,'that':1,'simple':1,'of':6,'is':2,'exactly':1,'.':1,'namely':1,'much':1,'are':1,'which':1,'you':1,'was':2,'by':2,'if':1},'contrast':{'this':1,'to':3,'with':1,'between':2},'revealing':{'an':2},'full':{'and':1,'on':1,'terms':2,'license':1,'inheritance':1,'of':5,'stop':1,'stop.':1,'project':7,'flood':1,'daylight':1,'individual':1,'fathoms':1,'extent':1,'refund':2,'dawn':1,'resources':1},'escaping':{'pursuit':1},'installations':{'.':1},'argonaut':{'in':1},'leaping':{'a':1,'at':2},'7.--the':{'visible':1},'hours':{'on':1,'we':1,'from':1,'afterwards':1,'immediately':1,'of':1,'after':1,'days':1,'forty':1,'early':1,'to':1,'old':1,'in':1,'it':1,'i.e':1,';':1,'.':4,'until':1,'before':2},'concluding':{'this':1},'november':{'19':2,'6':1},'transformation':{'of':5,'comes':1,'such':1},'refractors':{'and':1,'are':1},'riviera':{';':1},'introductory':{'note':1,'the':1},'compliance':{'with':2,'requirements':1,'for':1,'.':1},'247':{'photo':2},'experience':{'and':2,'or':1,'for':1,'though':1,'of':1,'no':1,'it':1,'but':1,'.':1,'to':1,'nothing':1,'which':2,'in':2,'not':1,'known':1,'with':1,'by':1},'anthropologists':{'and':1},'bulges':{';':1},'periodic':{'shrinkages':1,'the':1,'variations':1,'tax':1},'social':{'group':1,'intercourse':2,'becoming':1,'person.':1,'face':1,'environment':1,'life--of':1,'systems':1,'heritage':2,'institutions--all':1},'action':{'and':2,'on':1,'like':2,'facility':1,'not':1,'of':4,'is':1,'it':1,'.':4,'how':1,'in':1,'following':1,';':1,'by':1},'matter--but':{'no':1},'slope':{'to':1,'from':2,'of':1},'struggle':{'all':1,'through':1,'for':21,'against':2,'out':1},'followed':{'on':1,'rapidly':1,'that':1,'with':1,'in':1,'some':1,'up':1,'without':1,'year':1,'from':1,'the':2,'was':1,'by':2,'roentgen':1},'moorland':{'.':1},'vii':{'the':1,'.':2},'aeschylus':{'gave':1},'hard-and-fast':{'boundary':1,'lines':1},'beheld':{'in':1},'pulls':{'the':2,'every':1},'substance.':{'it':1},'coercion':{'and':1},'nerve-centres':{'keep':1},'eddington':{'even':1,'of':1,'professor':1,'tells':1},'granular':{'appearance':1},'attendance':{'on':1,'fertilises':1},'magnitude--and':{'these':1},'educability.':{'young':1},'petroleum':{'ten':1},'6':{'1914.':1,'and':1,'great':1,'inches':1,'then':1,'.':5,'1919':1,'tadpole':1,'other':1,'the':2},'evolve.':{'viii':1},'more':{'limited':1,'developed':1,'accurate':2,'dynamic':1,'purely':1,'distant':1,'abundant':1,'rapid':4,'rapidly':2,'knowledge':1,'fit':2,'interesting':3,'complex':4,'passive':1,'to':3,'willing':1,'convoluted':1,'portentous':1,'inconspicuous':1,'familiar':1,'courage':1,'nearly':1,'trouble':1,'advanced':1,'debatable':1,'generalised':1,'masters':1,'like':3,'oxygen':1,'marvellous':1,'fully':1,'radiant':1,'loosely':1,'prolonged':1,'possibilities':1,'economically':1,'intelligence':2,'energy':1,'direct':2,'likely':2,'intelligible.':1,'besides.':1,'advantageous':1,'sail':1,'uniform':1,';':2,'numerous':3,'advantageously':1,'we':1,'explosive':1,'intimate':1,'importance':1,'masterful':1,'free':3,'atoms':2,'curved':1,'complicated':5,'besides':4,'flowering':1,'intelligent':1,'intense':1,'promiseful':1,'chapter':1,'about':3,'of':5,'thickly':1,'sensitive':3,'smoke':1,'adapted':1,'or':14,'frequent':1,'and':10,'primitive':2,'powerful':2,'marked':1,'highly':2,'quickly':2,'readily':3,'startling':1,'ancient':1,'illumined':1,'erect':1,'.':4,'wonderful':2,'resolute':1,'dome-like':1,'vigorous':1,'complete':2,'successful':1,'continuous':1,'mentality':1,'conspicuously':1,'but':1,'strenuous':4,'upright':1,'natural':1,'general':1,'than':64,'must':1,'parts':1,'romantic':1,'instructive':1,'grey':1,'discriminating':1,'matter':1,'actively':1,'promising':2,'drops':1,'ascetic':1,'varied.':1,'conjectural':1,'certain':1,'it':1,'comfortable':1,'in':1,'controlled':4,'convenient':1,'emancipated':1,'eloquent':2,'till':1,'vital':2,'gateways':1,'which':1,'so':1,'smell':1,'difficult':3,'clear-cut':1,'felt':1,'convincing':1,'alert':1,'important':3,'blood':1,'nutritive':1,'freely':1,'remote':1,'for':1,'effective':1,'mobile':1,'light':1,'definitely':1,'electrons':3,'wide-awake':1,'the':2,'marsupials':1},'door':{'and':1,'is':1,'two':1,'.':1},'testes':{'.':1},'substances':{'such':1,'or':1,'like':1,'give':1,'this':1,'disintegrate':1,'near':1,'but':1,'coloured':1,'as':1,'therefore':1,'permeating':1,'which':2,'in':1,'become':1,'the':1,'has':1,';':2,'are':5},'inquisitiveness':{'a':1,'and':1},'company':{'as':1,'with':1},'berridge.':{'shoebill':1,'woolly':1,'young':1,'surinam':1,'an':1,'common':1,'harpy-eagle':1,'the':3},'one-sided':{'as':1},'tested':{'for':1,'.':1},'foundations':{'of':4},'stampings':{'.':1},'keeping':{'this':1,'the':3,'his':1},'fatal':{'as':1,'.':1},'science':{'and':1,'lenard':1,'liquefies':1,'vol':3,'is':8,'it':1,'an':1,'produced':1,'as':1,'in':1,'should':1,'for':1,'introduction':1,'.':4,'to':1,'which':1,'surpasses':1,'has':3,'was':1,'naturally':1,'we':1,'after':1,'that':1,'who':1,'but':1,'tries':1,'were':1,'arrived':1,'encourages':1,'must':1,'a':1,'on':1,'this':1,'ever':2,'reads':1,'so':1,'of':5,'the':2,'makes':1},'centrifugal':{'force':1},'agoing.':{'illustration':2},'indicating':{'the':1,'that':1},'evolved':{'a':1,'and':2,'we':1,'from':5,'all':1,'but':1,'one':1,'reptiles':1,'amphibians':1,'hand':1,'in':2,'.':2,'or':1},'learn':{'and':2,'all':1,'more':2,'that':4,'.':1,'to':7,'its':2,'how':3,'the':2,'an':1,'with':1,'by':2,'quite':1,'if':1},'knocked':{'it':1},'lamp-shell':{'lingulella':1,'ligula':1},'male':{'and':2,'parent':1,'with':1,'of':3,'fish':2,'who':2,'or':1,'sea-horse':1,'mounts':1,'s':2,'helps':1,'kurtus':1,';':1,'has':3,'makes':1,'side':1},'plants--romance':{'of':1},'beautiful':{'and':2,'stone':1,'spectacles':1,'zoological':1,'is':2,'object':1,'one':1,'flint-shelled':1,'experiments':4,'green':1,'are':1,'sight':1,'pink-flush':1,'cradle':1,'brine-shrimp':1,'robe':1,'red':1,'opalina':1},'stated':{'that':1},'cosmic':{'dust':2,'rubbish':1},'wave.':{'illustration':1},'brain-mind':{'we':1},'suggestions':{'may':1,'of':2,'have':1},'accept':{'a':1,'the':1,'all':1},'states':{'and':2,'do':1,'we':1,'copyright':1,'of':2,'who':1,'.':3,'to':1,'without':2,'swims':1,'the':1,'where':1,'check':1},'obliquely':{'on':1},'sense':{'separated':1,'a':1,'and':2,'still':1,'of':19,'except':1,'but':1,'one':1,'born':1,'which':1,'in':1,'it':2,'such':1,'the':1,'.':2},'plan.':{'in':1},'dress':{'is':3,'it':1,'that':1},'struck.':{'there':1},'salts':{'of':3,'but':2,'.':2,'to':1,'as':1,'using':1},'axis':{'cylinder':1,'that':1,'of':3,'is':1,'but':1,'.':2,'to':1,'as':1,'at':1,'in':4,'once':3},'huge':{'electric':4,'paw':1,'family.':1,'agglomerations':1,'increase':1,'carcase':1,'crocodilian':1,'cavern':1,'three-horned':1,'extinct':2,'sieve':1,'electronic':1,'infantile':1},'respective':{'bodies':1},'instruments.':{'ii':1,'the':1},'imminent':{'destruction':1},'emancipated':{'more':1,'from':1,'.':1},'fruition':{'of':1},'gannets':{'and':1},'oligocene':{'the':1,'times':1,'period':1,'n':1},'glowing':{'metal':1,'into':1,'gas':1,'gases':4,'coal':1,'mass':2,'in':1,'hydrogen':4,'with':1},'cling':{'to':1,'on':1,'together':3,'firmly':1},'relinquished':{'the':1},'creature':{'and':2,'being':1,'is':3,'fond':1,'as':2,'standing':1,'from':1,'.':4,'to':2,'too':1,'expresses':1,'save':1,'reproduced':1,'eminently':1,'that':2,'with':3,'has':2,'like':1,'retreated':1,'whether':1,'of':2,'sometimes':1,'s':2,'the':1,'profits':1},'rungs':{'of':2},'plant':{'and':2,'we':1,'would':1,'may':1,'of':1,'about':1,'called':2,'as':1,'preparing':1,'or':1},'salt.':{'this':1},'lanky':{'legs':1},'intended':{'to':2},'thickened':{'skin':1},'perrin':{'the':1,'jean':1},'plane':{'of':6,'is':1,'namely':1,'.':1,'near':1,'in':1,'the':1},'waves':{'and':4,'longer':1,'give':1,'is':1,'whatever':1,'see':1,'are':5,'in':4,'279':1,'still':1,'ether':1,'from':1,'breaking':1,'.':9,'1':1,'sparkle':1,'only':1,'too':1,'which':5,';':1,'cause':1,'sent':1,'we':1,'used':1,'that':1,'our':1,'enter':1,'like':1,'five':1,'they':3,'must':1,'carried':1,'are--measuring':1,'light':1,'culminating':1,'transmitted':2,'can':1,'of':11,'the':4,'its':1,'or':1},'mendel':{'.':1},'acquisitions':{'gradually':1,'that':1,'of':3,'as':1,'in':1,'the':2},'resemble':{'a':2,'the':1},'boarders':{'those':1},'register':{'themselves':1,'the':2},'tentacles':{'and':1,'around':1,'some':1,'it':1,'can':1,'radiate':1,'round':1,'minute':1,'are':1},'cases.':{'using':1,'the':1},'fundamental':{'substance':1,'to':1,'nature':1,'importance':1,'instruments':1,'food-supply':1,'bodily':1,'entities--matter':1,'entities':2,'unity':1,'way':2,'existences':2,'facts':1,'impressions':1,'realities':1,'matter':1},'triassic.':{'comparatively':1},'grasshoppers':{'orthoptera':1},'replied':{'is':1},'passages':{'and':1},'barnard':{'yerkes':2},'self-destructively':{'would':1},'incessantly':{'bombarded':1},'reminded':{'that':1,'in':1},'trade':{'from':1},'attitude':{'and':1,'of':1,'as':2,'there':1},'paper':{'on':1,'nautilus':3,'bait':1,'exactly':1,'packet':1,'.':1,'were':1,'in':1,'edition.':1,'lying':1},'signs':{'and':1,'of':1,'printed':1},'looks.':{'illustration':1},'its':{'precise':1,'summer':1,'walking':1,'remarkable':1,'disturbances':1,'constituents':1,'beak':1,'mission':1,'years':1,'four':1,'brain':1,'shape':1,'disc':1,'existence.':1,'victim':2,'skin':2,'existence':1,'partisans':1,'previous':1,'completion':1,'particles':2,'limbs':2,'different-lengthed':1,'outer':1,'thumb':1,'anvil':2,'striking':1,'possessors':1,'young':3,'environment':4,'surroundings':2,'tail':2,'concavity':1,'microscopic':1,'molecules':1,'tail.':1,'gyges':1,'gills':2,'main':1,'position--it':1,'first':1,'giants':1,'breathing':1,'victims':2,'cloud-belts':1,'reptilian':1,'means':1,'far':1,'big':2,'oceans':1,'mouth':2,'young.':1,'germ-cells':1,'encircling':1,'emerald':1,'rotation':1,'far-reaching':1,'wings':4,'retreat':1,'lineage':1,'evolution':1,'name':1,'course':2,'bearings':1,'solution':1,'possibilities':1,'race':2,'activity':1,'soft':1,'lesson.':1,'exquisite':1,'ears':1,'upper':2,'habitat':1,'appearance':1,'energy':3,'fully-formed':1,'back':1,'collaterals':1,'prolonged':1,'opposite':1,'legacy':1,'bare':1,'measurement':1,'home':1,'functioning':1,'mother':3,'best':3,'mottled':1,'cilia':1,'leaf':1,'probable':1,'borrowed':1,'endowment':1,'self-effacement':1,'intimate':1,'definite':2,'frond-like':1,'dormitory':1,'venom':1,'new':1,'peg':1,'hind-legs':2,'speed':1,'body':7,'core':1,'toes':1,'business':1,'leg':1,'strata':1,'atoms':3,'extraordinary':2,'magnetism':1,'salient':1,'formation':1,'egg-cocoons':1,'trunk':1,'early':1,'path':2,'canals':1,'whiteness':1,'evolution.':1,'colours':1,'enormous':1,'shaggy':1,'brilliant':1,'many':2,'leaves':1,'parts':4,'greater':1,'counterpart':1,'wave-length':1,'pattern':1,'nucleus':1,'tongue':2,'whole':2,'relatives.':1,'origin':1,'diameter':1,'primitive':1,'own':18,'heart':1,'marginal':1,'coming':1,'habitual':1,'primary':3,'race.':1,'height':1,'utilisation':1,'date':1,'eggs':2,'brain.':1,'formidable':1,'owner':2,'table':1,'mere':1,'size':3,'wings.':1,'strong':2,'eye':1,'temperature':2,'width':1,'tremendous':1,'own.':1,'two':1,'spiral':1,'long':2,'plains':1,'secret':1,'wonderful':1,'prey':1,'pool':1,'way':5,'typical':1,'diving-bell':1,'legs':1,'voracity':1,'501':1,'interests':1,'mountains':1,'head':1,'stomach':1,'fiery':1,'high-pitched':1,'wits':1,'successful':1,'feathers':1,'great':1,'validity':1,'climax.':1,'neighbour':2,'heat':3,'cranial':1,'tentative':1,'constituent':1,'hole':1,'highest':1,'effort':1,'present':3,'kind':1,'lifetime':1,'skull':2,'characteristic':1,'straight':1,'bill':1,'attached':1,'gravitational':2,'father':1,'nine':1,'vitality.':1,'growing':1,'distribution':2,'millennia':1,'history':1,'predecessor':1,'climax':4,'influence':1,'faintness':1,'surface':7,'general':1,'return':1,'partner':1,'comparative':1,'sharp':1,'mouth.':1,'dress':1,'own--a':1,'swim-bladder':2,'huge':1,'ancestors':1,'stolidity':1,'winter':2,'paw':2,'flight':2,'air-dome':1,'centre.':1,'bell-like':1,'shoulders':1,'forests':1,'reality':1,'arboreal':1,'relatives':1,'strange':1,'sentiments':1,'special':1,'influences':1,'talons':1,'estuaries':1,'mammoth':1,'ordinary':1,'axis':13,'composition':2,'development':1,'immediate':1,'electric':1,'beginnings':1,'centre':4,'neck.':1,'nest':2,'teeth':1,'reach':1,'surface--before':1,'substitute':1,'companion':1,'gill-cavity':1,'dimensions':1,'journey':3,'moving':1,'colouring':1,'saucer-shaped':1,'share':1,'movements':2,'capacity':1,'burrow':2,'structure':1,'eyes':1,'so-called':1,'short':1,'branches':2,'gullet':1,'surprising':1,'revelations':1,'light':3,'colour':5,'starting-point':1,'life':2,'persistent':1,'benefactress':1,'tale':1,'inhabitants':1,'edge':1,'mass':2,'greatest':1,'broad':1,'volunteers':1,'path.':1,'original':3,'immensity':1,'function.':1},'roots':{'and':1,'to':2,'of':2},'imaginings':{'of':1},'rapidly':{'and':4,'on':2,'we':1,'towards':1,'altering':1,'revolving':1,'between':1,'round':1,'to':1,'in':1,'changing':1,'revolved':1,'alter':1},'shifts':{'the':1,'for':4},'man-ape':{'and':1,'to':1},'coarser':{'vibrations':1},'conjugation':{'of':1},'bell-animalcules':{'a':1},'adepts':{'at':1,'in':1},'isaac':{'newton':5},'travelling':{'and':2,'rapidly':1,'faster':1,'at':5,'the':1,'with':1,'round':2},'pinions':{'.':1},'atom--that':{'what':1},'formosa':{'those':1},'tentatively':{'just':1,'sets':1},'lowell':{'evolution':1,'made':2,'who':1,'to':1,'mars':1,'observatory.':1},'entire':{'shell':2,'uselessness':1,'system':1,'absence':1,'cessation':1,'belt':1},'secondarily':{'wingless.':1},'agitated':{'and':2,'communicate':1,';':1,'electrons':1},'saltatory':{'display':1},'iridescent':{'colours':1},'weeds':{'in':1},'speculate':{'where':1,'that':1},'laboratory.':{'a':1,'an':1},'sea-urchins':{'sea-lilies':1,'and':1,'we':1},'cambrian':{'and':1,'period':5,'correspond':1,'to':1,'reached':1,'the':1},'likeness':{'to':2},'fowlers':{'and':1},'all.':{'sec':1},'loosely':{'connected':1,'.':1},'20417.txt':{'or':1},'piping':{'cry':1},'nautiloids':{'and':1,'to':1,'began':1},'found':{'the':2,'is':1,'it':1,'an':1,'at':2,'in':22,'close':1,'next':1,'its':1,'elsewhere':1,'for':1,'their':1,'there':1,'long':1,'well-formed':1,'to':4,'out':1,'vigorous':1,'around':1,'in:':1,'that':11,'far':1,'gliding':1,'however':1,'but':1,'hundreds':1,'most':1,'everywhere':1,'not':1,'along':1,'quite':1,'by':2,'he':1,'a':5,'on':3,'practically':1,'no':1,'up':1,'.':2,'eighty-seven--and':1,'e.g':1},'energetically':{'rub':1,'through':1},'physiologically':{'expensive':1,'best':2,'.':1},'reactions':{'and':2,'to':1,'.':2,'which':1,'between':2},'england':{'and':1,'.':1},'oyster-catcher':{'and':1},'resolute':{'.':1},'fewer':{'and':1,'mistakes':1},'measurement':{'.':1},'blues':{'and':1,'are':1},'niger':{'120':1,'is':1},'really':{'a':1,'radiating':1,'taking':1,'move':1,'had':1,'occurred':1,'two':1,'excessively':1,'tell':1,'are':2,'travelling':1,'gigantic':1,'important':1},'try':{'to':4,'walking':1},'neanderthal':{'and':2,'men':4,'race':2,'ravine':1,'species':2,'man':10},'psychology':{'and':1,'that':1},'sea-meadows':{'and':1,'of':1,'as':1,'to':1},'boxed-in':{'energy':1},'research':{'on':1,'.':2,'as':1,'justified':1,'has':1,'shows':1,'must':1},'misses':{'the':1},'reward.':{'the':1},'kelvin':{'and':2,'who':1,'56':1,'one':1,'s':1,'lord':1},'denoted':{'by':1},'climatic':{'conditions':2},'occurs':{'even':1,'on':2,'about':2,'from':1,'is':1,'in':1,'with':1},'chapelle-aux-saints':{'175':1,'the':1},'belief':{'is':1,'that':2,'in':2},'risen':{'three':1},'drifting':{'past':1,'life':2},'porcelain':{'are':1},'qualify':{'the':1},'gravelly':{'bed':1},'imagine':{'them':1,'that':2,'could':1,'some':1,'how':2,'the':1},'stomach':{'and':1,'to':1},'rises':{'a':1,'to':5,'and':2,'why':1,'.':2},'occur.':{'illustration':1},'producers':{'using':1,'or':1},'albatross':{'and':1,':':2},'reared':{'themselves':1},'retained':{'in':1},'english':{'serial':1,'character':1,'disciples':1},'w':{'.':30},'expedient':{'by':1,'.':1},'mangrove-trees':{'or':1,'.':1},'exhibited':{'by':1,'in':1},'delicate':{'embryo':1,'body':1,'shell':2,'larva':1,'ctenophores':1,'experiment':1,'build':1,'films':1},'impart':{'violent':1},'reversing':{'layer':2},'slipped':{'on':1,'over':1,'from':1},'thereafter':{'perhaps':1},'mimetic':{'resemblance':1},'number':{'and':2,'on':1,'develop':1,'being':1,'of':42,'is':3,'one':1,'she':1,'which':1,'mr':1,'not':1,'.':2},'slipper':{'animalcule':3},'animals--beginnings':{'of':2},'annelids':{'related':1},'star-clouds':{'will':1},'differ':{'considerably':1,'from':1,'chiefly':1,'rather':1,'as':1,'very':1,'only':1,'greatly':1,'in':3},'heads':{'and':1,'the':1,'selected':1,'breaking':1,'it':1},'world...':{'.':1},'introduction':{'of':2,'3':1,'there':1,'every':1},'cradles':{'for':1},'calculations':{'based':1,'show':1},'essays':{'on':1},'molecular':{'motion.':1,'reality':1,'motion':1,'motions.':1,'motions':2,'disintegration':1,'movement':1},'elaboration':{'known':1},'relationship':{'and':1,'with':6,'between':1},'immediate':{'access':2,'surroundings':1,'precursors':2,'cradle':1,'circle':1},'appreciation':{'of':5},'self-mutilation':{'or':1},'zeppelin':{'or':1},'licensed':{'works':1},'calendar-keeping':{'and':1},'modes':{'of':6},'diffusion':{'or':1},'ungrateful':{'to':1},'observatory':{'greenwich.':6,'of':2,'victoria':2,'near':1,'fig':1,'such':1,'the':1,'or':1,'at':1},'vocal':{'and':1,'organs':2,'cords':2,'powers':1},'determined':{'beyond':1,'by':1},'fishermen':{'whom':1},'hot.':{'crossing':1},'algol':{'is':2,'has':1},'remembers':{'that':1},'streamed':{'night':1},'possibilities.':{'illustration':1},'well-developed':{'forehead':1,'head':1,'luminous':1,'form':1},'colour-resemblance':{'was':1},'vitally':{'interlinked':1,'important':1},'germ-cells--the':{'ovum':1},'reorganisation':{'which':1},'cleverness':{'.':1,'it':1,'in':1},'odd':{'cells':1,'which':1},'fashion.':{'finally':1},'internat':{'.':1},'commotion':{'is':1},'silvery':{'jacket':1,'air-bubble--air':1,'smolts':1,'halo':1},'also':{'among':1,'rang':1,'because':1,'followed':1,'unpalatable':1,'land-snails':1,'contribute.':1,'in':5,'it':1,'marked':1,'one':1,'mild':1,'are':1,'pass':1,'seen':1,'visible.':1,'handicapped':1,'opened':1,'for':3,'belong':1,'able':1,'due':1,'anatomical':1,'to':3,'implied':1,'aerates':1,'burrow.':1,'caused':2,'has':1,'more':1,'breathe':1,'be':6,'noteworthy.':1,'towards':1,'that':1,'very':3,'offered':1,'formed':1,'serve':1,'cheaper':1,'react':1,'produce':1,'rudimentary':1,'govern':1,'known':1,'necessary':1,'the':8,'proceed':1,'a':3,'on':1,'arranged':1,'driving':1,'showed':1,'receive':1,'of':3,'drop':1,'will':1,'defective':1,'became':1,'involved':1,'found':1,'enacted':1,'changes':1,'experimental':1,'something':1},'internal':{'surfaces':4,'partnership':1,'furnishings':1,'revenue':1,'tides':1,'adjustments':1,'as':1,'surface':1,'parasites':1,'source':1,'heat':3,'secretions':1,'game':2,'atomic':1,'secretion':1,'experimenting':1,'gills':1,'structure':2,'unpaying':1},'centrosomes':{'one':1},'seized':{'the':1,'by':2},'play':{'a':2,'among':1,'we':1,'for':1,'of':3,'is':2,'an':2},'index':{'of':1},'swiftly':{'gliding':1,'electrons':1},'nasal':{'bones':1},'complexity.':{'corpuscles':1},'virus':{'or':1},'plan':{'.':1},'accepting':{'unsolicited':1,'it':1},'colliding':{'and':1,'of':1},'head-end':{'remains':1},'demand':{'a':2,'which':1},'galway':{'that':1},'whalebone':{'whales':2,'plates':2},'lessons':{'both':1,'for':1,'of':1,'began':1,'had':1,'learned':1},'long-headed':{'square-jawed':1},'sometimes':{'work':1,'almost':1,'hard':1,'marked':1,'one':1,'niggardly':1,'as':1,'manages':1,'at':1,'have':1,'seen':1,'sought':1,'slumped':1,'happens':2,'to':4,'leading':1,'make':1,'there':1,'justifies':1,'few':1,'only':1,'much':1,'helps':1,'replaced':1,'several':1,'thousands':1,'difficult':1,'swim':1,'alongside':1,'far':1,'however':1,'but':1,'sooner':1,'they':1,'competitive':1,'an':1,'a':2,'many':1,'no':1,'constitutional':1,'used':2,'deposit':1,'found':1,'the':4},'cover':{'the':2,'itself':1,'in':1,'an':1},'firma':{'and':2,'also':1},'artistic':{'race':2,'drawings':1,'sense':1},'donkeys':{'.':1},'attacking':{'a':2},'hydatina--has':{'nine':1},'far-flung':{'fire-mists':1},'golf':{'ball':2},'hoar-frost':{'or':1},'gold':{'constituted':1,'leaf':2,'is':2,'.':1,'will':1,'to':1,'in':1,'has':1,'into':1},'evaporation':{'and':1},'agassiz':{'once':1},'fatal.':{'it':1},'pill-like':{'ball':1},'hinkins':{'son.':2},'impact':{'of':2},'ape-man':{'reconstructed':1,'to':1,'as':2,'and':1},'food-signal':{'.':1},'spineless':{'cactus':1},'writes':{':':1,'so':1},'fauna--the':{'two':1},'failed':{'.':1},'life--of':{'which':1},'factor':{'which':1,'that':1},'indifference':{'to':1,'that':1},'armour':{'of':1,'or':1},'giants':{'and':2,'over':1},'noctiluca':{'whose':1,'which':1},'sand-pit':{'at':2,'must':1},'dependent':{'on':6},'liquid':{'and':1,'we':1,'when':1,'air':3,'can':1,'cling':1,';':1,'the':1,'.':3,'or':2},'adventurers':{'all':1},'flowing':{'of':1,'through':1,'out':2},'sunny':{'side':1,'bank':1},'clavius':{'the':1},'oceans.':{'they':1},'closely':{'comparable':2,'investigated':1,'corresponding':1,'resemble':1,'interwoven':1,'wrapped':2,'to':2,'resembling':1,'similar':2},'compass':{'and':1,'there':1,'possible':1},'man-of-war':{'there':1,'119':1},'4230':{'2':1},'enemy':{'home.':1},'devoured':{'by':1,'.':1},'avocet':{'s':2},'progressive':{'evolution':1,'mammals':1,'conquest':2,'mammals.':1,'.':1,'simian':1},'paddling':{'with':1,'in':1},'body.':{'this':1,'what':2,'illustration':1,'if':1},'sojourn':{'.':1},'surrendering':{'the':1},'croatia':{'and':1},'liver-fluke':{'of':1},'obscure':{'the':1,'but':2},'river':{'and':2,'heads':1,'.':3,'in':1,'the':1,'or':2},'approaching':{'the':1},'bulky':{'fuel':1},'body':{'and':14,'equally':1,'up':1,'acquired':1,'is':14,'thus':1,'one':1,'as':3,'at':1,'during':2,'in':1,'into':1,'if':1,'again':1,'containing':1,'or':2,'from':2,'possible.':1,'that':2,'decreases':1,'.':15,'to':6,'which':3,'engulfing':1,'before':1,'was':1,'until':1,'shows':1,'locate':1,'do':1,'though':1,'may':2,'becomes':1,'breaks':1,'of':11,'but':4,'were':1,'such':1,'with':2,'by':3,'sways':1,'on':1,'has':2,'always':2,'might':2,'could':2,'say':1,'worth':1,'will':1,'so':3,'overcharged':1,'keeps':1,'far':1,'the':1,'clearness':1,'called':1,'elongated':1,'are':2},'delicately':{'and':2,'built':2},'set':{'off':1,'encoding':1,'of':5,'up':4,'free':3,'electrons':1,'in':6,'forth':8,'apart':1},'ferments':{'.':1},'temperatures.':{'but':1},'enabled':{'to':3,'physicists':1,'us':1},'vertebrates':{'are':1,'or':1,'arose':1,'except':1},'sex':{'another':1,'for':1,'often':1},'see':{'among':1,'right':1,'reference':1,'is':1,'in':7,'it':1,'billions':1,'at':2,'signs':1,'our':1,'.':1,'theoretically':1,'if':1,'again':1,'what':5,'for':1,'explain':1,'that':12,'when':1,'next':1,'how':3,'much':1,'fig':1,'evidences':1,'sections':1,'into':1,'life':1,'means':1,'edge-on':1,'photograph':1,'diagram':1,'them':1,'violet.':1,'now':1,'a':8,'on':2,'evolution':1,'this':2,'later':1,'us':1,'whether':1,'paragraph':2,'so':1,'these':1,'the':7},'sec':{'.':77},'migration':{'and':1,';':1,'or':1,'up':1,'in':2},'sea':{'and':15,'cambridge':1,'salt':1,'is':2,'it':1,'117':1,'including':1,'are':3,'in':3,'.':13,'by':1,'stood':1,'for':2,'pelagic':1,'there':2,'shore':1,'should':1,'to':3,'2':1,'too':1,'has':1,'was':1,'we':1,'that':1,'very':1,'but':2,'others':1,'128':1,'rises':1,'desert':1,'a':2,'especially':1,'of':2,'as':2,'while':1,'gathers':1,'does':1,'usually':1,'the':9,'where':1,'or':2},'aberdeen':{'with':1},'outward':{'behaviour':1,'from':1,'by':1},'shower':{'of':3},'eminently':{'educable.':1,'educable':1},'foraminifer':{'polystomella':2},'taming':{'of':1},'jewels.':{'there':1},'dilutes':{'as':1},'exudation':{'of':1},'endure':{'the':1},'europe':{'a':1,'from':2,'for':1,'.':2,'so':1,'have':1,'were':1,'such':1,'slopes':1,'was':2,'or':1},'jaws.':{'power':1},'eustachian':{'tube':2},'incident':{'is':1},'mingling':{'of':1,'with':1},'things--that':{'fits':1},'energy--may':{'appear':1},'prospects':{'of':1},'lingulella':{'of':1},'improved':{'nervous':1,'habits':1,'by':1},'barely':{'separated':1},'harpy':{'occurs':1},'possible.':{'the':3,'for':1,'illustration':1},'connection':{'with':12,'however':1,'between':2},'amoeba':{'pelomyxa':1,'is':1,'61':1,'greatly':1,'overtakes':1,'pursues':1},'lash':{'large':1,'or':1},'everything.':{'sheer':1},'whole':{'prospect':1,'solar':1,'follows':1,'series':1,'is':1,'creation':1,'it':3,'earth':6,'floating':1,'civilisation':1,'declined':1,'physical':1,'stretch':1,'integrative':1,'to':1,'of':4,'world.':1,'body':1,'we':1,'universe.':1,'originated':1,'sufficient':1,'material':2,'but':1,'grilse':1,'somewhat':1,'world':3,'structure':1,'simpler':1,'a':1,'progressive':1,'bubble':1,'thing':1,'truth':1,'universe':3,'the':1,'extent':1,'or':1,'history':2},'1919':{'to':1,':':1,'.':1,'one':1},'loaf':{'taken':1},'volcanic':{'material':1,'ash':1,'gases':1,'activity':1},'bell':{'be':1,'becomes':1,'is':1,'however':1,'at':1,'which':1,'the':1,'its':1},'etre':{'of':1},'seems':{'a':1,'little':1,'transitional':1,'that':8,'almost':1,'certain':1,'clear':1,'no':2,'possible':1,'an':1,'to':19,'so':1,'at':1,'permissible':1,'of':1,'not':1,'impossible':1,'highly':1,'far':1},'acted':{'on':1},'corresponds':{'to':5,'with':1},'race.':{'the':1},'hollow':{'caves':1,'flattened':1},'unicellular':{'and':1,'protozoa':1,'plants':1,'algae':2},'agents':{'and':1},'adaptation':{'of':2,'to':5,'.':1},'church':{'pictures':1,'is':1,'there':1},'sees':{'and':1},'reflective--which':{'is':1},'belt':{'of':1,'the':1},'moon--the':{'mountains':1,'earth':1},'publishing':{'co':2},'originators':{'of':3},'lizards':{'and':2,'paddling':1,'the':1,'turtles':1},'acceptance':{'.':1},'clay.':{'the':1},'intricacies':{'of':1},'extravagant':{'in':1},'scions':{'of':1},'extreme':{'changes':1,'is':2,'end':1,'cold--an':1,'rarity':1},'firm':{'of':1,'fulcrum':1,'basis':1},'resting':{'on':2,'or':1,'during':1},'pliocene':{'and':1,'that':1,'period':1,'.':1,'as':1,'were':1,'before':1,'n':1,'or':1,'times':1},'squirrel':{'and':2,'making':1,'is':2,'with':1},'high-pitched':{'voice':1},'fire':{'a':1,'on':1,'and':1,'for':2,'is':1,'but':1,'as':1,'which':1,';':2,'until':1},'amphibians':{'and':4,'frogs':1,'some':1,'known':1,'as':1,'before':1,'sprang':2,'fed':1,'from':1,'for':1,'had':1,'.':4,'which':1,'was':1,'we':1,'towards':1,'led':1,'that':1,'burrowing':1,'altogether':1,'fishes':1,'with':3,'by':1,'retained':1,'implied':1,'were':1,'called':1},'fritz':{'mueller':1},'races':{'brethren':1,'and':1,'to-day':1,'of':6,'than':1,'met':1,'as':1,'--which':1,'go':1,'the':1,'or':2,'must':1},'representative':{'and':1,'of':6,'fauna':1,'illustrations':1,'--from':1},'formless':{'gaseous':1},'sixes':{'fives':1},'handling':{'organ':1},'uncertain':{'.':2,'some':1,'but':1,'ground':1},'7700':{'0':1},'reliable':{'a':1,'calculations':1},'admire':{'in':1},'receive':{'specific':1,'a':1,'the':3,'from':1,'them':1},'formats':{'will':1,'readable':1},'amniota':{'in':1},'projecting':{'filaments':1,'upper':1,'wire':1},'robin':{'redbreast':1},'secluded':{'retreat.':1},'pound':{'of':5,'to':1},'jettisons':{'the':1},'agitation':{'of':1},'moth':{'emerges':1,'emerging':1,'e.g':1,'is':1,'should':1,'76':1,'are':1,'the':1,'has':2,'settled':1,'automatically':1},'von':{'indetal':1},'owen':{'said':1},'binding':{'the':1},'level.':{'yet':1},'36':{'seconds':1,'photo':1},'feather-wing':{'a':1},'cerebrum':{'the':1},'owes':{'much':1},'beautifully':{'worked':1,'modified':2},'vanish':{'.':1},'acquires':{'a':1},'greenwich.':{'comet':1,'the':1,'fig':3,'typical':1},'processes--':{'1':1},'cyclostomes':{'such':1},'shorten':{'and':1},'beune':{'throughout':1,'179':1},'shorter':{'and':4,'the':1,'in':1,'period--its':1,'waves':3},'read':{'partly':1,'that':2,'these':1,'it':1,'this':1,'understand':1,'the':3,'by':1},'pecking':{'scratching':1},'serum':{'of':1},'survey':{'of':4,'the':1},'specimen':{'of':3},'knitting':{'needle':1},'snail':{'chopped':1,'and':2,'is':1,'s':2},'comprehensive':{'articles':1},'blue-greens':{'harmonise':1},'alert':{'very':1,';':1,'than':1},'viewing':{'displaying':1},'levels':{'.':2,'in':1},'leaps':{'violently':1,'along':1,'from':2,'through':1},'necessity':{'and':1,'has':1,'for':2},'mussel':{'cannot':1,'.':2},'recent':{'observation':1,'advances':2,'study':1,'eclipse':1,'discovery':1,'british':1,'times':3,'discoveries':3,';':1,'years':5,'research':2,'achievement':1,'view':1},'race-continuing':{'adaptations':1},'expend':{'this':1,'considerable':1},'inches.':{'i':1,'illustration':1},'food-plant':{'to':1,'in':1},'concrete':{'suggestions':1,'mental':1},'regulating':{'and':1,'charities':1},'qualities--notably':{'health':1},'ltd.':{'a':1,'electric':1,'this':1,'professor':1,'charles':1,'an':1,'rotating':1,'the':3},'crayfish':{'and':1},'body-building':{'by':1},'woodward':{'s':1},'abbreviation':{'the':1},'hercules':{'a':1,'108':1,'37':1},'spinners':{'let':1},'plant-like':{'animal':2},'tribe.':{'keen':1},'readers':{'who':1,'wishing':1},'recommended':{'to':1},'making.':{'but':1},'resemblances':{'to':1},'causing':{'an':1},'parents':{'and':2,'bring':1,'thrusting':2,'in':1},'types--':{'lost':1},'physics--the':{'wonders':1},'sojourning':{'for':1},'surprised':{'by':1},'putnam':{'s':2},'provisional.':{'illustration':1},'clutches':{'.':1},'victims':{'such':1,'or':1},'demands':{'.':1,'general':1},'couple':{'of':1},'wives':{'are':1},'stockholm.':{'a':1,'wing':1},'suffering':{'from':1},'sea-lettuce':{'or':1},'shading':{'off':1},'emergence':{'of':11},'projects':{'freely':1,'from':1},'heightened':{'.':1},'sorting':{'out':2},'imposed':{'by':1},'dislodged':{'sea-anemone':1},'hue.':{'there':1},'aridity':{'set':1,'led':1},'sulphite':{'screen':1},'communications':{'in':1},'well-poised':{'head':1},'continue':{'consistently':1,'on':1,'its':2,'to':5},'spiny':{'ant-eaters':1},'exquisitely':{'beautiful':1},'tribes':{'of':1},'horsetails':{'which':1},'disorder':{'and':1,'of':1},'interbreeding':{'of':1,'.':1},'irresistibly':{'suggests':1},'methods':{'and':1,'we':1,'used':1,'like':1,'that':1,'of':10,'is':1,'it':1,'.':3,'to':1,'have':1,'really':1},'spring':{'and':2,'wheat':2,'of':1,'tides':2,'tide':2,'flower-perfumed':1,'out':1},'leptocephali':{'a':1},'obscure.':{'seasonal':1,'when':1,'illustration':1,'hunger':1},'mighty':{'theory':1,'swarms':1,'globe':1,'dead':1,'swarm':1,'flame':1,'animal':1,'shadow':1},'sight':{'and':2,'this':1,'of':1,'who':1,'.':2,'in':2,'not':1,'hearing':1,'more':2},'steam-engine':{'.':1},'curious':{'about':1,'organ':1,'sideways':2,'is':1,'blood-containing':1,'thing':1},'battalion':{'of':1},'committing':{'ourselves':1},'gill-clefts--':{'a':1},'stamens':{'kneads':1,'holding':1},'measurements':{'1':1,'at':1,'which':1,'.':1},'behave':{'as':2,'like':1},'newcomb':{'popular':1,'is':1,'the':1},'dating':{'from':1},'lowell.':{'the':1},'answers.':{'the':1},'inclination':{'to':1},'be':{'invariable':1,'splitting':1,'founded':1,'sunk':1,'spaced':1,'reshufflings':1,'poorly':1,'compact':1,'to':2,'fatal':1,'separated.':1,'brown':1,'counted.':2,'radio-active':1,'exact':1,'transformed.':1,'illustrated':1,'perceived':2,'dealt':4,'small':1,'ultra-violet':1,'noted':4,'ten':1,'invaded':1,'dried':1,'picked':2,'further':1,'estimated':1,'expressive':1,'even':2,'giving':1,'beaten':1,'liberated':1,'prejudicially':1,'learned':2,'told':2,'met':1,'active':1,'implicit':1,'obtained':1,'great':1,'broken':4,'involved':1,'accomplished':1,'periodic':1,'settled':1,'composed':1,'named':1,'followed':2,'explained':3,'visible':4,'readily':2,'fed':1,'working':1,'positive':1,'wiped':1,'two':2,'therefore':1,'taken':4,'more':6,'inclined':1,'suffused':1,'known':1,'producing':1,'modified':1,'evolved':1,'following':1,'cited':1,'something':1,'allowed':1,'terrestrial':1,'influenced':1,'white-hot.':1,'unavailable.':1,'six':1,'1':1,'located':1,'called--it':1,'fostered':1,'undergoing':1,'reconciled':1,'earlier':1,'wrong':1,'understanded':1,'waves':1,'a':27,'overtaken':1,'light':1,'rather':1,'so':2,'pulled':1,'counted':2,'over':1,'interpreted':1,'produced':2,'still':2,'negotiated':1,'actually':1,'better':1,'permanent':1,'overcome':1,'affected':1,'easily':2,'indivisible.':1,'always':1,'identified':1,'applied':1,'found':11,'physiologically':1,'suspended':1,'investigated':1,'our':2,'avoided':1,'borne':1,'shown':3,'washed':1,'hastily':1,'content':2,'laid':1,'believed.':1,'given':1,'completely':1,'put':3,'universally':1,'enormous':1,'created':4,'blown':1,'omitted':2,'one':4,'done':2,'adopted':1,'directly':1,'impossible':2,'earthworms':1,'little':2,'approximately':1,'too':7,'final':1,'discovered':2,'that':11,'released':1,'somewhat':1,'eliminated':2,'convinced':1,'ungrateful':1,'frankly':1,'splendidly':1,'determined':1,'supposed':1,'17-1':1,'and':1,'lightly':1,'well':1,'confessed':1,'turned':2,'buried':1,'seen':22,'clearly':2,'built':1,'thoroughly':1,'able':5,'lit':1,'absorbed':1,'green':1,'sure':2,'clearer':1,'paid':1,'said':19,'nothing':1,'measured':2,'considered':4,'calculated':1,'sometimes':1,'inferred':1,'looked':1,'accounted':2,'left':3,'shot':1,'supported':1,'fifty':1,'rotating':1,'carefully':1,'enormously':1,'slow':2,'based':1,'going':1,'judged':2,'credulous':1,'employed':1,'guarded':1,'exceptional':1,'between':2,'liable':1,'nibbled':1,'delicately':1,'set':1,'swept':1,'seas':1,'observed':2,'luminous':2,'best':1,'subject':1,'invoked':1,'halved':1,'enough':1,'unable':1,'allotted':1,'drawn':3,'profitable':1,'we':1,'renamed.':1,'however':2,'clues':1,'improved':1,'many':1,'called':14,'plants':1,'conquered':1,'adapted':1,'asked':3,'otherwise':1,'regulated':1,'deflected':1,'associated':4,'unearthed':1,'destroyed':2,'described':6,'three':2,'quickly':1,'recognised':2,'expected':1,'copied':1,'life':3,'robbed':1,'sufficient':1,'gas':1,'worked':1,'present':1,'inconspicuous':1,'sound':1,'abandoned':2,'freely':2,'almost':1,'violently':1,'thus':1,'helped':1,'examined':2,'in':8,'reminded':1,'linked':1,'stimulated':2,'patient':1,'split':2,'agitated':1,'several':3,'difficult':1,'used':5,'upon':1,'compared':2,'arrived':1,'prophesied':1,'circumvented':1,'kept':1,'older':1,'changes':1,'constitutional':1,'thought':3,'very':11,'the':11,'realised':1,'departed':1,'less':1,'stored':1,'handed':1,'useful':4,'recapitulated':1,'rapid':1,'regarded':7,'lured':1,'transformed':2,'easy':1,'engulfed':1,'increased':1,'read':1,'dissected':1,'required.':1,'dark':1,'accepted':2,'advanced':1,'necessary':1,'like':4,'admitted':5,'either':1,'translated':3,'simply':1,'reduced':1,'right':1,'often':1,'exposed':1,'some':2,'understood':2,'curious':1,'dissociated':1,'gradually':1,'expressing':1,'eating':1,'bold':1,'remembered':4,'analysed':1,'precious.':1,'accompanied':1,'about':2,'cautious':1,'carried':1,'getting':1,'entailed':1,'of':6,'discussed':2,'urged':1,'avoided.':1,'within':1,'bound':2,'due':1,'.':4,'mere':1,'indispensable':1,'there':1,'noticed':3,'much':2,'infected':1,':':1,'forming':1,'satisfactorily':1,'removed':1,'true':4,'made':11,'arranged':1,'embedded':1,'placed':3,'below':1,'converted':2,'mature':1,'pumped':1,'clear':1,'darker':1,'proud':1,'proved':1,'moved':1,'slowing':1,'an':5,'as':5,'at':2,'constructed':1,'effected':1,'beyond':1,'inborn':1,'no':15,'discerned':1,'when':1,'dimmed':1,'other':1,'transported':1,'included':1,'fastened':1,'utilised':2,'doubted':1,'far':1},'paloloworm':{'of':1},'obscures':{'them':1},'agreement':{'and':2,'disclaim':1,'by':1,'for':2,'shall':2,'amongst':1,'.':3,'will':1,'you':3,'the':1,'with':1,'violates':1,'nor':1,'before':1},'departures':{'among':1,'from':2,'of':2,'or':2,'behaviour-variations':1,'they':1,'in':2,'occur':1},'1919.':{'taken':1},'method.':{'illustration':1},'tidal':{'action':1,'energy':1,'river':1,'theory':1,'waves':1},'-273':{'deg':1},'by':{'saying':1,'all':4,'endeavour':2,'less':1,'being':3,'gradual':1,'both':1,'seizing':1,'worms':1,'rest':1,'rotating':1,'experiments':1,'animals':1,'ice':1,'human':1,'disadvantageous':1,'glue-like':1,'budding':3,'abundant':1,'its':4,'pterodactyls':1,'homology':2,'limbs':1,'dividing':2,'consistently':1,'dubois':1,'glowing':1,'passage':2,'coaxing':1,'insects':2,'other':2,'reptiles':1,'helmholtz':1,'hideous':1,'meadows':1,'it.':1,'division':1,'them':1,'someone':1,'influences':1,'means':18,'food':1,'overflows':1,'dr.':1,'permission':20,'cutting':1,'friction':1,'prof':5,'instinctive':1,'dr':4,'day':4,'association':1,'viscid':2,'moist':1,'name':1,'profound':1,'h':1,'bay':1,'involution':1,'surrendering':1,'vibrations':2,'ductless':1,'bats':1,'mr':3,'automatic':1,'legions':1,'liberating':1,'immigrants':1,'ferments':1,'burying':1,'intelligence':1,'radium':1,'some':7,'rivers':1,'crows':1,'full':1,'sight':1,'defences':1,'our':5,'civilisation':1,'tracheate':1,'intercrossing':1,'even':1,'what':2,'still':1,'superposing':1,'ejecting':2,'driving':1,'deliberate':1,'memories':1,'circulating':1,'representatives':1,'artificial':1,'birds':2,'e-mail':1,'acting':1,'experiment':2,'various':3,'vascular':1,'out-side':1,'new':1,'falling':2,'reading':2,'numerous':2,'u.s':1,'contrast':1,'columbus':1,'blowing':1,'scientific':1,'cellulose':1,'nature':2,'men':2,'water':1,'pressure':1,'experimenting':2,'threads':1,'others':3,'holding':1,'hiding':1,'comparison':1,'great':1,'accident':1,'your':1,'g':1,'freely':1,'ribs':1,'larger':1,'lichens':1,'experience':8,'plunging':1,'periodic':1,'radiation':1,'social':1,'passing':3,'changes':1,'frequent':1,'this':3,'discharging':1,'volcanic':1,'gas-bubbles':1,'burning':1,'striking':1,'suddenly':1,'churning':1,'powerful':1,'one':2,'spinning':1,'very':1,'air-breathing':1,'incandescent':1,'motor':1,'such':3,'collisions':1,'shortening':1,'revolutionising':1,'relapses':1,'squirting':1,'considering':1,'accumulating':1,'to':1,'taking':1,'people':1,'two':3,'.':1,'their':6,'cooling':1,'physicists':1,'calculations':1,'which':13,'dalton':1,'themselves':1,'variational':1,'reflex':1,'more':1,'introducing':1,'endeavour.':1,'that':2,'fire':1,'frost':1,'amphibians':1,'jellyfishes':1,'heat':2,'carrying':1,'blood.':1,'domestication.':1,'careful':1,'travelling':1,'those':1,'plants':2,'keeping':1,'migrants':1,'applying':1,'understanding.':1,'contracting':1,'solid':1,'thousands':1,'severe':1,'air-tubes':1,'air':2,'gills':2,'many':6,'growing':1,'making':2,'providing':1,'laplace':1,'clock-work':1,'imitation':1,'and':4,'firing':1,'roentgen.':1,'biologists':1,'almost':1,'j':19,'it':1,'an':6,'collision':1,'pressing':1,'grazing':1,'numbers':1,'planets':1,'sense':1,'anything':1,'any':2,'increased':1,'terrestrial':1,'sir':2,'different':2,'beginning.':1,'no':1,'studying':1,'tucking':1,'sending':1,'uranium':1,'ideas':4,'astronomers':1,'brian':2,'mr.':1,'strange':1,'geographical':1,'peoples':1,'over-population':1,'absorbing':1,'smell':2,'continuous':1,'accidental':1,'students':1,'amphibians.':1,'hand':1,'watching':1,'chance':3,'gravitation':1,'moving':1,'kin':1,'coercion':1,'successive':2,'fishes':1,'changing':1,'causing':1,'inconceivable':1,'moons':1,'man':4,'a':57,'night':3,'using':4,'fully':1,'pithecanthropus':1,'professor':7,'circumventing':1,'itself':3,'hungry':1,'sudden':1,'these':1,'peculiarities':1,'big-brained':1,'far':1,'fresh':1,'the':161,'starting':1,'drawing':1,'contingents':1},'analysing':{'light':4,'portion':1},'evolved--destined':{'in':1},'anything':{'and':1,'for':1,'was':1,'wot':1,'into':1,'else':1,'the':1,'with':1},'modernity':{'in':1},'nautilus':{'a':1,'nautilus':1,'pompilius':1,'is':1,'it':1,'186':3,'argonauta':2,'the':1,'hardly':1,'or':1,'are':1},'ear-bones':{'of':1},'deserves':{'to':1},'hatched':{'larvae':1,'salmon':1,'.':1,'bird':2,'in':1,';':1,'the':1},'repair':{';':1,'change':1},'into':{'flippers':2,'gold':1,'being':1,'ocean-troughs':1,'existence':1,'its':10,'masses':1,'lake':1,'forms':1,'internal':1,'combination-boxes':1,'sound':1,'his':1,'very':2,'dark':1,'boxes':1,'every':2,'shreds.':1,'this':2,'glass-eels':1,'activity':2,'freshwater':1,'unit-bodies':1,'reactions':1,'smaller':1,'radium':1,'some':2,'zones':1,'our':1,'canada':1,'organisms':1,'space':4,'definite':1,'safety':1,'new':2,'fragments':1,'red':1,'power':1,'water':1,'active':2,'simpler':1,'about':1,'many':1,'mutually':1,'connection':1,'one':4,'puzzle-boxes':1,'another':1,'thick':1,'little':1,'man--the':1,'distinct':1,'two':11,'their':3,'stars':1,'white':1,'energy':2,'empty':1,'continents':1,'account.':1,'heat':1,'races':1,'pieces':1,'plants':1,'these':1,'work':1,'britain':1,'this.':1,'matter':1,'gigantic':1,'something':3,'gas.':1,'it':5,'deep':1,'an':3,'as':1,'itself':1,'eras':1,'close':2,'mountain':1,'different':1,'things':1,'unity':1,'vital':1,'electrical':1,'which':2,'emphatic':1,'independent':1,'effect':1,'waves':1,'dust':1,'such':1,'extremely':1,'man':1,'a':24,'varieties':1,'electrons':1,'the':45},'encasements':{'with':1},'appropriate':{'action':1,'trigger-pulling':1,'trigger':1,'conditions':1,'one':1},'chalk-forming':{'animals':3,'foraminifera':1},'primarily':{'restricted':1},'repaid':{'when':1},'harnessed':{'electricity':1},'claspers':{'and':1},'spending':{'our':1},'gases':{'on':1,'from':1,'exposed':1,'of':1,'is':2,'in':1,'.':3,'spread':1,'can':1,'which':1,'between':1,'with':1,'into':1},'thirdly':{'every':1,'when':1},'double-armed':{'spiral':1},'burrow.':{'evolution':1},'suit':{'and':2,'of':2,'various':1},':':{'seasonal':1,'summer':1,'all':1,'skeleton':1,'photo':80,'magnetic':1,'rotating':2,'rischgitz':6,'disintegration':1,'its':1,'before':1,'death':1,'baron':1,'royal':8,'hermit-crab':1,'to':1,'only':1,'fig':11,'stephen':2,'darwin':1,'dead-leaf':1,'protective':2,'wave':1,'early':1,'falcon':1,'silk':1,'minute':1,'james':7,'cagcombe':2,'vortex':1,'h':6,'side-view':1,'greenland':1,'life-history':1,'national':2,'spoonbill':1,'yerkes':3,'astrophysical':2,'jupiter':1,'are':1,'leadbeater.':2,'conjectures':1,'what':2,'paintings':1,'ten-armed':1,'new':10,'discovery':2,'volvox':1,'variability':1,'we':3,'full':1,'reproduced':11,'underwood':2,'harvard':4,'ernest':2,'by':1,'suggested':1,'c':2,'improved':1,'g':6,'o':2,'whence':1,'pictorial':1,'hence':1,'origin':1,'pelican':1,'elliot':1,'surinam':1,'lafayette.':1,'proterospongia':1,'throughout':1,'from':13,'there':1,'imperial':4,'storm':1,'inclined':1,'flinty':1,'albatross':1,'photos':2,'true':1,'photograph':3,'avocet':1,'f':2,'this':1,'science':1,'mount':8,'j':24,'will':1,'w':22,'reproduction':1,'gambier':6,'making':1,'male':1,'laplace':1,'http:':1,'and':1,'nautilus':1,'is':1,'modern':1,'thus':1,'it':2,'surface':1,'an':5,'arrangements':1,'niagara':1,'british':12,'in':1,'woodpecker':1,'ascii':1,'if':1,'dying':1,'january':1,'six':1,'when':1,'puffin':1,'1':4,'how':2,'rischgitz.':2,'lafayette':1,'elliott':3,'lick':4,'hornbill':1,'electric':1,'okapi':1,'after':6,'diagram':5,'genealogical':1,'restoration':2,'such':1,'inconceivable':1,'man':1,'a':28,'natural':2,'for':2,'whenever':1,'light':1,'professor':3,'daily':2,'electrons':1,'english':1,'the':38,'egg':1,'wing':1},'opens':{'and':1,'many':1,'with':1,'up':1},'considerably':{'in':1,'less':1},'excavating':{'a':2},'elsewhere':{'as':1,'.':1,'in':1,'e.g':1},'inches':{'high':1,'square':2,'off':1,'of':1,'away':2,'long':5,'one':1,'shorter':1,'to':1,'below':1,'long.':1,'in':7,';':1,'per':1},'vicissitudes.':{'the':1},'slums':{'in':1},'moon--meteors':{'and':1},'archaic':{'mammals':1,'animal':1},'link':{'lives':1},'pacific':{'and':1,'golden':1,'west':1,'oceans':1,'oceans.':1,'ocean':1,'in':1},'legs.':{'illustration':1},'atom':{'and':5,'is':7,'within':1,'it':1,'as':2,'itself':1,'are':1,'in':2,'passes':1,'amounts':1,'there':1,'.':6,'to':6,'which':1,';':2,':':1,'was':3,'energy':1,'gives':1,'known':2,'such':1,'by':1,'a':1,'of':17,'can':1,'were':1,'the':4,'or':1},'coldest':{'places':1},'line':{'represents':1,'or':1,'from':1,'that':1,'of':21,'is':2,'capable':1,'but':1,'.':2,'to':1,'can':1,'altogether':1,'seen':1,'the':1,'gave':1,'with':2,'between':1,'across':1,'at':1},'considerable':{'and':1,'force':1,'mental':1,'evidence':1,'periods':1,'.':1,'strength':1,'uniformity':1,'heights':1,'dispersion':1,'results.':1,'degree':1,'loss':1,'fascination':1,'part':1,'effort':2,'distance':3,'amount':2,'magnitude':2,'time':2,'aid':1,'changes':1,'quantity':2},'posted':{'on':1,'with':3,'at':1},'open.':{'but':1},'ut':{'84116':1},'spectroscope':{'and':3,'reveals':1,'we':3,'enables':1,'splits':1,'for':1,'49':1,'any':1,'is':5,'in':1,'it':1,'an':1,'will':3,';':2,'can':1,'which':1,'sorts':2,'the':2,'.':3,'by':1,'shows':1},'burrows':{'circulating':1},'moths.':{'illustration':1},'us':{'and':6,'consider':2,'plainly':1,'feel':1,'is':2,'others':1,'phenomena':1,'back':2,'see':2,'through':1,'something':1,'directly':1,'in':2,'pulls':1,'precisely':1,'its':1,'select':1,'even':1,'better':1,'by':2,'for':2,'how':2,'inquire':1,'there':1,'when':1,'except':1,'.':11,'particles':1,'to':19,'take':2,';':1,'across':1,'picture':1,'return':2,'little.':1,'that':7,'very':2,'some':1,'stop':1,'bear':1,'indulge':1,'not':1,'with':3,'than':2,'a':8,'on':1,'about':1,'to-day':1,'remember':1,'this':1,'many':1,'as':2,'keep':1,'try':1,'turn':1,'so':1,'of':2,'the':3,'once':1,'say':2,'at':2},'paired':{'fins':1},'ball.':{'illustration':1},'mature':{'sperm-cell':1,'egg-cell':1,'animal':1,'.':1},'laplace':{'10':1,'s':3,'one':1,'spoke':1,'to':1},'side.':{'--i':1,'--1':1},'storing':{'fishes':2,'up':1},'genial':{'climatic':1},'aerial':{'and':1,'but':1,'journeys':2},'protrusive':{'lips':1,'face':2},'creature.':{'there':1,'sec':1},'defined':{'is':1,'primitive':1},'likewise':{'a':2,'have--there':1,'evolution':1,'react':1,'connected':1,'crumbs':1,'were':1,'simpler':1},'influence':{'and':2,'on':1,'of':5,'well':1,'retreats':1,'will':1,'in':1,'the':1,'or':1,'must':1},'surpassing':{'themselves':1},'char':{'that':1},'duration':{'of':2},'diverse':{'forms':2,'territory':1,'description':1,'angles':1,'results':1},'nautical':{'almanac':2},'pontobdella':{'an':1},'living.':{'some':1,'parental':1},'element.':{'two':1},'intrepid':{'explorers':1},'puzzling':{'and':1,'phenomenon':1},'tuft':{'as':1},'fixing':{'itself':1},'uranium':{'and':1,'then':1,'x.':1,'for':1,'would':1,'may':1,'should':1,'itself':1,'salt':1,'.':3,'spontaneously':1,'are':1,'in':1,'has':1,'changes':1,'by':1,'he':1},'preventing':{'their':1,'the':1},'close-packed':{'refractive':1},'conceptions':{'of':1},'points':{'one':1,'we':1,'that':1,'clearly':1,'of':4,'away':1,'back':1,'should':1,'to':2,'in':1,'forward':1,'.':1,'or':2,'out':3},'sails':{'for':1},'revision':{'.':1},'elements':{'a':1,'on':2,'commands':1,'for':1,'oxygen':1,'that':1,'may':1,'sun':1,'into':1,'in':2,'about':1,'.':2,'to':1,'as':2,'are':4,'have':1,'each':1,'it':1,'such':1},'small-brained':{'archaic':1},'energetic':{'particles':1,'men':1,'electrons':1,'actions':1},'beginnings':{'of':4,'.':1,'on':1},'sal-ammoniac':{'but':1},'faintly':{'lit':1,'visible':2},'bibliographies':{'appended':1},'habits--the':{'truly':1},'sides':{'and':1,'of':7,'nor':1,'to':1},'ago':{'and':2,'is':2,'in':3,'it':2,'as':1,'at':1,'178':1,'174':1,'for':1,'regarded':1,'when':3,'.':10,'to':1,'that':1,'may':1,'illustration':1,'they':1,'others':1,'with':1,'a':1,'showed':1,'the':4,'or':1,'are':1},'furthest':{'in':1},'land':{'and':3,'ran':1,'is':2,'surface':1,'skimming':1,'at':2,'have':1,'.':11,'bridges':1,'tending':1,'to':1,'there':1,'had':3,'actually':1,'also':1,'5':1,'between':1,'has':3,'was':2,'over':1,'meant':1,'but':1,'by':1,'continued':1,'than':2,'plants':1,'flora':1,'animals':10,'should':2,'animals--the':1,'leaving':1,'implied':1,'many':2},'sail.':{'the':1},'reasoned':{'discourse':2},'marble--there':{'are':1},'rescued':{'triumphantly':1},'diffraction':{'grating':2},'walked':{'about':1,'through':1},'cryptozoic':{'or':1},'opposing':{'the':1},'came':{'a':2,'about':6,'from':3,'barking':1,'into':1,'to':11,'slowly':1,'in':1,'first':1,'before':1},'harks':{'back':1},'fresh':{'waters--the':1,'racial':1,'contacts':1,'starts':1,'waters':2,'air':1,'water':7,'invention':1,'gulps':1,'offshoot':1,'supplies':1,'experiments':1,'expression':1,'or':2},'having':{'a':4,'little':1,'implies':1,'no':1,'comparatively':1,'somehow':1,'to':1,'only':1,'entangled':1,'planets':1,'not':1,'learned':1,'the':2},'placentals--show':{'a':1},'repeopled':{'by':1},'hampton':{'court':3},'code':{'of':1},'partial':{'counts':1,'eclipse':1,'or':1},'rubbish':{'is':1},'illustrates':{'very':1,'the':3,'part':1,'evolution':1},'scooped':{'the':1,'out':1},'knotted':{'spiral':1},'results':{'a':1,'what':1,'which':1,'of':6,'in':1,'.':2,'to':1,'are':2,'have':1,'were':1,'affecting':1,'the':2},'existing':{'lizards':1},'illustrated':{'and':1,'on':1,'when':1,'its':1,'in':1,'the':1,'by':3},'stops':{'struggling':1,'with':1,'its':1},'broader':{'palates':1},'dainty':{'and':1},'seemed':{'then':1,'for':1,'no':1,'almost':1,'to':2,'so':1},'tearing':{'small':2,'away':1},'club-mosses':{'and':1},'iii':{'adaptations':1,'.':2},'concerned':{'chiefly':1,'is':1,'here':1,'simply':1,';':1,'with':1},'hunger':{'and':2,'is':2,'in':1},'rufous':{'brown':1},'young':{'and':2,'emerge':1,'mound-birds':1,'reeds':1,'cheetahs':2,'water-bird':1,'fish':1,'woodpeckers':1,'orang':1,'foxes':1,'one':2,'crocodile':2,'as':1,'ducklings':1,'at':1,'in':2,'earth':1,'herring':1,'birds':5,'creatures':2,'eels':4,'described':1,'for':1,'liberated':1,'perhaps':1,'bittern':2,'frog':1,'.':4,'crocodiles':1,'fishes.':1,'fry':1,'bird':1,'elver':1,'then':1,'life':1,'thrush':1,'form':1,'that':1,'mammals':1,'ones':17,'twined':1,'text-book':1,'man':1,'a':1,'about':1,'animals':1,'turtles':1,'e.g':1,'this':1,'science':1,'frog-hopper':1,'toads':1,'moorhen':1,'plovers':1,'can':2,'mammal':1,'the':1,'stages':1,'are':3},'send':{'donations':1,'it':1,'out':2},'universes--':{'island-universes':1},'citing':{'these':1},'outwards':{'from':1,'for':1},'resources':{'and':1,'of':2,'upon':1,'are':1,'more':1},'inference.':{'on':1},'matter--other':{'new':1},'garden':{'on':1},'continues':{'to':3,'the':1,'sitting':1},'waters.':{'the':1},'mouth-parts':{'the':1,'.':1},'mixing':{'colours':4,'with':1,'in':1},'continued':{'and':1,'elevation':1,'conquest':1,'.':1,'to':3,'through':1,'in':1,'the':1,'over':1},'minerals':{'the':1,'.':1},'squids':{'various':1},'archaeopteryx':{'jurassic':1,'after':1,'.':1,'91':1,'the':1,'was':1},'earth-knot':{'of':1},'back-teeth':{'were':1},'anxious':{'warning':1},'race':{'because':1,'is':1,'depends':1,'well-defined':1,'owes':1,'if':1,'living':2,'would':2,'since':1,'.':9,'to':2,'which':1,'between':1,'was':1,'lived':1,'that':1,'after':2,'but':1,'includes':2,'they':1,'now':1,'by':1,'possess':1,'a':1,'of':3,'as':1,'without':2,'through':1,'or':3,'say':1},'trypanosome':{'which':2,'that':1},'others--the':{'placentals--show':1},'trypanosoma':{'gambiense':2},'mediterranean':{'region':1,'or':1,'for':1},'wavy-to':{'curly-haired':1},'unprofitable':{'for':1},'imply':{'enormous':1,'an':1,'ether':1,'it':1},'burrower':{'which':1},'munitions':{'which':1},'primeval':{'supporting':1,'coherence':1,'vegetation':1,'amphibians':1,'stuff':2},'make.':{'the':1},'that.':{'now':1},'apparatus':{'and':1,'for':3,'being':1,'of':1,'to':1,'which':1,'fine':1,'by':1},'waning':{'of':2,'remain':1},'expressed':{'by':1,'is':1,'.':1,'itself':1,'in':1,'along':1,'the':1},'hereditary':{'and':1,'enregistration':1,'obligations':1,'items':1,'pre-arrangements':1,'qualities':1,'capacity':1,'or':1,'enemies':1},'consistently':{'the':1,'presenting':1,'offer':1},'vapours--the':{'reversing':1},'indestructible':{'and':1,'it':1},'expresses':{'emotion':1,'the':1,'itself':2,'his':1,'its':1},'guinea-pigs':{'we':1},'bird':{'flies':1,'multiplying':1,'into':1,'dived':1,'it':1,'migration':1,'in':3,'feeding':2,'had':1,'sails':1,'.':5,'to':2,'without':1,'has':3,'was':2,'shows':1,'then':1,'we':1,'showing':2,'but':1,'with':1,'than':1,'about':1,'mimicry':2,'archaeopteryx':2,'of':6,'looked':1,'s':8,'allied':1,'the':1,'or':2,'hesperornis':2},'thin':{'dry':1,'atmosphere':1,'gas':1,'gases':1,'as':1,'sheets':1,'coatings':1,'out':1},'scenery':{'on':1,'effects':1,'if':1},'advantageously':{'sensitive':1},'scepticism':{'at':1},'led':{'eventually':3,'.':1,'to':7,'our':1,'was':1,'by':1},'license.':{'1.e.6':1},'convergences':{'and':1},'leg':{'to':1,'is':2,'but':1,'.':1,'broken':1,'in':1,'across':1},'respectively':{'.':1},'gathered':{'five':1,'together':1,'obviously':1},'dressed':{'but':1},'let':{'go':1,'the':2,'themselves':1,'them':2,'us':20},'octave':{'of':1},'consideration':{'of':2,'that':1},'invented':{'to':1,'cannot':1,'by':1,'something':1},'fifteen':{'thousand':1,'or':1,'miles':1,'in':1,'minutes':2,'feet--the':1},'physiology':{'and':2,'of':1,'would':1,'.':1},'darwinism':{'and':1},'substratum':{'on':1,'was':1,'.':1},'great':{'restriction':1,'evolutionary':2,'deliberateness':1,'effect.':1,'friction':1,'swooping':1,'philosopher':1,'skill':1,'speed':2,'projection':1,'resemblance':1,'patches':1,'density':1,'distances;':1,'auk':1,'storms':1,'improvement':1,'source':1,'collections':1,'majority':5,'division':2,'advantage':2,'advances':1,'oceans':1,'theme.':1,'coal-fields':1,'school':1,'clouds':1,'gift':1,'naturalist':1,'investigator':1,'aridity':1,'rocks':1,'excellence':1,'red':1,'truth':1,'waterfalls':1,'biological':1,'river':2,'italian':1,'dexterity':1,'wariness':1,'thinkers':1,'telescope':1,'deal':4,'series':1,'globe':1,'yerkes':1,'astronomer':1,'individual':1,'measure':1,'racial':1,'factors':1,'cerebral':1,'nebula':4,'southward':1,'ice':4,'abysses':4,'increase':1,'importance':4,'leap':2,'difficulties':3,'safety':1,'steps':8,'contrast':2,'claws':2,'beetling':1,'scientific':1,'power':1,'educability':1,'french':2,'difficulty':1,'reason':1,'extent':1,'congestion':1,'cities':1,'orb':1,'change':1,'advance':1,'search':1,'piece':1,'cavities':1,'pressure':1,'many':1,'step':5,'range':1,'comet':2,'canopy':1,'changes':1,'tongues':1,'groups':1,'unrest.':1,'height':1,'channels':1,'improvements':1,'doctrine':1,'illumination':1,'ridge':1,'service':2,'outbreaks':1,'depths.':1,'question':1,'nebular':1,'.':3,'swarm':1,'secret':2,'development':1,'interest':5,'brazilian':1,'length':1,'100-inch':1,'war':2,'fire-mists':1,'gaseous':1,'fiery':1,'quantities':1,'whirling':2,'it':1,'bulk':1,'part':3,'gain':1,'wheatfields':1,'abundance':1,'divisions':1,'fold':1,'deeps':2,'plain':1,'strides':1,'official':1,'value':1,'excitement':1,'sun-spot':2,'freedom':1,'refractors':1,'and':2,'tracts':1,'discovery.':1,'comet--the':1,'modern':1,'influence':1,'haunt':1,'haunts':1,'cluster':1,'as':4,'reptiles.':1,'glaciation':1,'numbers':1,'in':1,'diversity':2,'cleverness':1,'continents':1,'pink':1,'compared':1,'club-moss':1,'variety':3,'things':1,'forests':1,'flood':1,'electrical':1,'significance':1,'intelligence':1,'physical':1,'scarlet':2,'staying':1,'ball':1,'volumes':1,'disadvantages':1,'invasions':1,'gallery':1,'spot':1,'claw':1,'falls':1,'depths':2,'leaps':1,'invasion':2,'bustard.':1,'types':1,'acquisitions':2,'zooelogical':1,'accumulations':1,'complexity':1,'races':1,'mass':1,'fundamental':1,'velocity':1,'laboratories':1,'salt':1},'engage':{'the':1},'credits':{'every':1},'technical':{'section':1,'improvements':1},'involved':{'astronomers':1,'a':2,'this':1,'in':3},'resulting':{'from':1,'spectrum':1},'opinion':{'seems':1,'as':1,'now':1,'says':1,'about':1},'residents':{'in':2},'amphibians;':{'but':1},'pleistocene':{'perhaps':3,'period':2,'while':1,'era':1,'or':1,'before':1},'involves':{'a':1,'much':1,'hard':1,'nutritive':1},'holmes':{'kept':1,'writes':1,'poked':1},'chains':{'bind':1,'is':1,'or':1,'which':1},'halfpenny':{'it':1},'complying':{'with':3},'333':{'432':1},'mariners':{'before':1},'it--whatever':{'that':1},'hedgehog-like':{'test':1},'tools':{';':1},'fit.':{'at':1},'standing':{'stones':1,'on':1,'out':1,'with':1,'before':1},'bloweth':{'where':1},'recalling':{'even':1,'the':1},'whipping':{'in':1},'self-luminous':{'.':1},'next':{'set':1,'generation':1,'period':1,'grade':1,'stroke.':1,'year':1,'tooth':1,'to':2,'few':1,';':1,'article.':1,'notice':1,'that':1,'moult':1,'chapter.':1,'atom':1,'great':1,'room':1,'morning':1,'offshoot':1,'the':1,'page':1},'eleven':{'years':1},'doubt':{'and':1,'about':1,'for':1,'that':20,'whether':1,'many':1,'there':1,'some':1,'it':1,'as':7,'at':1,'the':1,'by':1},'animal.':{'illustration':1},'doubling':{'of':1},'midday':{'work':1},'pencil':{'on':1,'upon':1},'occurred':{'about':1,'without':1,'in':1,'the':1,'along':1,'more':1},'bodily':{'and':4,'life':2,'frame':2,'immortality':1,'attributes':1,'along':1},'carrying':{'a':1,'them':3,'her':2,'an':1,'the':1,'its':2},'extinction.':{'the':1},'baby':{'reveals':1,'orang':2,'had':1,'orang-utan':2,'chimpanzees':2,'learning':1},'balls':{'on':1},'animals':{'show':2,'abundant':1,'had':1,'should':1,'to':5,'overcome':1,'take':1,'division':1,'breathing':1,'showing':1,'cannot':1,'not':2,'monkeys':1,'like':6,'where':1,'enjoy':1,'illustrating':1,'often':1,'191':1,'began--a':1,'namely':1,'sec':1,'are':12,'living':5,'hide':1,'lead':1,'below':1,'tend':2,';':2,'we':2,'were':4,'however':1,'illustration':1,'sink':1,'put':1,'come':2,'on':2,'began.':1,'e.g':2,'of':7,'allied':1,'or':5,'secure':1,'physophora':2,'61':1,'1872':1,'protozoa':1,'illustrate':1,'from':2,'would':2,'there':4,'.':14,'live':2,'themselves':1,'was':1,'that':3,'but':1,'with':2,'must':2,'made':1,'these':1,'say':1,'remain':1,'learn':1,'called':1,'and':16,'do':1,'likewise':2,'is':6,'it':2,'as':1,'have':19,'in':5,'radiolarians':1,'thoroughly':1,'began':1,'burrow':1,'globigerinid':1,'which':7,'many':1,'important':1,'such':5,'man':1,'a':2,'lower':1,'especially':1,'together':2,'without':1,'the':5,'left':1},'retreated':{'northwards':1,'within':1},'this':{'freak':1,'impression':1,'selection':1,'phenomenon':1,'being':1,'when':1,'sporting':1,'leads':1,'distant':1,'consists':1,'earth':1,'oldest':1,'reasoning':1,'tendency':1,'seemed':1,'colony-making':1,'certainly':1,'outer':2,'advance--the':1,'work.':3,'common':1,'sheaf':1,'state':3,'instrument':2,'magnetic':1,'does':2,'has':5,'might':2,'over':1,'happened':1,'kingdom':1,'then':1,'good':1,'greater':1,'advantage':1,'means':5,'very':1,'period':5,'early':2,'hermon':1,'diary':1,'probably':1,'not':1,'world':2,';':1,'vapour':1,'organ':1,'progressive':1,'did':1,'pinch':1,'pillar':1,'dinosaur':1,'stuff':1,'she':1,'reasonable':1,'succession':1,'small':1,'ultra-violet':1,'movement':2,'page':1,'view':3,'system':1,'the':6,'namely':1,'picture':2,'colossal':1,'garment':1,'globe':1,'notochord':1,'persistent':1,'relative':1,'second':1,'owing':1,'result':1,'mirror':1,'ruse':1,'belief':1,'blue':1,'project':3,'still':1,'for':1,'waning':1,'distinctive':1,'away':1,'thickness':1,'case':8,'time.':1,'race':1,'vascular':1,'new':2,'falling':1,'before':1,'method':2,'law':1,'discovery':2,'body':1,'variability':1,'wheat':1,'theory':9,'fish':1,'creature--far':1,'applies':2,'agreement':16,'possibility':1,'like':1,'extraordinary':1,'surely':1,'web':1,'marquis':1,'vigorous':1,'path':1,'estimate':2,'respect':2,'by':1,'change':2,'stage':1,'chapter':1,'on':1,'great':3,'substance':1,'license':2,'argument':1,'of':2,'motion':3,'quaint':1,'range':1,'regular':1,'lively':1,'pictorial':1,'argue':1,'makes':2,'or':1,'inference':1,'family':1,'point':9,'simple':3,'image':1,'within':2,'colony':1,'number':1,'incessant':2,'will':2,'fiery':1,'raises':1,'littoral':1,'inorganic':1,'drawing':2,'electronic':3,'attendant':1,'sympathetic':1,'little':1,'ancient':1,'lens':2,'would':2,'attraction':1,'important':1,'outline':5,'question':3,'spiral':1,'.':2,'immense':1,'wonderful':2,'low':1,'statement':1,'ocean':1,'mysterious':1,'australian':1,'scheme':1,'was':15,'energy':7,'minor':1,'gives':1,'sort':2,'direction':1,'partly':1,'way':11,'that':4,'explanation':1,'continuous':1,'gas':1,'took':1,'but':1,'haunt':1,'implied':1,'instrument.':1,'reason.':1,'particular':1,'implies':3,'rivalry':1,'white':2,'must':2,'steel':1,'pull':3,'kind':5,'made':1,'conception':1,'conviction':1,'characteristic':1,'work':11,'sifting':1,'air':1,'planet':1,'below':1,'paragraph':1,'fertilisation':1,'can':3,'cannot':1,'were':2,'merely':1,'property':1,'x-ray':2,'distance':6,'and':3,'layer':2,'constant':1,'resemblance':1,'century':1,'process':1,'molecular':1,'is':63,'modern':1,'turned':1,'it':5,'swarm':1,'an':1,'sample':1,'cluster':1,'as':1,'ether':1,'at':2,'file':2,'sense':3,'relic':1,'mysteriously':1,'apparently':1,'internal':1,'film':1,'absolute':1,'again':2,'law.':1,'moves':1,'twofold':1,'woodpecker':1,'age-old':1,':':2,'eloquent':1,'radiation':1,'thorough':1,'any':1,'note':1,'field':1,'strange':2,'inquiry':1,'ante-natal':1,'answer':1,'subject':1,'shows':1,'conclusion':1,'tension':1,'neolithic':1,'book':3,'living':1,'may':7,'ebook':6,'to':3,'diagram':2,'scale':2,'nucleus':1,'purpose':2,'position':1,'discharge':1,'bodily':1,'opportunity':1,'wonder-world':1,'a':1,'in':2,'amoeboid':1,'observation':1,'imply':1,'light':1,'voice':1,'shift.':1,'dog':1,'obviously':1,'points':1,'principle':1,'time':2,'velocity':1,'effect':2,'egg':1,'order':1,'fact':4},'cuvier':{'1769-1832':2},'pour':{'from':1},'reproduce':{'it.':1,'tell':1},'publications':{'as':1},'of':{'dissolution':1,'comparatively':1,'four':4,'straws':1,'chameleons':1,'electricity':18,'ceylon':1,'out-breeding':2,'lord':1,'arboreal':4,'pigment':2,'thinopus':1,'every':2,'radio-active':3,'vastly':1,'monkeys':5,'kataleptic':1,'unrelated':1,'relics':3,'venus':5,'clothes':1,'force':2,'senescence':1,'infancy':1,'direct':1,'surrounding':1,'second':1,'microscopists':1,'even':1,'change.':1,'organisms':2,'thunder':1,'nature.':2,'asia':1,'children':2,'change;':1,'salt-accumulation':1,'fossil':1,'new':6,'increasing':3,'ever':2,'men':7,'unexhausted':1,'atoms':25,'anthropology':1,'100':1,'cardboard':1,'dry':2,'luther':1,'light.':3,'smoke':1,'changes':1,'golden':1,'feelings':1,'patience':1,'negative':5,'civilisation.':1,'telegraph':1,'thorndike':1,'musk':2,'x-rays--the':1,'glass':3,'continual':3,'things.':1,'93':1,'92':1,'work':3,'mammalian':1,'parachuting--a':1,'mr':1,'radiance':2,'india':1,'corroborating':1,'present-day':2,'absolute':1,'reptiles--snakes':1,'nuts':1,'damages.':1,'how':2,'messrs':1,'ordinary':1,'after':1,'vicious':1,'long-continued':1,'parallel':1,'types':1,'effective':1,'carbonic':1,'order':1,'wind':1,'over':7,'crumbs':1,'symmetry':2,'bodies--evolution':2,'better':2,'them':36,'widely':1,'penetration':2,'molecules.':1,'pinkish':1,'silver':1,'oxygen':7,'brightness':1,'each':10,'telescope':2,'spider':2,'parasites':1,'armour--the':1,'hive-bees':1,'forty':1,'particles':3,'heavenly':1,'millions':6,'stamping':1,'turning':1,'monkeys--activity':1,'eternal':1,'strata':3,'free':2,'sensory':1,'struggle':1,'mastering':1,'calcareous':1,'detecting':3,'monkey':2,'enormous':2,'perhaps.':1,'cosmic':1,'days':1,'hearing':4,'another':3,'scissors':1,'thick':1,'electronic':4,'mercury':2,'ten':2,'pelagic':1,'legs':3,'dogs':1,'hydatina--has':1,'project':8,'matter':67,'torpedo-net.':1,'iron':10,'feeling':3,'oxygen-capture':1,'mind':10,'spectrum':1,'controversy.':1,'oxygen-combustion':1,'relatively':1,'affairs':3,'snow':3,'metallic':1,'chitin':2,'australia--all':1,'knowledge--the':1,'blue':1,'anatomy':1,'drought':2,'nutritive':3,'observation':1,'fitter':1,'professor':4,'metal':1,'swamps':1,'dover':1,'pollen':1,'hunger':1,'insects':8,'nerve-cells':3,'counteractive':1,'lessons':1,'latent':1,'sugar':1,'structure.':1,'fluid':1,'energy--what':2,'tuberculosis':1,'saturn':2,'dr':1,'to-day--the':1,'fields':1,'shape':1,'progress.':2,'architecture':2,'freshwater':1,'steam':3,'head-brains':1,'radium':15,'testing':1,'combustion':2,'rings':1,'artificial':1,'paternal':1,'luminescent':1,'finger':1,'caves':1,'profitable':1,'nature':18,'were':2,'wear':1,'carbon':1,'flowering':3,'caledonia':1,'out-flowing':1,'climate':3,'air--a':1,'distinction':1,'inquisitive':1,'tons':2,'250':1,'merchantibility':1,'three':2,'quickly':1,'much':4,'sponges':1,'parents':1,'life':50,'in-breeding':2,'chili':1,'air':8,'horse-power':1,'zoologists':1,'balance':1,'amphibians--the':1,'remembering':1,'seven':1,'is':1,'it':16,'brake':1,'in':1,'comparative':1,'things':5,'daughter-units':1,'damages':1,'colonies':1,'capacities':1,'typhoid':1,'rain':1,'hand':1,'kin':1,'patagonia':1,'turtle-backs':1,'opportunity':1,'butter':1,'engrained':1,'neptune':1,'contact':1,'greatest':1,'the':1665,'kinship':1,'deep-red':1,'indigo':2,'newton':2,'disguise':3,'human':9,'life-preserving':1,'yet':1,'evolution.':5,'vibration':1,'leibnitz':1,'alchemy':1,'transformed':1,'innocent':1,'humanity':1,'survival':1,'possible':3,'it--for':1,'desire':1,'melting':2,'insurgence':1,'plants--romance':1,'haunts--such':1,'homing':1,'people':1,'dead':2,'deflection':1,'jupiter':5,'escape':1,'animate':4,'proceeding':1,'ice':1,'everything':1,'conquering':2,'man--body':1,'palatable':1,'losing':1,'self-preserving':1,'primitive':4,'successive':3,'obtaining':2,'intellectual':1,'bats':2,'palaeozoic':1,'support':2,'flying':2,'jealousy':1,'sunlight':2,'grasping':1,'head':2,'forming':4,'becoming':3,'heat':14,'solar':1,'crystal':1,'meteorites.':1,'temper':1,'paragraphs':1,'muscular':1,'evidence':2,'prayer':1,'physical':1,'discriminate':1,'lungs':1,'inborn':1,'no':4,'font-de-gaume':2,'reality':1,'tin':1,'holding':1,'smell':5,'white-hot':2,'clear-cut':1,'diet':1,'rising':1,'authorities':1,'to-day':15,'potato':1,'time':10,'serious':1,'remarkable':2,'colour-change':2,'varying':1,'computation':1,'skin':7,'passage':1,'reptiles':6,'protective':3,'exact':1,'feeble':1,'minute':5,'level':1,'magnet':1,'coincidences':1,'excellence':1,'slouching':1,'backboneless':2,'speculation':1,'perceptual':2,'tortoises':1,'thinkers':1,'radium.':1,'mind--even':1,'bacteria':1,'water-plants':1,'constitution':1,'uniform':2,'wave-motion':1,'falling':1,'flame.':1,'tibet':1,'hairs':1,'mauer.':1,'water':19,'meteorites':3,'magnetism':1,'galileo':1,'change':4,'box':1,'brilliant':1,'smoke-like':1,'exploitation':1,'sex--beginning':2,'ineffective':1,'locomotion':2,'useful':2,'relations.':1,'illumination':1,'sympathetic':1,'working':2,'positive':8,'uncritical':1,'france':3,'prey':2,'assimilation':1,'cases':2,'capturing':2,'haddington':1,'avoiding':1,'nature--on':1,'inveterate':1,'stature':1,'following':1,'making':4,'warm-bloodedness':1,'breeds':1,'spy':1,'development--that':1,'238':1,'mankind--steps':1,'hydrogen':9,'rays':3,'winter':1,'condensation.':1,'species':4,'vital':3,'huge':2,'may':1,'mankind':3,'such':9,'man':52,'natural':6,'neck':1,'liquid':1,'st':1,'lagoon':1,'years':25,'course':35,'experiments':1,'cold':3,'still':3,'birds':13,'limbs':1,'apes':3,'forms':1,'physics--research':1,'ours':3,'fire-mist':1,'years--but':1,'tails':1,'half':1,'twilight':1,'name':1,'times':4,'creation.':1,'establishing':2,'rock':1,'square':1,'elephants':1,'receipt':2,'prisms':2,'woodcraft':1,'catching':1,'entering':1,'wheat--changes':1,'living':17,'space':10,'these--which':1,'looking':3,'receiving':1,'picture-logic':1,'california':1,'marine':1,'advance':2,'sparrows':1,'language':1,'tree-sloths':1,'british':1,'motion':6,'thing':1,'deep-sea':1,'learning.':1,'adventure':4,'surviving':1,'coming':1,'one':18,'gases':1,'them--':1,'field-voles':1,'rome':1,'size':2,'little':5,'man--the':1,'anyone':2,'cooling':1,'2':1,'alfred':1,'white':1,'exploring':1,'that':14,'centipedes':1,'flowers':1,'eohippus':1,'12':1,'meteors':5,'third':1,'sailing':1,'three-spined':2,'trekking':1,'cards':1,'gigantic':3,'wandering':1,'and':3,'gathering':1,'chlorophyll':1,'psychical':1,'any':20,'1903.':1,'bavaria':1,'coal':3,'efficient':1,'physiologists':1,'equipment':1,'potential':1,'hydrogen--which':1,'invertebrate':1,'printed':1,'men--conspicuous':1,'america':2,'greyish':1,'dragon-flies':1,'average':1,'later':1,'science.':2,'wing':1,'salt':2,'precise':2,'far-reaching':1,'bright':2,'uranus':1,'slow':2,'only':1,'wood':1,'flood.':1,'awareness':1,'masking':1,'space.':1,'nearly':3,'lighter':3,'primates':2,'aluminum':1,'miles':13,'girdles':1,'vision':4,'famine':1,'weapons--the':1,'registering':1,'ways':2,'definite':2,'colours':2,'man.':7,'crookes':1,'vertical':1,'parental':10,'style':1,'dome':1,'rapidly':1,'cities':1,'vaporous':1,'many':15,'contract':1,'disappointment':1,'equatorials':1,'expression':2,'radio-activity':3,'bricks':1,'colony':1,'ants':2,'60':1,'air-breathing':2,'straws.':1,'learning':3,'67':1,'extinct':2,'technicalities':1,'one-celled':2,'mars':10,'reflex':2,'500':2,'observers':1,'external':1,'attentive':1,'diffuse':1,'those':9,'sound':1,'specialised':1,'these':71,'danger.':1,'life.':5,'mound':1,'trackless':1,'sudden':1,'ferns':1,'rock-cod':1,'helium':2,'everyday':1,'movements':1,'different':15,'lava':1,'shifts':2,'speech':1,'intermediary':1,'noble':1,'oil':6,'arctic':2,'insects.':1,'persons':1,'fruit':2,'delicate':1,'waves.':1,'implements':1,'fixing':1,'bodies':2,'summer':1,'being':8,'slime':1,'actions':1,'violent':3,'touch':1,'water-basins':1,'death':3,'thinking':4,'rose':1,'geological':1,'clay.':1,'4':3,'grip':1,'around':1,'larva':1,'crustaceans':1,'dark':3,'quickness':1,'using':1,'meaning':1,'acute':1,'fossils':2,'heat-waves':1,'heredity':2,'lightning':1,'donations':1,'coal--a':1,'chronology':1,'racial':3,'ascent':2,'self-effacement':1,'semotilus':2,'critical':1,'expressing':1,'transmutation':2,'measuring':1,'iron-forming':1,'wheat':2,'scientific':3,'uneasy':1,'sixty':2,'stone':2,'beavers':1,'chamberlin':2,'mutually':1,'corals':1,'or':3,'cambridge':2,'goethe':1,'communication':3,'electricity.':1,'wave-movements':1,'your':1,'mental':2,'her':8,'camouflaging':1,'dispersion':1,'low':1,'stars':16,'energy':35,'continents':1,'wits':1,'mammals':9,'water-vapour':1,'practically':1,'grass':1,'taste':2,'certain':5,'deep':1,'general':2,'as':1,'lichen':1,'associating':1,'planets':1,'retiring':1,'meteorites--pieces':1,'deviation':1,'separate':1,'teeth':2,'fresh':1,'rainbow-colour':1,'building':3,'condensation':2,'remote':1,'bilateral':1,'dislodgment':1,'starting':1,'all':34,'suns':1,'worms':2,'seals':1,'zinc':4,'reasoning':1,'careful':1,'red-hot':2,'meteorites--a':1,'wyoming':1,'postglacial':1,'devonian':1,'very':6,'combustible':1,'fat':1,'coloured':2,'trillions':5,'interpreting':2,'instinct.':1,'condition':1,'elusiveness.':1,'prolonged':2,'large':4,'dinosaur':1,'sand':2,'small':10,'mount':2,'rats':1,'methodical':1,'past':2,'invention':2,'1904-5':1,'further':1,'creatures':2,'babylonia':1,'what':25,'sun':1,'emotions':1,'thickness':1,'public':1,'movement':7,'condensed':1,'escaping':1,'malaria':1,'answers':1,'behaviour':14,'1843':1,'compliance':2,'experimenting':3,'miniature':2,'social':2,'action':2,'matter--but':1,'sticking':1,'family':3,'transit':1,'africa':1,'inorganic':2,'eye':1,'discriminative':1,'distinct':1,'petroleum':1,'two':7,'comparing':1,'promoting':2,'minor':1,'more':5,'horses':2,'substances':2,'chimpanzee':2,'particular':2,'stampings':1,'weathering':1,'science':29,'nine':1,'spontaneous':1,'beautiful':1,'messages':1,'stinging':3,'niagara':3,'sharp':1,'flint':1,'offspring':2,'terrestrial':6,'viviparity':1,'glowing':7,'civilisation':2,'germinal':1,'blood':1,'waves':10,'prospecting':1,'a':310,'life-forms':1,'pithecanthropus':8,'sun-spots':2,'renewing':1,'shore':1,'tentacles':2,'cases.':1,'perception':2,'healthfulness':1,'music.':1,'egg':2,'playing':2,'paper':3,'existence':1,'its':73,'club-mosses':1,'25':2,'26':1,'20':1,'solving':1,'gentleness.':1,'late':1,'microscopic':3,'it.':1,'good':2,'food':13,'compound':1,'association':4,'instructions':1,'mystery':1,'exquisite':1,'predatory':1,'heavy':1,'england':2,'restless':2,'nitrogenous':1,'fish':1,'hard':1,'energy.':1,'trilobites--jointed-footed':1,'neanderthal':3,'research':1,'nautiloids':2,'safety':3,'7':1,'celebes':1,'meteoric':2,'rejuvenescence':1,'bass':1,'extraordinary':2,'reason':2,'rainbow-tinted':1,'metamorphosis':1,'computers':1,'round':1,'copper':4,'limestone':1,'mimetic':1,'soapy':1,'star-clouds':1,'earthworms':1,'horse':3,'temperature':6,'twenty':2,'186':4,'gibraltar':1,'einstein.':1,'molecular':1,'aristocracy':1,'relationship':1,'1919':1,'1918':1,'part':1,'half-made':1,'sheer':2,'dissection--or':1,'egg-cells':2,'messrs.':1,'ages':7,'germ-cells--the':1,'atoms--the':2,'flaming':2,'scotland':2,'moist':1,'labour':6,'useless':2,'sea-perches':1,'eggs':7,'most':5,'achievement':1,'branching':1,'galway':1,'evolution--factors':1,'mobile':1,'seething':1,'electrons':32,'physics':6,'lying':2,'stones':1,'hoar-frost':1,'gold':6,'disturbances':2,'to-day.':1,'hereditary':3,'fine':1,'giant':2,'securing':1,'mauer':1,'nervous':2,'fishes--the':1,'less':1,'gills':1,'darwin':3,'his':27,'trees':2,'germ-cells':2,'rest':1,'instinctive':5,'silk':4,'stone.':1,'birds.':1,'common':2,'activity':2,'experiments;':1,'body':4,'art':1,'intelligence':12,'sex':1,'individual':5,'aberdeen':1,'practice':1,'gravitation':3,'pictures':2,'classes':1,'various':8,'conditions':1,'europe':3,'responses':1,'craters':1,'invisible':1,'both':2,'attainment':1,'foreign':1,'tactility':1,'amoeba':2,'experimental':1,'distress':1,'supply':1,'simple':3,'whatever':2,'whelk':2,'unicellular':1,'incandescent':1,'zeta':2,'decline':1,'damp':1,'brick':1,'meeting':1,'treatment':1,'modern':20,'flight':11,'fire':3,'gas':8,'amphibians':8,'reason.':1,'magnetised':1,'plants':4,'opportunity.':1,'solid':4,'straight':1,'ape-like':1,'lenard':1,'moth':1,'itself':2,'currents':1,'saline':1,'communal':1,'trial':2,'pecking':1,'yucca':1,'higher':5,'development':3,'brooding':1,'moving':4,'birch':1,'recent':5,'lower':2,'luminescence':1,'sight.':1,'chickens':1,'concrete':1,'body-building':1,'pigeons':2,'matter.':4,'space;':1,'atomic':1,'matter;':1,'praying':1,'letting':1,'cut':1,'internal':5,'deliberately':1,'heidelberg':3,'chess':1,'australia':7,'reptilian':1,'showing':1,'stockholm.':2,'life--a':1,'wings':1,'insect':1,'ponds':1,'individuals':1,'mathematical':2,'methods':1,'spring':1,'creation':4,'some':25,'yolk':3,'sight':3,'curious':1,'sieves':1,'pitchblende':2,'civilization':1,'300':2,'lakes':1,'tidal':2,'starlings':1,'intense':1,'analysing':1,'feigning':1,'prothyl':1,'modernity':1,'deepish':1,'chaps.':1,'naturalists':1,'chalk-forming':2,'deep-violet':1,'statistics':1,'placing':1,'long':3,'mimicry':2,'mountains':1,'inches':1,'adjusting':1,'frost':1,'fisheries':1,'atom':1,'energy--traceable':1,'migrating':1,'considerable':2,'hair':1,'skull':2,'characteristic':2,'spectroscope':1,'sifting':3,'us':3,'similar':2,'non-living':1,'flow':1,'sepia':1,'warning':2,'dragging':1,'whirligig':2,'tentative':1,'heat.':1,'endurance':1,'uranium':3,'occasional':1,'explaining':3,'elements':2,'energetic':1,'problems':1,'astronomy.':1,'allowing':1,'fishes':11,'cuttlefish':1,'structure':3,'temperament':1,'land':4,'reasoned':2,'age':1,'attaining':2,'conjugal':1,'ready-made':1,'knotted':1,'existing':1,'disintegration':1,'rufous':1,'young':2,'stable':1,'indicating':1,'breathing':1,'matter--other':1,'moribund':1,'putting':3,'intelligence--of':1,'minerals':1,'race':1,'smaller':1,'gripping':1,'rivers':2,'fermenting':1,'unavailable':1,'opaque':1,'giving':2,'slight':1,'habituation':1,'atoms--different':1,'experiment':1,'bird':1,'scenery':1,'let':2,'fifteen':1,'physiology':1,'extreme':1,'great':21,'evolution--the':1,'amphibians.':1,'haunts':1,'leaving':1,'evading':2,'stars--the':3,'opinion':2,'marmosets':1,'it--whatever':1,'tools':1,'cloud':2,'lime':2,'use':2,'from':4,'doubt':1,'contentment':1,'crab':1,'oily':1,'visibility':2,'bodily':1,'opposing':1,'animals':21,'this':81,'us.':1,'crickets':1,'reeds':2,'calculation':1,'high':3,'birnam':1,'something':4,'water.':3,'sir':7,'counting':1,'six':2,'animal':17,'hormones':2,'intelligent':4,'tension':1,'maternal':1,'them--simple':1,'sugar-bird':1,'primers':1,'tethering':1,'light':49,'lines':1,'predacious':1,'evolutionary':1,'unpalatable':1,'130':1,'agricultural':1,'ease.':1,'burning':1,'la':2,'water-weed':2,'surgeons':1,'vibration.':1,'labor':1,'instruments':1,'derivative':1,'greater':1,'material':2,'billiard':1,'rotation':2,'day':1,'worlds':2,'profound':2,'slipping':1,'truth':2,'pools':1,'lung':1,'evolution--how':1,'doing':3,'cultivated':2,'whitish':1,'books':2,'separating':2,'our':53,'sexual':1,'special':2,'gossamer':4,'time.':1,'exporting':1,'red':7,'lizzie':2,'electricity--electric':1,'mares':1,'organic':4,'behaviour.':2,'south':1,'disembodied':2,'activity.':1,'quality':2,'ancient':5,'nebulae':3,'all--the':1,'their':48,'nebular':1,'time--man':1,'mankind--notably':1,'hearing.':1,'inner':1,'x-rays':9,'negro':1,'manipulation':1,'branches':1,'july':2,'shrapnel':1,'isolation':1,'reproduction':1,'negatively':1,'steep':1,'poisons':1,'apparently':1,'food-supply':1,'gravity':2,'which':46,'unsettled':1,'soap':2,'vegetation':4,'digestive':2,'cracking':1,'preliminary':2,'sally':1,'dorsal':1,'volunteers':1,'disease':1,'mechanical':3,'mother-of-pearl':1,'fact':2,'atmosphere':1,'charles':1,'woolly':1,'seaweed':3,'utter':1,'fear':1,'trying':1,'knowledge':4,'millennia':1,'surroundings':1,'spontaneity':1,'molecules':3,'emitting':1,'thousands':6,'means':1,'perfection':2,'words':2,'crabs':1,'evolution':46,'brain':1,'numerous':1,'amphibia':1,'light--is':1,'view':8,'multiplying':3,'elusiveness':2,'powder':1,'violet':2,'humane':1,'wire':2,'genius':1,'mind.':3,'identification':1,'routine':1,'progress':2,'open-sea':2,'joy':1,'agencies':1,'pilgrims':1,'equal':2,'migration.':1,'passing':3,'preparedness':1,'stars--to':1,'sea-worms':1,'tremendous':1,'armadillos':1,'immense':1,'waste':1,'phosphorescent':1,'antlers':1,'sex--emotions':1,'environment.':1,'tactics--self-effacement':1,'an':58,'volunteer':1,'economised':1,'asexual':1,'air-tubes':1,'britain':1,'wild':2,'almost':1,'surface':1,'zoophytes':1,'perhaps':1,'forceps':1,'ante-natal':3,'habitats':1,'locomotion.':1,'neolithic':2,'lichen;':1,'cubic':1,'clouds--some':1,'colouring':1,'dust':4,'britain.':1,'whale':2,'poultry':1,'colour':8,'nebulous':2,'thought':3,'position':4,'flesh':1,'domestic':1,'radium--the':1,'sea-dust':2,'skill':2,'rapid':2,'battery':1,'slits':1,'government':1,'utah':1,'mistake.':1,'facial':1,'backboned':2,'perpetual':1,'electrons.':4,'works':1,'soft':2,'inexperienced':1,'replacement':3,'feelers.':1,'phenomena':2,'gossamer.':1,'ideals':2,'homo':1,'kinds':2,'peter':1,'recognition':1,'lead':1,'cabbages':1,'ether':3,'mutation':1,'reaching':1,'cellulose':1,'stellar':2,'pressure':2,'enregistering':1,'instinct':4,'about':8,'rare':1,'getting':5,'mendelism':1,'biscuit':1,'sea-horse':1,'swimming':1,'warranty':1,'reptile':1,'washington':1,'promise':1,'registration':2,'protozoa':2,'properties--ready':1,'mississippi':1,'spiral':2,'invisibility':5,'fundy':1,'north':2,'interest':3,'surgeons.':1,'hundreds':2,'shark-like':1,'marquis':2,'cells':3,'variations':1,'graphite':1,'penetrating':1,'rabbits':2,'universal':1,'reptiles.':1,'periods':1,'ink':1,'crystals':2,'agriculture':1,'40':1,'other':7,'branch':1,'disposing':1,'star':1,'tides':4,'astronomy':5,'coloration':1,'association--why':1,'15-20':1,'liver':1},'newts':{'and':1},'scatter':{'over':1,'them':1},'weaker':{'stocks':1},'bent':{'out':2},'reeds':{';':1,'the':1,'are':1,'143':1},'process':{'and':2,'by':1,'like':1,'for':1,'may':1,'of':22,'is':2,'had':1,'.':3,'does':2,'went':1,'has':2,'was':1,'the':1,'advanced':1},'lock':{'that':1},'slim':{'contracting':1},'purposes':{'of':1,'which':1,'.':1},'pieces':{'and':1,'because':1,'of':11,'is':1,'.':1,';':1},'high':{'and':2,'rounded':2,'authority':1,'rate':1,'frequency':1,'something':1,'speed':2,'forehead':1,'temperature':1,'there':1,'.':3,'chemical':1,';':2,'mountains':2,'degree':1,'water':5,'foreheads':1,'perfection':1,'places':1,'level':3,'grounds':1,'at':1},'slip':{'down':1,'into':1},'class.':{'a':1},'educational':{'corporation':1},'sand-grouse':{'into':1},'mutually':{'beneficial':4},'destroying':{'sheep':1},'cycads':{'and':1,'our':1,'which':1},'astronomers':{'rely':1,'regard':1,'calculate':1,'wondered':1,'that':1,'of':1,'believe':4,'who':2,'prefer':1,'we':1,'however':1,'to':2,'now':1,'have':4,'in':1,'hold':1,'.':1,'think':6},'pair':{'of':5},'animal':{'and':6,'settles':1,'often':1,'family':1,'intelligence':1,'is':10,'it':1,'accumulates':1,'one':1,'as':2,'in':2,'frequents':1,'plankton.':1,'life--story':1,'well':1,'will':1,'enters':1,'from':1,'world...':1,'world--even':1,'ways':1,'heat.':1,'except':1,'.':3,'to':2,'or':3,'which':1,'youth.':1,';':1,'has':3,'divides':1,'more':1,'kingdom':4,'play':1,'complete':1,'may':4,'about':1,'but':1,'aware':1,'behaviour':6,'heat':1,'races':1,'lives':2,'tended':1,'somewhat':1,'instinct':2,'world':1,'with':2,'population':3,'a':3,'evolution':1,'microbes':1,'of':4,'could':1,'depending':1,'life':8,'behaviour.':4,'like':6,'remains':1,'s':3,'can':1,'man':1,'trypanosome':1,'the':1,'makes':2,'called':2},'hormones':{'has':1,'or':2,'which':1},'mysteries':{'of':1,'the':1,'which':1,'.':1},'palates':{'than':1},'establishment':{'of':13},'paler':{'type':1},'yellowish':{'then':1,'tinge':1},'stow':{'them':1},'await':{'an':1},'tied':{'on':1},'purpose.':{'1.f.5':1},'permanent':{'inhabitants':1,'caterpillar':1,'as':1,'future':1,'markings':1,'in':1,'residents':2},'lines.':{'these':1,'in':1},'men--primitive':{'men--races':1},'fits':{'the':1},'cabbage':{'found':1},'hawk':{'moth':1},'solidarity':{'with':1},'varied':{'from':3,'face':1,'electrical':1,'at':1,'in':1,'stock':1},'ingersoll':{'s':2},'voracity':{'.':1},'prawns':{'and':2},'element':{'from':1,'giving':2,'is':3,'after':1,'uranium':1,'.':3,'as':1,'going':2,'can':1,'in':7,'known':1,';':1,'into':1},'allow':{'them':1,'for':1,'disclaimers':1,'chemical':1,'part':1,'the':3,';':1},'okapi':{'and':2,'is':1,'was':1},'alloy':{'that':1},'food-canals':{'to':1},'volunteers':{'and':4,'associated':1,'with':1},'moulton.':{'according':1},'counted':{'the':1,'by':1,'for':1,'.':1},'archimedes':{'.':1},'thigh':{'on':1},'produces':{'a':2,'the':2,'only':1,'tides':2,'its':1},'frontispiece.':{'illustration':1},'phalanger':{'flying':1},'peck':{'their':1,'without':1},'move':{'on':1,'about':4,'towards':1,'up':1,'to':1,'through':1,'at':1,'in':1,'the':1,'with':1,'across':1},'produced':{'a':1,'on':2,'and':1,'by':13,'in':2},'nerve-cord':{'.':1},'existence.':{'when':1,'5':1,'if':1},'triassic':{'blue':1,'reptile':2,'for':1,'mammals':1,'when':1,'period':2,'era':1,'attained':1,'precede':1},'perfect':{'weather':1,'.':1},'saturn':{'and':1,'886.0':1,'is':3,'next':1,'itself':1,'uranus':1,'in':1,'november':1,'revolve':1},'broiling':{'heat':1},'progeny':{'from':1},'surgeons':{'of':1},'equalise':{'temperatures.':1},'coral-reefs':{'where':1,'are':1},'hermit-crab':{'and':3,'which':1,'stock.':1,'fixes':1,'s':1,'passed':1,'with':2},'meantime':{'with':1},'degrees':{'a':1,'from':1,'of':2,'.':1,'below':1,'centigrade':1},'spoiling':{'the':1},'instruments':{'and':2,'multiplied':1,'great':1,'used':1,'would':1,'for':1,'have':1,'of':2,'.':2,'as':1,'cannot':1,'sec':1,'are':2,'which':1,'or':1,'can':1},'tubeful':{'of':1},'derivative':{'works':3},'forest':{'and':1,'life':1,'to':1,'tract':2,'.':2,'primeval.':1,'in':1,'was':1},'rill.':{'no':1},'piecing':{'together':1},'existences':{'such':1,'which':1},'outlined':{'it':1,'.':1},'innermost':{'region':1},'ship':{'and':1,'when':1,'without':1,'through':1,'.':1},'billiard':{'table':1,'balls':1},'snake':{'to':1,'dasypeltis':1,'with':2,'pushes':1},'rotation':{'on':1,'increased':1,'caused':1,'it':1,'.':3,'of':6,'than':1},'cage':{'professor':1,'in':1},'realize':{'the':1},'intelligent':{'and':2,'control':1,'use':1,'interest':1,'they':1,'efficiency':1,'educability':1,'way':1,'attention':1,'beings':1,'actions':2,'behaviour':4,'appreciation':2,'insect':1,'student-citizen':1,'learning':1,'activity':1,'device':1,'learning.':1,'creatures':1},'traced':{'on':1,'back':1,'its':1},'concave':{'and':1},'sufficiently':{'close':1,'generous':1,'shallow':1,'hard':1,'low':1},'vibrations':{'and':1,'of':1,'in':2,'constituting':1,'must':1},'truth':{'that':1,'of':1,'though':1,'but':1,'they':1,'in':4},'invertebrates':{'and':1},'persia':{'turkestan':1},'accompanied':{'by':2},'beneath':{'shines':1,'the':8},'stock':{'separated':1,'and':3,'of':4,'spreading':1,'took':1,'marked':1,'.':5,'to':2,'as':1,'common':1,'in':1,';':1,'has':1,'was':1,'the':4},'traces':{'of':4,'are':1,'which':1,'in':1},'enigmatic':{'objects':1},'profile':{'view':4},'salps':{'related':1},'beginner':{'s':1},'doing':{'clever':1,'damage.':1,'things':1,'work':1,'when':1,'.':1,'this':1,'apparently':1},'sidelight':{'on':1},'society':{'society':1,'the':1,'made':1},'frequency':{'of':2,';':1},'static':{'to':1},'irritation':{'may':1},'agriculture':{';':2},'wander':{'separately':1},'witness':{'a':1,'an':1},'fundamentally':{'instinctive':1},'colour-varieties':{'there':1,'which':1},'knickerbocker':{'press':1},'bad':{'debts.':1,'business':1},'venom':{'on':1},'dominated':{'by':1},'adaptive':{'to':1,'radiation.':1,'device--more':1},'architecture':{'though':2},'harvest-mouse':{'constructing':1},'shut':{'our':1,'to':1,'their':1},'thrush':{'seized':1,'s':3,'managed':1,'at':2,'which':1},'perish':{'if':1},'incalculable':{'and':1,'abundance':1,'millions':1},'decay.':{'sec':1},'body-cavity':{'fluid':1},'surely':{'a':1,'follows':1,'is':1,'have':1,'the':1,'difficult':1},'steering':{'.':1},'shortest':{'waves':2,'.':1},'things.':{'lord':1,'reliable':1,'contrast':1},'apprehend.':{'the':1},'pursuits.':{'everything':1},'could':{'just':1,'be':20,'it':2,'resist':1,'see':2,'skate':1,'exist':1,'at':1,'have':1,'measure':1,'extract':1,'use':1,'make':2,'actually':1,'survive':1,'then':1,'we':1,'run':1,'form':1,'stop':1,'discover':1,'possibly':2,'produce':2,'not':8,'believe':1,'fly':2,'photograph':2,'boast':1,'keep':1,'harness':1,'support':1},'tube-feet':{'are':1},'david':{'fife':2},'length':{'and':1,'about':1,'may':1,'of':14,'is':1,'.':6,'as':1,'7':1,'were':1,';':1,'has':1},'removing':{'any':1},'stimulate':{'organs':1},'gamekeeper':{'but':1},'granules.':{'from':1},'respond':{'to':1,'when':1},'blown':{'by':1,'to':1,'into':1,'away':2,'back':1},'scene':{'of':1,'showing':1,'with':1,'in':6},'earth':{'and':21,'receives':1,'often':1,'escapes':1,'revolves':1,'is':13,'within':1,'rotated':1,'it':4,'slowing':3,'down':1,'as':2,'259':1,'are':2,'in':4,'yet':1,'before':1,'even':1,'passes':1,'from':4,'for':3,'to':4,'giving':1,'began':1,'there':3,'when':3,'except':1,'.':36,'how':1,'does':1,'take':1,'which':5,'mars':1,'passing':2,';':3,'must':1,'was':3,'naturally':1,'circles':1,'became':1,'we':3,'turning':1,'passed':1,'that':1,'may':1,'completed':1,'were':3,'but':2,'92.9':1,'although':2,'included':1,'during':2,'on':2,'with':3,'by':1,'he':1,'a':1,'rotating':1,'has':2,'to-day':2,'would':3,'14':1,'always':1,'did':3,'of':2,'no':1,'itself':2,'against':1,'will':3,'s':24,'owing':1,'so':1,'had':2,'intercepts':1,'the':6,'pulled':1,'or':2,'turns':1,'at':3},'owner':{'and':1,'would':1,'of':3,'.':1,'s':1,'any':1},'blows':{'its':1},'scent':{'a':1,'of':1,'no':1},'interest.':{'as':1},'buoyed':{'up':1},'two.':{'illustration':1,'but':1},'light--visible':{'and':1},'fascinating':{'study':1,'tantalising':1,'spectacle':2},'behaves':{'so':1,'in':1},'system':{'and':7,'comets':1,'is':2,'as':2,'sec':1,'are':3,'in':2,'would':1,'once':1,'there':1,'.':11,'to':1,'revolving':1,'has':1,'was':2,'then':1,'we':1,'full':1,'ranged':1,'formed':1,'but':2,'with':1,'by':1,'must':1,'for':1,'of':9,'will':1,'the':5,'mean':1,'at':1},'sea-lilies':{'crustaceans':1,'water-fleas':1},'world--even':{'the':1},'opossum':{'carrying':2},'time--man':{'s':1},'king-crabs':{'.':1},'travelled':{'far':1,'at':1},'egg-layer':{'in':1},'thick.':{'the':1,'we':1},'interests':{'it':1},'accompany':{'actual':1},'stars':{'and':5,'comets':1,'enormously':1,'show':1,'being':1,'is':1,'within':1,'visible':1,'as':1,'sec':1,'are':13,'have':1,'in':4,'whose':1,'tending':1,'appear':1,'stretch':1,'circulating':1,'.':13,'to':1,'varies':1,'does':1,'which':6,'going':1,'themselves':1,'has':3,'across':1,'can':1,'we':3,'form':1,'that':1,'forming':1,'let':1,'with':1,';':2,'a':1,'pull':1,':':2,'like':1,'of':1,'into':1,'will':1,'thin':1,'were':2,'the':4,'planet':1,'or':3,'at':1},'quarry':{'.':1},'depressing':{'energy':1},'stimulation--giving':{'off':1},'prominent.':{'the':1,'5':1},'steel':{'we':1,'civilisation':1},'quietness':{'of':1},'migrating':{'of':1,'from':1},'poulton':{'s':1},'extraordinarily':{'efficient':1,'mammal-like':1,'like':2,'gaunt':1},'wicketed':{'sides':1},'negatively':{'electrified.':1,'charged':1},'steep':{'and':1,'mountain':1,'ladder':2,'cliff':1},'torrent':{'.':1},'undercharged':{'body':1},'ingenious':{'methods':2},'platypus':{'of':3},'partnership':{'commensalism':1,'is':2,'with':3,'between':2},'poisons':{'including':1,'which':1,'.':1},'gently':{'through':1,'with':1},'gentle':{'reactions':1},'affinities':{'both':1,'to':1},'clearly':{'necessary':1,'that':1,'defined':1,'of':1,'showing':1,'marked':1,'or':1,'seen':1,'visible':1,'in':2,'drawn':1,'worked':1,'outlined':1},'viewed':{'copied':1,'or':1},'food-debris':{'millennium':1},'depict':{'quite':1},'studying':{'head':1,'the':2},'possibility.':{'it':1},'mechanism':{'of':1},'decomposing':{'animal':1},'ashore':{'.':1},'photosphere':{'that':2,'there':2,'but':1,'.':2,'surrounding':1,'as':1,';':1,'beneath':1,'shows':1},'scooping':{'in':2,'out':1},'sirius':{'the':1,'8.7':1},'persistence':{'of':1},'accuracy':{'when':1,'than':1,'.':1},'worldwide':{'task':1},'brazil':{'18':1},'regard':{'them':1,'these':1,'it':1,'to':15,'as':1,'the':3},'shaped':{'as':2,'like':1,'something':1,'in':1},'seed-box':{'but':1,'.':1},'device':{'whereby':1,'for':1,'this':1,'of':1,'is':1,'to':1},'so-called':{'flying':1,'abdominal':1,'grouse':1,'chameleon':1,'sargasso':1,'rings':1,'electro-magnetic':1,'rays':1,'anvil':1},'river-mussels':{'yielded':1},'predacious':{'creatures':1},'tramps':{'the':1},'bred':{'to':1},'stronger':{'and':1,'.':1,'should':1},'curiously':{'enough':1,'wasplike':1},'face':{'a':2,'tentatively':1,'set':1,'certain':1,'is':1,'illustration':1,'.':1,'to':4,'allowing':1,'directly':1,'of':4,'166':1,'with':1,'region':2},'perceiving':{'moving':1},'kipling':{'s':1},'mechanical':{'skill':1,'energy':5,'apparatus':2,'means':1},'wounded':{'in':2},'brer':{'rabbit--who':1},'fact':{'a':1,'about':5,'led':1,'for':1,'that':35,'remains':1,'of':8,'is':16,'less':1,'means.':1,'.':2,'to':1,'so':1,'too':1,'which':1,'in':1,'emphasized':1,'was':1,'the':1},'atmosphere':{'and':4,'heavy':1,'all':1,'from':1,'of':3,'is':1,'it':1,'but':1,'.':4,'will':2,'without':1,'envelops':1,'catch':1,'absorbs':1,'the':1,'rises':1,'was':1,'or':1,'nor':1},'best-defined':{'period':1},'nest-building':{'and':1,'in':1},'woolly':{'rhinoceros':2,'opossum':2,'caterpillars':1},'bring':{'me':1,'about':3,'modern':1,'down':3,'their':1,'forth':2},'14.--the':{'moon':1},'evolutionary':{'prospect':3,'process':1,'results':1,'spiral':1,'tack':1,'steps':1,'significance':1,'method':1,'change':1},'manchester':{'used':1,'chemist':1},'lloyd':{'morgan':4},'rough':{'surfaces':1,'awns':1},'principal':{'of':1,'office':1},'trying':{'time':1,'to':7,'first':1,'it':1,'one':1},'championed':{'evolutionism':1},'jaw':{'and':1,'from':1,'of':3,'belong':1,'seems':1,'but':1,'which':1,'the':1},'jar':{'and':1,'the':1},'should':{'it':2,'see':3,'expect':2,'have':7,'go':1,'find':1,'differ':1,'there':1,'also':2,'naturally':1,'be':19,'get':2,'they':1,'not':4,'fly':1,'remember':1,'gather':1,'say':2,'experience':1,'greatly':1,'think':1,'at':1},'buttons':{'on':1,'occasionally':1},'unpalatable':{'mimicked':1,'insects':1,'things':1,'.':2,'sponge':1,'caterpillars':1,'or':1},'planted':{'in':1},'molecules':{'is':1,'deep':1,'as':1,'are':2,'have':2,'in':2,'250':1,'travel':1,'.':4,'thick.':1,'cling':1,'into':1,'then':1,'which':2,'form':1,'that':1,'cannot':1,'let':1,'by':1,'of':16,'large':1,'small':1,'at':1},'volts':{'.':1},'hope':{'to':1,'that':4,'.':1},'meant':{'a':2,'even':1,'for':1,'many':1,'to':3,'much':2,'utilising':1,'entering':1,'in':1,'the':3,'total':1,'transcending':1,'by':3,'more':1},'handle':{'there':1,'off':1,'than':1,'in':1},'means':{'over':1,'an':3,'in':1,'any':1,'power.':1,'for':3,'no':1,'.':1,'much':1,'girdling':1,'more':1,'we':1,'that':15,'half':1,'losing':1,'a':5,'mastery':1,'of':30,'foresight':1,'were':1,'making':1,'the':5,'first':1},'intellectually':{'.':1},'prohibition':{'against':1},'fronds':{'are':1},'a.c.':{'.':1},'h':{'the':1,';':1,'.':43},'molecule.':{'single':1},'taxes':{'on':1,'.':1},'summon':{'it':1},'hemispheres':{'and':1,'destined':1},'are.':{'for':1},'coco-nut':{'fibre':1,'shell':1,'palm':1},'stuff':{'from':2,'which':1,'into':1,'.':1,'they':1,';':1,'began':1,'out':1},'bayliss':{'has':1},'inter-relation':{'established':1},'memory-image':{'of':1},'tap.':{'watch':1},'strengthened':{'when':1},'frame':{'the':2},'shreds':{'as':1},'packet':{'containing':1,'no':1,'turned':1,'though':1},'elusiveness':{'there':1,'so':1},'bolivia.':{'illustration':1},'5.--diagram':{'showing':1},'once.':{'in':1},'carboniferous':{'blue':1,'flora':1,'forests':1,'period':4,'epoch':1,'eras':1,'were':1,'the':2,'.':1,'era':1},'frog-hoppers':{'while':1},'packed':{'with':1,'together':1},'ascends.':{'illustration':1},'wire':{'or':1,'that':1,'is':1,'an':1,'to':1,'so':1,'they':2,'between':1,'leaves':1,'the':2,'its':1},'growths':{'on':1},'jurassic':{'archaeopteryx':1,'is':1,'period':2,'yellow':1,'era':1,'which':1},'nuclear':{'bodies':1},'migrations':{'were':1,'are':1,'have':1,'occurred':1},'germ-cell':{'just':1},'quickest':{'to':1},'white-hot':{'metal':2,'hydrogen':1,'iron':1,'.':1},'membrane':{'and':1},'open-sea':{'or':1,'animals':4,'cetaceans':1,'crustaceans':1,'young':1,'knife-blade-like':1,'prawns':1,'bacteria':1},'self-preservative':{'fashion':1},'email':{'contact':1,'newsletter':1,'business':1},'ends':{'and':2,'on':1,'of':2,'marked':1,'lizzie':1},'explosive':{'manifesting':1,'life':1,'rush':1,'by':1},'trilobite':{'90':1,'trilobites':1,'in':1},'ancestry--are':{'branches':1},'seaweeds':{'and':2,'among':1,'are':1,'which':1,'growing':1,'the':1},'ignorance':{'of':1,'preyed':1},'wave-motions':{'of':1,'are':1,'can':1},'wingless':{'insects':1,'larval':1,'creatures':1},'hoatzin':{'inhabits':2},'reappears':{'in':1},'restrictions':{'whatsoever':2},'drum':{'to':2},'migration.':{'looking':1},'figures':{'to':1,'we':1,'with':1,'are':3,'.':1},'cinder':{'.':1},'humanoid':{'to':2,'precursors':1,'stock':4},'adjusted':{'on':2,'coloration':1,'in':1},'co':{'.':2},'conflagration':{'had':1,'that':1},'conclude':{'our':1,'that':1},'ca':{'the':1},'mid-rib':{'and':2},'vibration.':{'no':1},'sea-worms':{';':1},'cv':{'the':1},'hawkins':{'from':1},'palm-bones':{'and':1,'the':1,'cmc':1},'8.7':{'procyon':1},'trigger-pulling':{'.':1},'dazzling':{'light':1},'body-cells.':{'it':1},'poured':{'a':1,'on':1},'looting':{'and':1},'duckweed':{'usually':1},'feather':{'as':1,'which':1},'waste':{'matter':2,'energy':1,'to':1,'heat':1,'products':1,'its':1},'descent.':{'retrospect':1},'c.':{'punnett':1},'coherence':{'of':2},'mammals.':{'the':1,'now':1,'what':1,'cretaceous':1},'tycho':{'upper':1},'neighbour':{'succeed':1,'.':1},'accident':{';':1,'.':1},'forests.':{'the':1},'domestication.':{'instinctive':1},'expounded':{'with':1},'spain':{'this':1,'showing':2,'179':1,'show':1},'gradual':{'building':1,'unfolding':1,'evolution':1,'establishment':1,'alterations':1,'sifting':1,'increase':2,'migration':1,'emancipation':1,'shading':1,'assortment':1,'ascent':1,'emergence':1,'change':2},'nerve-fibre':{'branches':1,'ends':1,'s.f.':1,'from':1,'or':1},'triggers':{'of':1},'reminiscence':{'as':1},'lung-fishes':{'or':1,'that':1},'lichen':{'and':1,'where':1},'pictures':{'guesses':1,'for':1,'that':1,'of':1,'.':2,'they':1,'the':1},'deductible':{'to':1},'discoveries':{'made':2,'which':2,'that':1,'of':4,'.':1,'have':2,'in':2},'spectrum--should':{'be':1},'salmo':{'all':1},'omne':{'vivum':1},'vm':{';':1},'adventures':{'at':1},'excessively':{'small':1,'minute':3},'raison':{'d':1},'jenner':{'weir':1},'carbohydrates':{'e.g':1},'of.':{'a':1},'fashioning':{'of':1,'beautifully':1},'spends':{'the':1},'romance':{'of':5,'to':1},'concealed':{'among':1,'beneath':1},'colony.':{'within':1},'estuaries':{'and':3,'while':1,'are':1,'penetrated':1},'outbreak':{'must':1},'nebulae.':{'some':1,'illustration':1,'in':1},'unimaginable':{'energy':1},'lichen;':{'one':1},'mud-skipper':{'periophthalmus':3},'emotionally':{'excited':1},'dusk':{'of':1,'is':1,'does':1},'wisest':{'not':1},'upon':{'it.':1,'a':3,'them':1,'another':1,'marquis':1,'insects':1,'men':1,'request':1,'it':3,'one':1,'water':1,'and':1,'as':1,'itself':1,'they':1,'the':26,'an':1,'its':3,'by':2},'v.':{'experiential':1},'infinite':{'temporal':1,'space':2,'in':1,'number':1,'time':1},'britain.':{'iv':1},'identity':{'of':1},'transformation--the':{'heat':1},'genus':{'eoanthropus':1,'oncorhynchus':1,'which':1},'off':{'and':1,'the':19,'into':1,'as':2,'at':2,'another':1,'in':4,'throughout':1,'fine':1,'again':1,'rays':1,'from':8,'intruders':2,'.':3,'other':1,'crowds':1,'neolithic':1,'his':1,'intruding':1,'half':1,'such':1,'by':3,'a':4,'on':1,'natural':1,'this':1,'of':1,'electrons':1,'gigantic':1},'mention':{'briefly':1,'the':1,'one':1},'tinge':{'is':1,'.':1},'colour':{'and':9,'almost':1,'is':1,'as':1,'in':1,'affects':1,'that':1,'.':6,'also':1,'does':1,'permanently':1,'disclosed':1,'which':1,'has':1,'seen.':1,'gives':1,'be':2,'corresponding':2,'means':1,'becoming':1,'with':1,'a':1,'being':1,'yellow-brown':1,'of':8,'depends':1,'the':1,'changes':2},'polyp':{'about':1},'directly.':{'some':1},'patterns':{'.':1},'cutting':{'down':1,'off':1,'at':1},'ear-passage':{'to':1,'into':1},'drawing':{'a':1,'shows.':1,'planetesimals':1,'food':1,'flying':1,'their':2,'by':4,'shows':2},'asymmetrical':{'flat-fish':1},'reefs':{'that':1},'negligence':{'strict':1},'flesh':{'and':2,'exposed':1,'of':1,'but':1,'are':1,'or':1,'available.':1},'moments':{'at':1},'gulls':{'pick':1},'flywheel':{'a':1,'and':1,'would':1,'.':2,'or':1,'if':1},'sea-dust':{'and':1,'always':1,'which':1,'.':1},'rooms':{'but':1},'predicts':{'the':1},'years':{'and':3,'required':1,'ago--a':1,'acquired':1,'life':1,'comprised':1,'1921':1,'as':1,'are':1,'in':4,'old':2,'yet':1,'before':4,'mercury':1,'invented':1,'would':1,'till':1,'with':1,'there':1,'.':13,'to':7,';':2,'must':1,'we':1,'ago.':3,'may':2,'after':1,'reached':1,'but':2,'it':1,'sink':1,'during':1,'elapsed':1,'dr':1,'he':1,'ago':28,'for':1,'these':1,'of':4,'work':1,'dealt':1,'the':4,'or':1},'paul':{'s':1},'glue':{'probably':1},'web':{'on':1,'of':2,'is':3,'site':4,'page':1,'which':1,'has':1,'pages':1},'generous':{'to':1,'lines':1,'if':1},'bibliography':{'elmhirst':1,'the':2,'darwin':1,'arrhenius':1},'lanugo':{'which':1},'apple--out':{'of':1},'transparent':{'layers':1,'all':1,'coating':1,'arrow-worm':1,'early':2,'azure':1,'open-sea':1},'ichthyosaurs':{'plesiosaurs':1},'combine':{'and':1,'to':1},'wet':{'cloth':1,'all':1,'weather':1,'moss':1},'5':{'and':1,'what':1,'has':1,'ft':1,'limbless':1,'1909':2,'mind':1,'per':1,'.':8,'feet':2,'matter':1,'000':5,'5':1,'in':1,'the':1,'mimicry':1,'500':1,'shows':1},'practise':{'self-effacement':1,'parental':1},'increased':{'power':1,'freedom':1,'its':1,'liberation':1,'masterliness':1,'difficulties':1,'at':1,'in':1,'our':1,'the':2,'still':1,'by':1,'production':1},'government':{'or':1},'biologists':{'have':1,'that':1},'new--a':{'restless':1},'smithsonian':{'report':10},'mathura':{'on':1},'increases':{'our':1,'.':1,'in':1},'five':{'digits':1,'hundred':3,'minutes':1,'of':1,'million':1,'times':3,'feet':1,'to':1,'straws':1,'she':2,'in':1,'--and':1,'vertebrae':1,'years':1,'.':1,'or':3,'millions':1},'belgium':{'the':1},'tick':{'a':1,'for':1,'one':1},'descendant':{'of':2},'backboned':{'race':1,'animals':9,'animals.':1},'onion':{'round':1},'258':{'the':1,'electrons':1},'parasite':{'and':1,'to':1,'from':1,'like':1},'glass-eels':{'about':1},'two-thousandths':{'of':1},'ductless':{'glands':2},'nerves':{'and':1,'of':1,'which':1,'.':1},'inexperienced':{'enemies':1},'replacement':{'of':1,'copy':2,'or':3},'gaining':{'a':1,'strength':2},'indications':{'even':1},'habitat':{'and':1,'penetrate':1,'or':1},'underwent':{'great':1,'an':1},'gossamer.':{'on':1},'daylight':{'.':1},'choosing':{'times':1},'paving-stones':{'green':1},'restlessness.':{'they':1},'transport':{'as':1},'avoid':{'a':1,'the':2,'reading':1},'dago':{'dagoes':1},'mars.':{'but':1},'does':{'we':1,'no':1,'this':4,'energy':1,'comparatively':1,'it':2,'but':1,'.':3,'much':1,'so':4,'at':2,'cannot':1,'in':1,'not':35,'the':1,'its':1},'passion':{'plunged':1},'cylindrical.':{'5':1},'mammoth.':{'the':1},'biology':{'of':1,'in':1},'blowing':{'upon':1},'predispositions':{'to':1,'of':1},'selecting':{'individual':1,'out':1},'tenability':{'of':1},'performances.':{'a':1},'pressure':{'and':2,'would':1,'inside':1,'so':1,'in':2,'the':2,'etc.':1,'currents':1},'enregistering':{'these':1,'the':1,'within':1},'century.':{'during':1,'illustration':2},'abdominal':{'ribs':1},'germination':{'and':1},'r':{'and':1,'.':14},'cribb.':{'boiling':1,'transformation':1},'hiding':{'them':1},'gained':{'most':1,'racial':1,'considerable':1,'proof':1},'mammoths':{'.':1},'asks':{'at':1,'why':1,'that':1},'seeds':{'and':1,'because':1,'for':1,'of':3,'.':1,'can':1,'become':1,'themselves':1,'with':1},'bounded':{'by':1},'swimming':{'and':2,'gently.':1,'experience':1,'ostrich':1,'persons':1,'near':1,'in':5,'diving':1,'across':1},'letters':{'of':2,'in':1},'elephants.':{'the':1},'hermit-crabs':{'hide':1,'place':1,'it':1,'have':1},'lung':{'and':1,'the':1,'.':1},'tiny':{'knob':1,'bags':1,'freshwater':1,'rill.':1,'irregular':1,'shift':1,'molecules':1,'fragments':1,'drops':1,'whirlpool':1},'cultivated':{'plants':6,'the':1,'wheat':1,'ear.':1,'in':1},'protozoa':{'and':2,'to-day':1,'which':1,'is':1,'should':1,'to':1,'as':1,'are':1,'sponges':1,'in':2,'animals':1,':':1,'like':1},'offices.':{'sec':1},'swimmers':{'and':2,'include':1,'nekton':1},'charities':{'and':1},'mere':{'density':1,'molluscs':1,'bulk':1,'visible':1,'cooling':1,'specks':1,'position':1,'association':1},'parentage':{'of':2},'67000':{'inch':1},'larvae':{'hanging':1,'or':1,'which':3,'in':1},'slow-worm':{'is':1},'half-monkeys':{'or':1},'larval':{'state':1,'stages':2,'salmon':1,'period':1,'stage':1},'spots':{'and':1,'on':2,'like':1,'of':1,'or':1,'increase':1,'are':1,'which':1,'the':2,'where':1,';':1,'must':1},'scanty':{'remains':2,'and':1,'fossil':1,'plankton':1},'recognised':{'and':1,'for':1,'as':1,'in':2,'moreover':1,'by':2},'hundred-millionth':{'of':1},'place.':{'illustration':1,'one':1},'specimens':{'of':1,'in':1,'were':1},'naturally':{'prolific':1,'give':1,'trails':1,'finds':1,'expect':1,'came':1,'appears':1,'opens':1,'he':1},'function':{'of':1,'in':1},'funnel':{'through':1},'cosmopolitan':{'in':1},'surgeons.':{'every':1},'washerwoman':{'and':1},'construction':{'underwent':1,'from':1,'of':2},'convergence':{'the':1},'basin':{'of':1},'contraction.':{'uranium':1},'count':{'them':1,'the':1,'for':3},'marquis':{'wheat':4,'.':1},'evident':{'in':1},'shrunk':{'by':1},'gravitational':{'pull':2,'influence':2,'theory':1,'attraction':2},'official':{'project':1,'observatory':1,'version':1,'page':1},'smooth':{'continuance':1,'carapaces':1,'formation':1,'atoms':1},'triumphant':{'flight':1},'excitement':{'though':1,'.':1},'placed':{'a':1,'on':3,'them':2,'for':1,'exactly':1,'an':1,'to':1,'at':1,'in':2},'frugivorous':{'stock':1},'convince':{'us':1},'monument':{'of':1},'problem':{'no':1,'of':10,'could':1,'.':2,'as':1,'surely':1,'the':1,'is':2},'profusion':{'.':1},'bearing':{'protrusible':1,'on':1,'batteries':1,'this':1,'the':1},'irish':{'elk':1},'ferocious.':{'embryological':1},'recognize':{'water':1},'nearness':{'to':1,'of':2},'rubble':{'innumerable':1},'faintness':{'.':1},'slowing':{'down':8,'down--the':1},'arms.':{'this':1},'beach.':{'but':1},'leptocephalus.':{'2':1},'aristotle':{'observed':1,'s':1,'or':1},'ink':{'in':1},'www.gutenberg.org':{'this':1,'title':1,'you':1,'2':1,'1.e.2':1},'effected':{'a':2,'within':1,'by':3,'in':1},'planting':{'it':1},'expensiveness':{'of':1},'readjustments':{'of':1},'radiolarians':{'and':1,'of':1,'with':1},'variety':{'and':1,'of':16,'is':1,'after':1,'surpassed':1,'.':2,'has':1,'with':1},'tenth':{'printing':1},'eastern':{'baltic':1},'forests':{'and':2,'a':1,'from':1,'which':1,'that':1,'of':4,'there':1,'.':1,'roamed':1,'in':1,'the':2,'he':1},'slumbers':{'in':1},'reach.':{'animal':1},'details':{'of':2,'is':1,'revealed':1},'behold':{'a':1},'thickness--a':{'sea':1},'outlines':{'of':1,'at':1,'spectroscopy':1},'repeat':{'all':1,'gives':1,'that':1},'again.':{'moreover':1,'illustration':2,'that':1},'in:':{'http:':1},'tides':{'and':3,'we':1,'which':2,'than':1,'of':1,'had':1,'it':1,'but':1,'.':6,'will':1,'to':1,'ranked':1,'are':4,'have':1,'act':1,'at':1,';':1,':':1,'the':1,'290':1,'must':1},'casque':{'is':1},'subtlest':{'of':1},'again:':{'the':1},'in.':{'with':1},'13.--saturn':{'november':1},'ideals':{'which':1,'in':2},'shattering':{'itself':1},'veil':{'of':1},'coloration':{'and':1,':':2,'is':1,'when':1,'serves':1,'coloured':1,'will':1,'the':1,'.':1,'or':3},'exposure':{'to':1,'of':1},'draperies':{'gliding':1},'bivalve':{'mollusc':1,'shell.':1},'lasted':{'beyond':1,'or':1,'for':1},'rule':{'and':1,'feed':1,'we':1,'that':1,'is':1,'two':1,'exist':1,'in':1,';':1,'out':1},'eddies':{'of':1,'rising':1},'pitt':{'offered':1},'gardens':{'in':1},'practicability':{'of':1},'three-toed':{'horse':2},'surrounding':{'stimuli.':1,'space':2,'colour':1,'flesh':1,'them--are':1,'sky--this':1,'world':1,'the':2,'gravel':1,'conditions':1,'ether':1,'bodies':1},'magnetic':{'force':1,'storm':1,'circuits':1,'phenomena':1,'sense':1,'storms':2,'effect':1,'deflection':2,'field':7,'circuit':2,'field--which':1,'action':1},'saves':{'their':1},'desirable':{'for':1},'rapid':{'and':3,'abbreviation':1,'precisely':1,'often':1,'power':1,'striking':1,'colour-change':3,'series':1,'that':2,'passage':1,'motion':1,'as':1,'way':1,'waves--the':1,'elimination':1,'succession':1,'changes':1,'than':1,'change':1,'movement':1},'nursery':{'for':1},'controversial':{'stage':1},'crete':{'greece':1},'oldest':{'known':3,'of':1,'rocks':1,'stars':1,'egyptian':1},'worked':{'flints':1,'up':1,'itself':1,'steadily':1,'the':1,'by':1,'out.':1,'out':8},'1915.':{'a':1,'magnetic':1,'electrons':1,'geological':1},'ceases':{'to':1,'.':1},'physiological':{'life':1,'expensiveness':1,'point':1,'equilibrium':1,'partnership':1,'evidence':1,'characters.':1,'inequilibrium':1,'action':2,'difference':2,'types':1,'proof':1},'ventral':{'lungs':2,'scales':1},'centrosome':{'introduced':1},'neighbours':{'of':1,'.':1},'microscopist':{'named':1},'mckready':{'a':1},'diverted':{'into':1},'worth':{'remembering':1,'dwelling':1,'having':1,'.':1},'alternating':{'current':1,'occurrence':1,'yellow':2},'them--which':{'give':1},'aurora':{'borealis':4,'is':1},'waters--the':{'dry':1},'impinged':{'on':1},'coal-measures':{'the':2,'were':1},'alevins':{'which':1},'slowed':{'down--sometimes':1},'exaggerate':{'the':1},'pinch':{'of':2},'cmc':{';':1},'globule':{'about':1},'nondescript':{'not':1},'jungle-fowl':{'of':1},'290':{'photo':1,'the':1},'291':{'photo':1},'dwindled':{'away':1,'vestiges':1},'speck':{'of':2,'against':1},'tree-kangaroos':{'tree-sloths':1},'labyrinthodonts':{'some':1},'surmounting':{'the':1},'overlying--the':{'photosphere':1},'seas.':{'perhaps':1,'evolution':1,'like':1,'recent':1},'microscopists':{'and':1},'------':{'------':2,'866400':1,'2163':1},'others.':{'1.d':1},'them--are':{'of':1},'alsatian':{'wolf-dog':2},'neap':{'tides':1},'580':{'000':1},'calcium':{'vapour':1},'gatepost':{'208':1,'the':1},'lizard':{'which':2,'is':1,'they':1,'chlamydosaurus':1,'draco':1,'called':1},'consequent':{'changes':1,'aridity':1},'lampreys':{'petromyzon':2},'glands':{'notably':1,'such':1,'of':1,'on':1},'salt-accumulation':{'is':1},'reconstruction':{'of':2,'by':2},'toll':{'to':1},'suppose':{'for':1,'that':8,'it':1,'at':1,'each':1,'the':2},'consisting':{'of':2},'told':{'edited':1,'in':1,'author':1,'us':1,'that':1},'crunch':{'with':1},'machine.':{'a':1},'simultaneously':{'.':1},'sinks':{'down':1,'again':1,'and':1,'into':1},'lithosphere':{'is':1},'human':{'and':1,'embryo':7,'development.':1,'ingenuity':1,'being':2,'sense':1,'mind':2,'society':1,'beings':2,'thought.':2,'in':3,'knowledge.':1,'use':1,'eye':2,'ovum':1,'remains':2,'.':1,'tail':1,'civilisation.':1,'progress':5,'type':1,'body':3,'progress.':1,'kind':1,'gestures':1,'races':1,'blood':3,'characters':1,'ear':2,'mind.':1,'evolution':1,'branches':1,'evolution--factors':1,'skull':4,'brain':4,'was':2,'ascent.':1,'face':1,'race':3,'limit':1,'qualities':1,'teeth':1,'life.':1,'institutions':1},'kindred':{'and':1,'on':1,'animals':1,'especially':1,'.':1},'residual':{'gases':1},'out-flowing':{'lobes':1,'processes':1},'protection':{'for':1,'of':2,'possessed':1,'.':1,'also--protection':1,'implied':1,'every':1,'before':1},'pursuit':{'and':1},'ploughed':{'field':1},'promiseful':{'life':1},'obtained':{'our':1,'by':1,'would':1,'.':1},'aerial.':{'the':1},'daughter':{'colonies':1},'items':{'and':1,'among':1,'are':1,'tend':1},'frog-hopper':{'becomes':1,'makes':1},'anchor':{'.':1},'smoke':{'a':1,'no':1,'in':1,'that':1},'browsing':{'by':1},'bettered':{'surroundings':1},'otters':{'and':1,'it':1,'foxes':1},'glittering':{'points':1},'diameter':{'and':1,'for':1,'of':7,'is':2,'there':1,'number':1,'.':4,'lifts':1,'are':1,';':2,'one':1,'whereas':1},'secure':{'a':1,'and':1,'that':1,'survival':1,'evidence.':1,'position':1,'the':4,'floating':1},'discontinuous':{'variation':1},'-cell':{'with':2},'highly':{'probable':8,'endowed':1,'interesting':1,'magnified.':1,'developed':3,'probably':1,'intelligent':1,'specialized':2,'perfected':1},'lafayette.':{'the':1},'opportunities':{'to':1,'animals':1,'for':1,'.':1},'glance':{'at':1},'total':{'loss':1,'or':1,'of':2,'energy':1,'number':1,'thickness':2,'amount':1,'solar':2,'emancipation':1,'length':1,'age':1,'as':1,'quantity':1},'experimentation':{'in':1},'plot':{'at':1},'answers-back':{'that':1},'alligator':{'yawning':2},'grounds':{'of':1,'.':1},'negative':{'and':1,'electricity':10,'electricity.':1,'taken':1,'pole':2,'are':1,'units':1,'the':1},'reid.':{'sir':1,'common':1},'crocodilian':{'various':1},'mightiest':{'elevators':1},'knoll':{'and':1},'girdling':{'the':2},'thorndike':{'s':1,'says':1,'hits':1,'is':1},'recuperate':{'by':1},'separated':{'from':2,'freshwater':1,'off':4,'by':1,'.':2},'traceable':{'back':1},'ascribe':{'it':1},'aware':{'of':7,'that':1},'separates':{'the':1,'monkeys':1,'it':1},'continual':{'sinking':1,'motion':1,'motion.':1,'occurrence':1},'allies':{';':1,'in':1},'dando.':{'orang-utan':1,'young':1,'chimpanzee':1},'society.':{'professor':2},'twenty-one':{'miles--in':1},'antenna-bearing':{'segmented':1},'crest':{'to':4,'.':1,'so':1,'or':1,'of':1},'books.':{'each':1},'work':{'and':7,'associated':2,'is':6,'within':1,'as':1,'in':8,'any':1,'electronically':2,'out':2,';':2,'from':1,'recorded':1,'.':10,'to':2,'offers':1,'which':1,'under':1,'you':2,'if':1,'badly':1,'that':1,'may':1,'with':1,'by':1,'on':3,'b':1,'of':6,'well':2,'against':1,'without':2,'can':1,'the':3,'or':8},'eclipse':{'may':2,'of':7},'worm':{'invasion':1,'the':1,'on':1,'.':1},'worn':{'down':1,'and':1},'theories':{'may':1,'of':5,'to':1,'have':1,'dispense':1,'put':1},'mammalian':{'heart':1,'evolution':1,'mother':1,'golden':1},'eighteen':{'to':1},'era':{'and':2,'what':1,'there':1,'miocene':1,'jurassic':1,'of':2,'silurian':1,'when':1,'corresponds':1,'.':6,'in':3,'after':1},'transparency':{'or':1},'already':{'a':2,'existed':1,'we':1,'learnt':1,'likened':1,'spoken':1,'use':1,'dead':1,'and':1,'known':1,'been':1,'have':1,'mentioned':1,'seen':1,'the':1,'referred':2,'at':1},'ascetic':{'non-growing':1},'radiance':{'from':2},'indicated':{'to':1,'by':3,'in':1},'cited':{'as':1},'india':{'146':1,'and':1,'into':1,'it':1,'malay':1,'persia':1,'.':1},'indicates':{'a':3,'the':2},'fanciful':{'imaginings':1},'present-day':{'and':1,'forms':1,'animals':1,'science':1,'theories':1,'survivors':1,'mud-fishes':1},'immemorial.':{'in':1},'aerated':{'and':1},'handiness.':{'the':1},'inhabitants':{'of':2,'is':1},'finger-post':{'on':1},'crumbs':{'from':3},'egyptian':{'tombs':1},'nuts':{'these':1,'it':1,'193':1,'for':1},'makes':{'a':4,'and':1,'for.':1,'for':1,'no':2,'this':1,'adjusting':1,'some':1,'it':5,'us':1,'an':1,'against':1,'the':9,'tree-stems':1,'its':3,'more':1},'far':{'and':1,'less':1,'over':3,'back':1,'as':9,'at':1,'in':1,'south.':1,'beyond':1,'out':1,'given':1,'end':1,'for':1,'away':2,'since':1,'exceeding':1,'been':1,'.':2,'behind':1,'too':4,'above':2,'surpasses':1,'east':3,'more':5,'north':3,'greater':1,'that':1,'from':6,'transcending':1,'advanced':1,'on':1,'off':1,'ahead':1,'up':2,'below':2,'swing':1,'the':3,'south':1},'aerates':{'the':1,'them':1},'ordinary':{'fish':1,'tissues':1,'flower-vase':1,'single':1,'questions':1,'education':1,'tadpoles':1,'temperature':1,'chemical':1,'way':2,'mammals':1,'conditions':1,'protozoon':1,'life':2,'star':1,'wheats':1,'big':1,'routine':1,'pressure':1,'routine--not':1,'bony':1,'cells':2,'standards':1,'matter':3,'familiar':1,'mammal':1,'acceptation':1},'beach':{'which':1,'.':1},'gamble':{'writes':1,'continues':1},'discoveries.':{'already':1},'guanin':{'.':1},'fever':{'and':1},'transforming':{'the':1},'ladder':{'of':3},'after':{'and':1,'all':2,'they':3,'generation':1,'some':1,'it':1,'an':1,'satisfaction':1,'itself':1,'well-being':1,'lull':2,'another':7,'our':1,'repeated':1,'its':2,'what':1,'death':1,'fuller':1,'her':1,'cache':1,'hour':1,'by':1,'their':2,'millennium':1,'which':1,'marsh':2,'sojourning':1,'he':2,'head':1,'his':2,'branch':1,'undergoing':1,'that':2,'max':2,'william':2,'fritz':1,'five':1,'nearly':1,'birth':2,'new':1,'fifteen':1,'themselves':1,'man':1,'a':10,'spawning':2,'exposing':1,'being':1,'this':1,'floods':1,'professor':2,'prolonged':1,'element':1,'planet':1,'race':1,'t':2,'mr':1,'the':14,'marsh.':2,'wandering':1,'age':2,'lloyd':1},'movable':{'tongue':1,'.':1},'customs':{'point':1},'lay':{'their':2,'eggs':1,'there':1,'them':1,'emphasis':1},'outbursts':{'of':2,'have':1},'maxim:':{'it':1},'law':{'of':3,'.':1,'in':1,'but':1,'that':1},'meaningful':{'situation':1},'nipped':{'in':1},'elusive':{'and':1,'.':1},'cools':{'to':1},'appreciate':{'water':1,'a':1,'the':1},'greek':{'helios':1,'logos':1,'word':1,'tortoise':1,'eagle':1,'alphabet':1,'philosophers':1,'meaning':1,'thinkers':1},'verb':{'to':1},'green':{'chlorophyll':1,'yellow':1,'in':3,'plants.':1,'blue':2,'flagellates--the':1,'surroundings':1,'variety':1,'tree-snake':1,'frog':1,'hydra':2,'herbage':1,'plants':2,'ball':1,'seaweeds':1,'pigment':2,'ones':1,'phase':1,'box':1,'on':1,'grains':1,'of':1,'leaves':2,'lizard':1,'alga':1,'or':2},'parish':{'to':1},'coral-snake':{'can':1},'order':{'and':2,'than':1,'that':1,'diverging':2,'of':12,'is':1,'.':1,'to':4,'in':1,'the':1,'monkeys':1},'sandstones':{'and':2,'mudstones':1},'office':{'is':2},'borealis':{'the':1,'is':1,'would':1,'coloured':1},'satisfied':{'with':1},'pascal':{'s':1},'ancients':{'seem':1,'were':1},'japan':{'to':1},'bubbles':{'which':1},'breeding-place':{'represents':1,'corresponds':1},'yellow-crowned':{'penguin':2},'sheaf':{'of':2},'production':{'of':3,'as':1,'promotion':1},'precipitate':{'when':1,'which':1,'.':2},'split':{'so':1,'off':1,'up':5,'longitudinally.':1},'then':{'there':5,'rubs':1,'they':2,'able':1,'is':3,'violet':1,'it':8,'are':2,'have':2,'another--to':1,'consists':1,'follow':1,'intact':1,'find':1,'waited':1,'for':1,'may':1,'since':2,'uranium':1,'to':4,'another':1,'has':1,'sent':1,'supposed':1,'be':3,'we':3,'partly':1,'that':2,'our':1,'pecked':1,'took':1,'drew':1,'sprinkle':1,'imperfectly':1,'visits':1,'although':1,'endure':1,'dives--':1,'diminish':1,'unless':1,'he':2,'illustration':1,'perceived':1,'necessary':1,'succeeded':1,'wafts':1,'follows':1,'inhabiting':1,'departs':2,'a':2,'so':1,'red':1,'the':7,'round':1,'comes':1,'arose':1},'them':{'and':9,'the':3,'penetrating':1,'on':2,'insulators':1,'stream':1,'show':2,'is':2,'fall':1,'an':1,'down':1,'against':1,'as':3,'116':1,'including':1,'are':7,'have':4,'in':9,'protecting':1,'32':1,'before':2,'even':1,'sir':1,'he':1,'astronomy':1,'from':2,'would':1,'no':1,'perhaps':1,'deeply':1,'away':1,'there':1,'when':2,'off':1,'.':19,'up':2,'to':8,'call':1,'which':1,'black':1,';':2,'sluggish.':1,'was':1,'until':1,'more':1,'weigh':2,'that':2,'may':1,'after':1,'bipeds--we':1,'illustration':1,'were':1,'jumping':1,'if':1,'know':1,'they':1,'coming':1,'such':1,'now':1,'with':2,'by':2,'apart':1,'a':2,'both':1,'about':1,'give':1,'for':2,'indifferent.':1,'face':1,'always':1,'into':1,'but':1,'namely':1,'together':1,'grows':1,'though':1,'electrically':1,'conquer':1,'gigantic':1,'requires':1},'affected':{'by':4},'babies':{'born':1},'fragment':{'of':2},'locusts':{'and':1,';':1},'safe':{'and':1,'among':1,'both':1,'situations':1,'to':5,'as':1,'cradle':2,'in':2},'fabre.':{'a':1,'the':1},'young.':{'our':1,'the':1,'sec':1},'band':{'of':1,'across':1},'giraffe':{'the':1,'s':1,'coloured':1},'reconverted':{'in':1},'sack':{'of':1},'they':{'represent':2,'all':2,'show':4,'move':1,'soon':1,'go':2,'find':1,'seemed':1,'derive':1,'also':3,'swam':2,'had':5,'send':1,'actually':1,'only':1,'persist':1,'practise':1,'happened':1,'grip':1,'eventually':1,'return':1,'get':2,'propelled':1,'cannot':3,'please.':1,'affect':1,'now':1,'possess':3,'perceived':1,'showed':1,'called':1,'did':3,'die':2,'seldom':1,'hunt':1,'settle':1,'found':2,'require':1,'enjoy':1,'successively':1,'often':1,'began':3,'resist':1,'imply':1,'decided':1,'are':130,'pass':4,'differ':2,'what':1,'said':1,'stood':1,'appear':2,'served':1,'tend':1,'attracted':1,'experiment':1,'radiated':1,'got':1,'learned':1,'ever':1,'correct':1,'can':13,'crunch':1,'obey':1,'never':1,'analysed':1,'disappeared':2,'were':27,'succeed':1,'let':1,'sink':1,'become':3,'put':2,'wanted':1,'come':1,'tenant':1,'receive':1,'could':4,'keep':1,'turn':1,'range':1,'act':2,'usually':1,'think':1,'feed':3,'emerge':1,'secure':1,'render':1,'point':1,'walk':1,'fast':1,'sow':1,'beheld':1,'reached':1,'illustrate':3,'use':1,'would':9,'create':1,'breed':1,'vibrate':1,'mark':1,'swarm':1,'call':1,'too':2,'then':1,'strike':1,'inflate':1,'tell':1,'therefore':1,'manufacture':1,'enable':1,'form':4,'fall':1,'corresponded':1,'must':5,'count':1,'account':1,'include':1,'look':3,'consist':2,'wish':1,'mount':1,'originate':1,'see':1,'will':5,'remain':1,'supposed':1,'learn':1,'meet':1,'emit':1,'and':1,'sometimes':2,'proved':1,'do':9,'likewise':1,'escape':2,'say':1,'have':33,'need':3,'seem':4,'made':6,'cool':1,'occur':1,'fill':1,'lie':1,'squat':1,'migrated':1,'built':1,'deserve':1,'travel':2,'generally':1,'extracted':1,'split':1,'test':1,'roll':1,'begin':2,'may':12,'absorb':1,'knew':1,'reach':5,'gradually':2,'reflect':1,'produce':2,'develop':1,'grow':1,'died':1,'varied':1,'cause':3,'give':4,'remember':1,'resemble':2,'nevertheless':1,'register':1,'appreciate':1,'correspond':1,'walked':1,'directly':1,'justify':1,'make':3,'came':1,'left':1},'molecules.':{'there':1,'illustration':1},'lifelong':{'study':1,'external':1},'bank':{'and':3,'or':1,'.':1},'bread':{'of':1},'1.00':{'7918':1},'rocky':{'shore-pool':1,'peninsula':1,'slopes':1},'oxygen':{'and':1,'available':1,'form':2,'of':1,'.':3,'to':1,'dissolved':1,'at':1,'which':1,'in':1,'taken':1,'than':1},'respiration.':{'illustration':1},'reasonably':{'that':1,'interpreted':1},'classified':{'.':1},'backgrounds':{'such':1},'l':{'bearing':1,'.':3},'rocks':{'and':4,'on':1,'since':1,'like':1,'may':1,'of':1,'is':2,'there':1,'according':1,'but':1,'.':1,'to':1,'were':1,'so':1,'are':1,'have':1,'which':1},'--':{'fig':1,'moon':1},'reasonable':{'objection':1,'to':1,'compass':1,'fee':1,'view':1},'heaved':{'off':1},'feeds':{'on':1,'are':1,'.':1},'associative':{'cell':1,'or':2,'learning.':1},'lifted':{'into':1,'off':1},'shows.':{'sec':1},'voyages':{'discovering':1},'prawn':{'hippolyte':1,'s':1,'takes':1,'.':1},'12.--jupiter':{'showing':1},'webbed':{'fingers':1},'pigments':{'enable':1,'compounded':1},'network':{'of':4},'forty':{'seconds':1,'inches.':1,'minutes':1,'inches':1},'fellows':{'can':1},'strangers':{'it':1},'vulgalis':{'1':1},'moisture':{'and':1,'heat':1,'about':1,'in':1},'medicine':{'but':1},'forth':{'and':1,'on':1,'.':1,'their':1,'in':8,';':1,'its':2,'the':1},'swamped':{'by':1},'disputed':{'whether':1,'and':1,'that':1},'nowadays':{'called':1,'an':1},'built.':{'illustration':1},'tops':{'of':1},'monkeys--activity':{'both':1,'for':1},'sunning':{'her':2},'admits':{'of':1},'forcibly':{'ejected':1},'detecting':{'a':2,'this':1,'the':1,'by':1,'its':1},'nebulae':{'and':1,'we':1,'from':1,'like':1,'would':1,'may':1,'is':1,'there':1,'it':1,'.':1,'as':1,'promise':1,'fig':1,'besides':1,'such':1,'are':5},'rarity':{'of':3},'created':{'to':1,'from':2,'or':2,'nor':1,'in':1},'appendages':{'and':1,'the':1},'shunted':{'.':1},'creates':{'a':1},'baltic':{'to':1,'.':1,'must':1},'clouding':{'after':1},'18.--a':{'diagram':1},'render':{'the':1},'synonymous':{'with':1},'another':{'remarkable':1,'feature':1,'aspect':1,'cuts':1,'glimpse':1,'source':1,'factor':1,'save':1,'very':1,'specimen':1,'they':1,'sowing':1,'lost':1,'solution':1,'truth':1,'works':1,'side':3,'fascinating':1,'series':1,'mighty':1,'are':1,'flower':1,'plays':1,'for':1,'though':1,'expressed':1,'experiment':1,'new':1,';':1,'method':2,'note--that':1,'fourteen':1,'on':1,'of':2,'distinguished':2,'thing':1,'s':1,'tack':1,'place':2,'consequence':1,'or':1,'inducing':1,'ring':1,'quality':1,'from':2,'one--of':1,'there':2,'.':10,'way':6,'was':1,'that':1,'four-toed':1,'but':1,'part':4,'solar':1,'with':1,'flightless':2,'kind':2,'has':1,'word':1,'example':2,'acquisition':2,'and':8,'is':1,'modern':1,'it':1,'deep':1,'high':1,'as':1,'in':2,'turn':1,'possibility.':1,'till':2,'amoeba':1,'star':3,'trundles':1,'molecule':1,'effect':1,'offshoot':1,'important':1,'interval':1,'portion':1,'time':2,'the':1,'having':1,'lying':1},'twig-like':{'angle':1},'thick':{'for':1,'as':1,'but':1,'.':1,'enough':1,'treacly':1,'in':1,'mist':1,'or':1,'vapours':1},'tangle':{'of':1},'electronic':{'constitution':1,'cyclones':1,'work':11,'works.':1,'activity':1,'works':15},'illustrate':{'a':1,'evolution':1,'natural':1,'we':1,'.':1,'the':6},'power.':{'the':1},'approximately':{'and':1,'equally':1,'22':1,'calculated':1,'twenty-seven':1,'to':3,'278':1},'youthfulness':{'a':1},'colossal':{'expenditure':1,'family':1,'reservoir':1},'accretion':{'may':1,'of':1},'compromise':{'is':1},'observations':{'bearing':1,'showing':1,'he':1,'furnish':1,'of':1},'inflate':{'their':1},'john':{'and':1,'dalton':1,'the':1,'murray':3,'dewey':1},'dogs':{'are':1,'do':1,'for':1,'have':1,'elephants':1},'kiwi':{'another':2},'intestine':{'with':1},'happily':{'included':1},'diversified':{'ooze':1},'rejected':{';':1},'nurse-frog':{'alytes':1},'scorpions':{'and':2},'cereal':{'.':2},'corresponded':{'to':1},'flightless':{'and':1,'toothed':2,'bird':2,'wings':1},'greater.':{'and':1},'guile':{'illustration':1},'magnet':{'and':1,'a':1,'is':4,'there':1,'.':4,'to':1,'62':1,'279':1,'the':2,'282':1,'lifting':1},'air.':{'the':1,'iv':1},'preformed':{'weak':1,'bandage':1},'damage.':{'1.f.3':1,'it':1},'unmistakably':{'to':1},'iron':{'and':2,'copper':2,'last.':1,'an':1,'are':1,'in':1,'further':1,'blue':1,'for':1,'behaves':1,'should':1,'to':1,'which':1,'you':1,'has':1,'until':1,'filings':2,'but':1,'would':1,'age':1,'will':1,'or':2,'attracting':1},'tackled':{'a':1},'contrasted':{'with':3},'powers':{'156':1,'of':1,'is':1,'.':1,'note':1,'hitherto':1},'encumbered':{'with':1,'by':1},'regulus':{'98.8':1},'respecting':{'the':1},'lull':{'and':2,'organic':1,'calls':1,'to':1,'s':1,'describes':1,'the':1,'r':1,'points':1},'vigorous':{'and':2,'palaeolithic':1,'as':1,'but':1,'race--many':1,'race':1,'animal':1,'the':1},'contents':{'introduction':1,'is':1},'forced':{'to':1,'the':1,'molten':1},'strength':{'and':1,'enormous':1,'prompted':1,'unabated':1,'of':1,'able':1,'to':1,'in':1,'the':1},'prehensile':{'suckers':1,'tail':2},'convenient':{'to':1,'unit':1},'latter':{'will':1,'is':2,'there':1,'we':1,'part':2},'half-brutish':{'prehistoric':1},'little.':{'illustration':1},'foam-bells':{'on':1},'subjects':{'with':1},'forces':{'of':7,'animals':1},'transmit':{'vibrations.':1},'swims':{'on':1,'about':1,'right':1,'well':1,'actively':1,'in':1,'with':1},'explanation':{'even':1,'we':1,'that':1,'of':3,'what':1,'.':1,'to':1,'offers':1,'once':1},'circles':{'without':1,'round':3},'benefactress':{'while':1},'ebook':{'outline':2,'for':1,'of':2,'is':2,'complying':1,'20417':1,'or':2},'anatomy':{'physiology':1,'.':1},'extending':{'below':1},'echoes':{'of':1},'phase':{'amid':1,'adapted':1,'of':1},'nutritive':{'reproductive':1,'chains':3,'material':2,'yolk':1,'sea-dust':1,'contributions':1},'grave':{'difficulties':1,'error':1},'nostrils':{'very':1,'on':1},'calculated':{'and':1,'to':1,'that':3,'using':1,'.':1},'inferred':{'from':3},'swamp':{'and':2,'our':1,'.':1},'accounted':{'for':3,'for--may':1},'deeply':{'saturating':1,'being':1,'into':4,'here':1,'buried':1,'with':1},'eel.':{'illustration':1},'notion':{'of':3},'fitted':{'a':1,'to':1},'reserve':{'.':1},'spectroscopic':{'point':1},'eminent':{'astronomers':3,'physicists':1},'sea-anemone':{'a':1,'may':1,'is':2,'gripped':1,'s':1,'72':1,'which':1,'sixty':1,'with':1,'can':1},'subtle':{'processes':1,'that':1,'inter-relations':2,'chemical':1,'cleaver':1,'inter-relations--the':1},'enjoyed':{'about':1},'sharks':{'the':1},'resemblance':{'142':1,'to':7,'being':1,'of':1,'is':2,'in':2,'camouflage':1,'lies':1,'so':1,'between':3,';':1,'hawk':1,'tells':1},'vaporised':{'by':1},'guidance':{'of':1},'appended':{'to':1},'entities--matter':{'ether':1},'geologist':{'utilises':1,'is':1},'deepest':{'sense.':1},'clefts':{'openings':1,'are':1},'pursuing':{'food':1,'what':1},'adequate':{'idea':1,'for':1,'lasting':1},'dynamo--magnetism--ether':{'and':1},'position--it':{'is':1},'fathoms':{'and':1,'though':1,'it':1,'five':1,'have':1,'so':1,';':1},'predecessor':{'.':1},'do':{'and':2,'nothing':2,'in':3,'.':5,'copyright':1,'when':2,'actually':1,'stories':1,'we':7,'that':1,'very':2,'they':2,'not':56,'with':9,'man':1,'occur.':1,'keeping':1,'practically':1,'this':4,'still.':1,'so':2,'the':2,'or':1,'otherwise':1},'leisure':{'to':1,'time--wherein':1,';':1},'yielded':{'to':1,'two':1},'space--ether':{'pervades':1},'watson':{'showed':1},'haunted':{'the':1},'roundabout':{'road':1},'conservator':{'of':1},'vividly':{'what':1,'interprets':1},'du':{'temps':1},'dr':{'.':18},'runs':{'through':1,'totteringly':1,'so':1,'for':1,'in':1},'tantalising':{'dream':1},'sky.':{'the':1},'web-footed':{'bird':1},'irregularities':{'of':1},'iron--and':{'is':1},'rung':{'on':1,'or':1},'voice--surely':{'one':1},'analytical':{'work':1},'freshwater':{'animals':5,'snail':1,'basins':2,'mammals':1,'fish':1,'polyp':1,'mussels.':1,'but':1,'.':1,'hydra':2,'race':1,'floods':1,'mussel':2},'steam':{'and':2,'or':2,'which':1},'captures':{'its':1},'venatici':{'is':1},'observer':{'the':1,'through':1},'condensed':{'and':2,'matter':1,'the':1,'to':1,'in':1},'observed':{'that':4,'phenomena':2,'had':1,'however':1,'one':1,'through':1,'in':1,'the':1,'.':1,'with':1,'by':1,'more':1},'tree-sloth':{'of':1},'arthropods':{'and':1,'such':1,'like':1,'which':1},'donations.':{'to':1},'torrents':{'of':1},'cattle':{';':1,'the':1},'miserable':{'specimen':1},'disappear.':{'illustration':1},'draws':{'for':1},'1917.':{'a':1,'this':1,'glass':1},'away':{'and':2,'the':3,'into':2,'back':1,'an':2,'down':1,'in':5,'from':10,'beneath':1,'when':2,'.':8,'chewing':1,'under':1,'is':1,'trillions':1,'altogether':1,'immediately':1,'by':3,'e.g':1,'many':1,'leaving':1,'entirely':1,'or':3},'sites':{'of':1},'unable':{'to':3},'drawn':{'on':2,'across':1,'into':3,'approximately':3,'.':1,'to':1,'in':4,'engraved':2,'by':2,'out':1},'previous':{'chapter':4,'energy':1,'experience':1,'one--the':1,'article':1,'line':1,'page':1,'day--a':1},'encounters':{'occur':1},'hatching.':{'reflex':1},'co.':{'harpy-eagle':1,'penguins':1},'circle--which':{'means':1},'we':{'forget':1,'soon':1,'discovered':1,'not':1,'go':3,'follow':1,'find':18,'discern':1,'had':2,'should':18,'to':2,'include':1,'might':3,'hope':2,'then':2,'get':18,'read':1,'watch':2,'cannot':29,'know':50,'presume':1,'mentioned.':1,'judge':1,'now':6,'dare':2,'arrange':1,'easily':1,'ever':1,'conceive':1,'leave':1,'continue':1,'lose':1,'found':2,'hasten':1,'mean':6,'often':1,'ascend':1,'briefly':1,'see':36,'are':47,'pass':2,'fail':1,'penetrated':1,'will':5,'detect':1,'confess':1,'may':41,'state':1,'learned':1,'approach':1,'exercise':1,'refer':1,'notice':1,'knew':1,'learn':1,'ascribed':1,'here':1,'imagine':1,'put':2,'come':3,'obtained':1,'received':1,'study':2,'owe':6,'agree':1,'turn':4,'usually':2,'think':6,'already':1,'can':39,'feel':1,'lengthen':1,'actually':1,'miss':2,'speak':6,'stare':1,'use':3,'described':1,'spoke':1,'would':3,'next':1,'start':1,'live':1,'call':26,'breathe':1,'wish':1,'understand':2,'gain':1,'believe':4,'must':42,'count':1,'look':4,'recall':1,'handle.':1,'aim':1,'suppose':1,'ought':1,'were':3,'could':13,'expect':1,'control':1,'compare':1,'have':124,'do':24,'almost':1,'describe':1,'moved':1,'consider':4,'say':6,'want':1,'need':4,'seem':3,'saw':13,'thought':1,'no':1,'belong':1,'take':4,'behold':1,'picture':1,'draw':2,'repeat':1,'connect':1,'utilise':1,'shall':23,'confined':1,'stop':1,'await':1,'reach':4,'reflect':2,'admire':1,'lay':1,'recognise':1,'remember':1,'emphasise':1,'reproduce':1,'allow':2,'hear':1},'rudimentary':{'gills':1},'terms':{'imposed':1,'of':21,'will':1,'experimenting':1,'from':1,'than':1},'discussion.':{'some':1},'wm':{'.':1},'bipeds--we':{'must':1},'enters':{'a':1,'the':3},'travellers':{'which':1},'clues':{'which':1,'in':1},'caledonia':{'which':1},'stricter':{'sense':1},'linkage':{'of':1,'between':1},'kitchen':{'.':1},'received':{'opinion':1,'the':4,'from':1,'written':1,'less':1},'climate':{'and':4,'a':1,'calls':1,'for':1,'of':2,'is':1,'became':1,'has':2},'pelomyxa':{'sometimes':1},'cox':{'arrangement':1},'ill':{'all':1,'suited':1},'nordics':{'afghans':1},'germinates':{'after':1},'cod':{'feeding':1,'family':1},'receives':{'a':1,'160':1},'unsunned':{'.':1},'disappears':{'before':1,'from':2,'in':1},'collecting':{'into':1,'centre':1,'centres':1},'tough':{'living':1},'soap':{'made':1,'bubble':4,'which':1},'ganymede':{'a':1},'engulfs':{'its':1,'it':1},'tons':{'on':2,'.':1,'in':1,'to':1,'of':6},'866400':{'--':1},'eventful':{'life-history':1,'thing':1,'day':1,'retention':1},'merchantibility':{'or':1},'speak':{'of':12,'the':1,'picturesquely':1,'unpacked':1,'got':1},'broadening':{'still':1},'sperm-cells.':{'the':1},'engines':{'.':1},'flexible':{'mounting':1},'thrice':{'the':1},'leech':{'called':1},'spermatozoon':{'has':1,'fertilises':1,'or':1},'repelled':{'by':1},'families':{'genera':1,'like':2},'innocent':{'seaweed':1,'creatures':1},'plebeian':{'crab-apple':1},'attacked':{'by':1,'however':1},'concerning':{'life':1,'tax':1,'the':1},'overtax':{'the':1},'millionth':{'of':2},'coherent':{'vane':1,'.':1},'them--a':{'common':1},'elvers':{'come':1,'snuggle':1,'.':1},'applied':{'to':7,'the':2,'however':1},'has':{'migrated':1,'enormously':1,'just':1,'developed':1,'over':1,'discovered':2,'ceased':2,'its':10,'captured':2,'certainly':1,'much':2,'torn':1,'had':3,'laid':1,'destroyed':1,'to':14,'only':2,'suffered':1,'guided':1,'happened':1,'meant':2,'his':1,'far':1,'attained.':1,'begun.':1,'five':1,'got':1,'not':8,'sorted':1,'now':3,'continued':1,'learned':2,'four':2,'annihilated':1,'lost':2,'always':2,'solved':1,'mastered':1,'become':14,'cooled':1,'declared':1,'often':3,'ten':1,'some':1,'somehow':1,'calculated':1,'gnawed':1,'begun':1,'led':2,'penetrated':2,'even':1,'shown':3,'said':2,'for':1,'frond-like':1,'yet':1,'written':2,'various':1,'moons':1,'probably':1,';':2,'ever':3,'claws':1,'attended':1,'recently':2,'risen':1,'however':1,'disappeared':1,'broken':1,'found':2,'put':1,'dissipated':1,'come':5,'thrown':2,'received':1,'great':1,'mingled':1,'language':1,'of':3,'changed':3,'conquered':2,'consequently':1,'raised':1,'already':1,'followed':1,'slipped':2,'instruments':1,'transit':1,'two':3,'brought':2,'agreed':1,'been':136,'reached':2,'precisely':1,'spawned':1,'given':5,'from':1,'fallen':1,'harnessed':1,'remained':1,'three':1,'long':1,'screened':1,'2':1,'wonderfully':1,'therefore':1,'passed':1,'taken':5,'slowly':1,'entered':2,'.':1,'more':2,'suggested':1,'himself':1,'thus':1,'completed':1,'occurred':1,'but':1,'known':1,'worked':1,'gills':1,'arisen':1,'carried':1,'made':3,'this':1,'shrunk':1,'moulted':1,'nine':1,'many':1,'tackled':1,'called':1,'gone':5,'proved':1,'played':1,'almost':4,'likewise':1,'turned':1,'an':4,'helped':1,'in':3,'affinities':1,'occupied':1,'shown.':1,'grown':1,'influenced':1,'built':1,'no':3,'divided':3,'also':1,'absorbed':1,'adapted':1,'degenerated':1,'effected':1,'added':2,'gradually':1,'eight':1,'plenty':1,'a':20,'succeeded':3,'endeavoured':1,'moved':1,'upset':1,'implied':2,'so':3,'very':1,'the':8,'realised':1,'left':1},'conviction':{'the':1,'that':1},'comprehension.':{'illustration':1},'air':{'and':4,'all':1,'there':3,'just':2,'is':6,'reaches':1,'as':1,'through':1,'at':3,'in':3,'from':1,'acts':2,'when':1,'.':13,'to':1,'which':3,'6':1,';':2,'has':4,'was':1,'into':1,'be':1,'we':1,'over':1,'goes':1,'on':1,'but':1,'underneath':1,'262':1,'struggle':1,'waves':1,'with':2,'by':3,'must':1,'a':3,'water':5,'of':1,'35':1,'loses':1,'will':1,'the':2,'or':1},'aim':{'of':2,'at':1},'voluminous':{';':1},'abrupt':{'and':1},'applies':{'also':1,'the':1,'whatever':1,'to':3},'aid':{'of':1,'.':1},'voice':{'we':1,'rose':1,'is':1,'broadened':1,'due':1,'but':1,'.':1,'became':1,'expresses':1,'the':1,'was':2,'becoming':1},'amphibians--the':{'reptilian':1},'cavern':{'of':3,'the':2,'179':1},'cylinder':{'of':1},'plover':{'has':1,'from':1},'have':{'planetary':2,'followed.':1,'quoted':1,'migrated':1,'scattered':1,'discovered':4,'sunk':2,'mentioned':2,'its':1,'just':9,'regarded':1,'had':2,'to':14,'only':4,'spread':2,'meant':2,'then':1,'good':1,'returned':1,'very':3,'furnaces':1,'words':1,'shared':1,'not':12,'now':1,'illustrated':3,'failed':1,'lost':1,'ceased':1,'always':1,'traced':1,'prolonged':1,'watched':1,'mastered':1,'dealt':1,'served':1,'cooled':3,'dwindled':1,'tenanted':1,'often':1,'burst':1,'acquired':1,'some':2,'direct':1,'identified':1,'carefully':1,'taught':2,'safeguarded':1,'further':1,'living':1,'shown':4,'said':9,'discovered--pulling':1,'missed':1,'apparatus':1,'definite':1,'behind':1,'won':1,'emerged':1,'moons':1,'rotted':1,'got':4,'learned':1,'ever':1,'told':1,'we':1,'full':1,'originated':1,'peculiarly':1,'sprung':1,'here':1,'reason':2,'will':1,'found':7,'put':3,'proceeded':1,'come':4,'gained':2,'on':2,'great':1,'reared':1,'journeyed':1,'of':4,'changed':1,'greatly':1,'conquered':1,'fallen':1,'already':5,'gone':3,'appeared':1,'delighted':1,'visible':1,'maintained':1,'another':2,'reached':1,'risen.':1,'given':2,'described':1,'become':8,'exposed':1,'three':1,'been':88,'their':7,'recognised':1,'combined':1,'passed':1,'resulted':1,'travelled':1,'closed':1,'thrown':1,'from':1,'lived':2,'lungs':1,'both':1,'moved':1,'differences':1,'occurred':1,'but':1,'taken':2,'heat':1,'races':1,'protections':1,'known':1,'probably':1,'worked':1,'removed':1,'entered':3,'arisen':4,'partially':1,'made':6,'succeeded':2,'this':1,'neap':1,'considered':1,'evolved':2,'many':2,'more':1,'called':1,'at':1,'admired':1,'seven':1,'chlorophyll':1,'proved':4,'remained':2,'is':1,'thus':1,'an':3,'astonished':1,'heard':2,'as':1,'something':1,'planets':1,'in':9,'seen':18,'apparently':1,'any':1,'grown':1,'varied':2,'inborn':1,'no':14,'rather':1,'lit':1,'also':2,'stimulated':1,'read':1,'several':1,'used':1,'what':2,'most':1,'discredited':1,'plenty':1,'nothing':1,'such':1,'yielded':1,'revealed':1,'a':25,'profited':1,'scarcely':1,'to-day':3,'bilateral':2,'stupendous':1,'nevertheless':1,'thought':1,'implied':1,'so':1,'lamented':1,'mechanical':1,'the':5,'counted':1,'bodies':1,'left':2},'crowning':{'instance':1,'examples':1,'advantage':1},'exceptionally':{'smooth':1},'sting':{'the':1,'which':1,'.':1},'trilobites':{'crustaceans':1,'illustration':1,'were':1},'brake':{'on':1,'.':1},'blame.':{'after':1},'comparative':{'anatomy':1,'distances':1,'nearness':1,'psychology':1,'sizes':3},'undulatory':{'movement':1},'brilliantly':{'luminous':1},'m.c.':{'.':1},'descent':{'of':6,'that':1,'from':1,'to':1},'conclusions.':{'the':1},'patent':{'and':1},'demonstration':{'of':1},'centre.':{'as':1},'punctuation':{'of':1},'varies':{'as':1,'.':1,'greatly':1,'periodically':1},'parasitism':{'it':1},'diplodocus':{'as':1},'sheltered':{'may':1,'life':1},'accumulating':{'a':1,'and':1,'age':1,'.':1},'monarch':{'of':1},'lithium':{'three':1},'crevices':{'among':1},'wheel':{'be':1,'rapidly':1,'that':1,'when':1,'is':1,'turned':1,'will':1,'as':3,'animalcule':1,'was':1},'independent':{'methods--one':1,'of':1,'orbits':1,'stellar':1,'lives':1,'existence':1},'86500':{'9':1},'hang':{'on':1},'evil':{'associations':1},'hand':{'feed':1,'and':8,'holds':1,'is':1,'some':1,'gregariousness':1,'as':2,'in':2,'miss':1,'from':1,'there':1,'when':3,'.':1,'till':1,';':1,'was':2,'thus':1,'it':1,'with':1,'made':1,'of':8,'sometimes':1,'so':1,'the':2,'where':1},'kinnaman':{'taught':1},'patagonia':{'there':1,'.':1},'nip':{';':1},'centred':{'in':1},'kept':{'lizzie':1,'from':2,'by':1,'for':1},'whereby':{'new':1,'the':1,'distinctively':1,'energy':1},'likes--and':{'the':1},'engrained':{'instinctive':1,'enregistered.':1},'wisps':{'of':1},'contact':{'information':1,'sy':2,'links':1,'information:':1,'.':1,'the':1,'with':2},'elongated':{'and':1,'palm-bones':1,'mobile':1,'outermost':3,'oval':1,'bodies':1},'furneaux':{'life':1},'centres':{'of':7,'drawing':1},'the':{'limited':1,'practicability':1,'psycho-analyst':1,'magnetic':5,'comparatively':1,'dynamic':1,'four':3,'chameleons':1,'aegir':4,'controversial':1,'oldest':6,'muzzle':1,'brackish':1,'physiological':3,'similarity':2,'sunlit':1,'fine-grained':1,'thinnest':2,'under':3,'humerus':1,'risk':5,'arboreal':5,'aurora':5,'oceans':1,'pigment':1,'smack':1,'coal-measures':1,'gratification':1,'east.':1,'fingers.':1,'conception':2,'bringing':1,'monkeys':2,'vast':9,'internally':1,'prize':1,'parrot':1,'present.':1,'correct':1,'danger-signal':1,'succession':2,'jumna':1,'jungle-fowl':1,'breast-bone':3,'cave-lion':1,'achievements':2,'force':3,'monotonous':1,'faintest':1,'excited':1,'feathers':6,'seas.':2,'nail':2,'surrounding':9,'second':18,'street':2,'infiltration':1,'inanimate':1,'blue':6,'change.':1,'unborn':3,'beaten':1,'consequent':1,'rest.':1,'reconstruction':2,'chromosphere':4,'new':21,'net':1,'protozoon':1,'surface--the':1,'evolving':1,'lithosphere':1,'men':6,'residual':1,'atoms':26,'seven-weeks-old':1,'protection':2,'ploughed':1,'aid':1,'active':4,'evolutionist':2,'cardboard':1,'contraction':2,'dry':19,'connaissance':1,'surface-atoms':1,'frog-hopper':1,'light.':1,'credit':3,'changes':5,'skull-cap':3,'diameter':3,'stray':1,'straw':1,'highly':1,'skull-walls':1,'visible':2,'medium':5,'total':6,'unit':2,'answers-back':1,'remainder':1,'arms':6,'dog-toothed':1,'mightiest':1,'calm':1,'water-spider':2,'type':2,'pistil':1,'females':3,'lungs':1,'wary':1,'horsetail':1,'whirling':1,'glass':6,'warm':2,'adult':3,'continual':1,'organic':1,'midst':1,'circumstances':1,'abundance':3,'word':10,'mimickers':4,'accomplishment':1,'eclipse':1,'worm':3,'roof':3,'theories':2,'mammalian':1,'era':2,'appendage':1,'animal.':1,'clock-work':1,'mud-fishes':1,'phrase':7,'alternating':1,'allantois':2,'serpent':1,'climax':3,'shore.':1,'powerfulness':1,'caution':1,'oil-sheet':1,'present-day':4,'advancing':3,'absolute':2,'end':22,'thing':2,'song':1,'nuts':2,'very':19,'hot':1,'significance':3,'answer':9,'ordinary':12,'ancestor':1,'massive':2,'poker':4,'rise':2,'minority':1,'mouths':2,'ptarmigan':2,'abdomen':1,'diagram':9,'dinosaurs':1,'wrong':2,'pearl-bearing':1,'vase':1,'domed':2,'types':1,'amoeboid':1,'leplay':1,'third':11,'spout':1,'headquarters':1,'greek':7,'green':8,'ultimate':4,'things':1,'sun.':13,'order':9,'wind':9,'blind':1,'interpretation':3,'alternation':1,'sheltering':1,'orang':7,'underside':1,'fore-limbs':4,'thesis':1,'ancients':2,'spontaneous':2,'famille':1,'breeding-place':2,'fit':1,'crew':1,'better':2,'woolly-haired':1,'production':3,'hidden':1,'gateways':1,'sea-water':3,'swim-bladder':1,'combination':2,'tree-stems':1,'young.':1,'revelations':1,'giraffe':1,'effects':2,'monarch':1,'stars;':1,'bank':2,'bread':1,'shadows':1,'dingo':2,'rocks':9,'good':4,'fertilised':8,'victory':1,'arrow':2,'side':4,'associative':1,'telescope.':1,'development':10,'telescope':10,'series':2,'principles':3,'solution':4,'contracting':1,'wave-lengths':1,'laboratory':3,'dawn':9,'ring':2,'pigments':1,'gibbon':5,'quality':5,'ice-sheets':1,'method':9,'reader':6,'heavenly':2,'revolving':1,'newly':4,'size':25,'langur':1,'foundation':12,'perception':1,'carcass':1,'wave-length.':1,'eternal':1,'strata':1,'free':4,'standard':1,'sensory':3,'skin.':1,'ancient':6,'formation':5,'struggle':15,'estimate':1,'heat':11,'ultra-violet':1,'publication':1,'enormous':5,'grasses':1,'days':1,'adjustment':1,'baltic':2,'purpose':2,'arrows':1,'wasp':2,'unlit':1,'peculiarity':1,'scissors':1,'thick':1,'ditch':2,'electronic':2,'mercury':1,'pelagic':1,'top':11,'neck':4,'heights':1,'legs':2,'genesis':1,'vapoury':1,'kiwi':2,'fiery':1,'instreaming':1,'fibrous':1,'diversified':1,'sciences.':1,'bell.':1,'floor.':1,'wisdom':1,'nurse-frog':1,'glumes':1,'somewhat':2,'evil':1,'peculiar':2,'flightless':1,'distance':13,'yerkes':7,'tree':2,'atom.':1,'final':5,'project':31,'matter':7,'flame':1,'historical':2,'shore-waters':1,'feeling':1,'acquisition':1,'groaning':1,'pliocene':5,'mind':18,'spectrum':9,'raw':4,'seed':1,'manner':1,'nervures':1,'rock-pool':1,'relatively':8,'strength':1,'prehensile':1,'thoroughly':1,'latter':7,'potentialities':1,'snow':3,'sound':3,'toothed':1,'subjects':1,'doors':2,'beta-rays':1,'shallow':2,'permian':8,'multicellular':1,'king-crab':1,'centres':1,'changefulness':1,'vermiform':2,'mouth':10,'letter':2,'echoes':1,'coil':4,'nutritive':1,'refractor':2,'ultramicroscope':1,'photosphere.':1,'episode':1,'professor':1,'metal':3,'dog':5,'orderly':1,'points':2,'principle':5,'sun':188,'nineteenth':8,'notion':2,'marvel':1,'pollen':1,'spikelets':1,'insects':2,'sea-anemone':4,'attempts':1,'subtle':1,'availability':1,'lessons':1,'ear.':1,'resemblance':5,'quaint':2,'pleistocene':2,'sentence':1,'geologist':2,'fifty-foot':2,'rich':1,'gods':1,'population':3,'plate':4,'mixture':2,'above':11,'fluid':2,'foremost':1,'bat':3,'covering':1,'bay':1,'discs':1,'contrast':2,'freshwater':6,'ears':1,'lettering':1,'observer':1,'habit':5,'radium':4,'outgoing':1,'zones':1,'tree-sloth':1,'full':14,'radius':1,'result':15,'disturbing':1,'rarity':2,'best':4,'subject':4,'pebbles':1,'capacity':2,'palaeolithic':2,'rings':1,'artificial':1,'paternal':1,'mud':7,'score':2,'toad':3,'simplest':9,'approach':1,'hatching.':1,'discovery':23,'terms':12,'nature':23,'confusion':1,'weak':1,'physicist':5,'sand-crab':1,'lurching':1,'larynx':1,'aquarium':1,'extent':2,'carbon':1,'flowering':1,'debt':1,'well-lighted':1,'kitchen':1,'tyranny':3,'behaviour':16,'climate':3,'outcome':13,'sperm-producer':1,'triggers':1,'earth.':7,'heating':1,'feathering':1,'cod':2,'distinction':2,'genus':1,'fore-leg':2,'repertory':1,'discolorations':1,'inquisitive':1,'purling':1,'path':5,'grazing':1,'sperm-cells.':1,'basis':3,'union':3,'three':6,'tiny':3,'trigger':6,'interest':1,'fry':2,'exactness':1,'spermatozoon':3,'life':7,'beach.':1,'deeper':2,'plebeian':1,'eastern':1,'abyssal':1,'conifers':1,'millionth':2,'mazy':1,'child':6,'elvers':1,'centrosome':1,'ether.':1,'exception':1,'adaptations':1,'air':39,'aim':1,'neat':1,'fainter':1,'property':1,'study':6,'natives':1,'seven':3,'crowning':1,'equator':5,'photographer.':1,'player':1,'comparative':3,'undulatory':1,'mouse':1,'descent':2,'belle':1,'punctuation':1,'daughter-units':2,'siamang':1,'complex':1,'peopling':3,'belly':1,'reptilian':2,'vegetable':1,'snow-line':1,'several':1,'european':2,'wheel':7,'independent':1,'georgics':1,'milky':13,'tops':1,'rain':1,'hand':9,'characters':1,'tune':1,'tassel':3,'stimuli':1,'ocean':5,'materials':1,'greatest':13,'arrow-worms':1,'claims':1,'marsupials':1,'musical':1,'left':5,'sea-skimmers':1,'just':1,'planetesimals':1,'vaporisation':1,'sporting':1,'mending':1,'disguise':2,'neanderthalers':1,'human':25,'facts':15,'yes':1,'emergence':7,'previous':3,'thyroid':3,'terrific':1,'hills':2,'infinitely':1,'old-fashioned':1,'royal':1,'salmon--forming':1,'evidences':3,'thickening':1,'long-lost':1,'board':1,'gaboon':2,'east':1,'eocene':2,'laying':1,'elevation':1,'advances':1,'survival':1,'sussex':1,'vulture':1,'possible':3,'forester':1,'photosphere':9,'birth':2,'partridge':1,'shadow':2,'rough-and-tumble':1,'shoulder':1,'war.':2,'insurgent':1,'precise':3,'sand-hoppers':2,'autumn.':1,'x-rays.':1,'enregistered':2,'mosquito':2,'night':1,'amoebae':1,'portuguese':2,'right':12,'old':13,'people':2,'crown':2,'dead':1,'clawed':1,'winds':1,'inorganic':2,'rill':1,'intellect':1,'orchid':1,'dense':1,'rhine':1,'bottom':6,'ear':7,'opposite':5,'fox':2,'distrust':1,'ice':3,'flounder':2,'loins':1,'tertiary':1,'seals.':1,'colour-cells':2,'beating':2,'monkey-ape-man':1,'palatable':1,'energy':36,'illustration':5,'cork':1,'shifting':1,'capacious':1,'flinty-shelled':1,'blackest':1,'properties':2,'chapter':1,'skin-twitching':1,'limitation':1,'boiling':1,'cloudlets':1,'ribs':1,'o':1,'wave-length':1,'horizon':1,'herring-gull':1,'efforts':1,'ores':1,'lamprey':1,'primitive':3,'cloud-screen.':1,'dilemma':1,'variations':1,'scantier':1,'peppered':1,'son':1,'contrasts':1,'bricks.':1,'doctrine':1,'spores':1,'palaeozoic':4,'indispensable':1,'flying':9,'sunlight':7,'class':2,'conservation':1,'physicists':2,'fraction':1,'dorsal':1,'war':4,'lowest':5,'head':8,'marten':1,'form':10,'fully-formed':1,'becoming':1,'differences':2,'peninsula':1,'quiet-flowing':1,'same.':1,'solar':35,'minuteness':2,'true':5,'otter':3,'continuance':3,'reproductive':2,'ancestral':1,'bounds':1,'centipede':1,'economic':1,'bird-dropping':1,'egg-eating':1,'palm':1,'cosmos':1,'stages':1,'temper':1,'passenger':1,'juvenile':2,'strengthening':1,'hotter':1,'heidelberg':4,'seeds--and':1,'mirror':2,'palm;':1,'evidence':2,'candle':1,'ship':3,'physical':4,'mediterranean':3,'solicitation':1,'inborn':3,'floor':8,'font-de-gaume':2,'negatively-electrified':1,'tip':4,'reality':3,'successful':2,'nestling':1,'setting':2,'papers':1,'superfluous':1,'robber-crab':5,'picture':7,'ordovician':2,'palms':1,'teats':1,'braking':1,'diet':1,'genealogical':2,'irs.':1,'dullest':1,'discharge':2,'thorax':1,'immemorial':1,'stamens':2,'bullet':2,'daily':1,'collared':1,'gorilla':4,'reception':1,'time':19,'skull-cap.':1,'serious':1,'nuclei':1,'tigris':1,'breadth':1,'irrigation':1,'concept':1,'chain':1,'limbless':1,'colour-change':1,'varying':3,'brownian':4,'focus':1,'hind-legs':2,'nerve-cord.':1,'skin':14,'jointed-footed':1,'primeval':4,'retention':1,'layers':2,'inverse':1,'essentials':1,'father':5,'passage':4,'environment':4,'unpleasant':1,'reptiles':2,'walking-fish':2,'ulna':1,'division':1,'protective':2,'month.':1,'advantage':2,'rotifer--we':1,'liability':1,'aesop':3,'first-known':1,'nesting':1,'exact':2,'minute':3,'cool':1,'dim':1,'level':4,'sedimentary':3,'gum':1,'magnet':4,'crustacean':1,'backboneless':2,'speculation':1,'accumulation':1,'upper':23,'work':19,'occurrence':3,'findings':1,'full-grown':2,'piltdown':5,'hair.':1,'trent':4,'bacteria':2,'spectral':1,'leaf-butterfly':1,'constitution':4,'assistance':1,'axes':1,'stomach.':1,'current':6,'supporting':2,'coccyx':1,'honour':1,'hairs':3,'evolution-idea':4,'anvil.':1,'whiteness':1,'water':49,'guise':1,'cave-bear':1,'twentieth':1,'address':1,'dwindling':2,'teacher':1,'change':5,'pearly':8,'brilliant':1,'shift':2,'dublin':1,'trial':2,'stomachs':1,'suggestion':3,'weird':1,'copper.':1,'mimicked':4,'elect':1,'seashore':8,'littoral':2,'cuttlefishes':3,'working':2,'sake':1,'positive':2,'anatomical':2,'prey':2,'flaunting':1,'negroes':1,'australian':6,'angels':1,'fish-eating':1,'diurnal':1,'water-ouzel':1,'apparent':3,'malay':1,'minnows':2,'appendix':1,'virtue':1,'cases':1,'easiest':1,'opossums':2,'sum-total':1,'sea-anemones':2,'cat':1,'hardest':2,'jetsam':1,'mortality':1,'following':6,'making':7,'fauna':6,'coral':3,'stimulating':1,'streak':1,'heart':6,'portals':1,'wrist-bones':1,'reflector':2,'figure':5,'frogs':1,'bulkiest':1,'stroke':1,'chin':1,'octopus.':1,'rays':15,'requirements':1,'winter':5,'comb-bearers':1,'inheritance':1,'dispositions':1,'means':4,'species':3,'chemical':6,'vital':5,'candle.':1,'fourth':4,'elephant':4,'dominance':1,'economy':1,'burrowing':1,'southern':3,'date':2,'behaviour--experimenting':1,'man':6,'branches':10,'outline':9,'liquid':4,'unimportant':1,'corona':3,'darkened':1,'african':2,'basket':1,'bolometer':1,'outflowing':2,'shield':1,'gradual':6,'pointed':1,'years':1,'brain':23,'experiments':6,'statements':1,'cold':4,'insurgence':2,'birds':3,'tendency':5,'nucleus.':2,'solitary':1,'limbs':1,'ice-fields':2,'thumb':5,'rhizopods':2,'interesting':3,'presence':4,'flesh-and-blood':1,'aquitania':1,'attraction':1,'creations':1,'spacious':1,'main':28,'meridian':2,'bird.':1,'evolution':45,'records':3,'archaeozoic':1,'tails':1,'water-shrew.':1,'not':1,'widespread':1,'halo':1,'term':2,'name':4,'seaweed-growing':1,'advent':1,'gill-slits':1,'careless':1,'jellyfish':2,'rock':9,'turtle':2,'sugary':2,'square':3,'reeds':1,'torch':1,'treacherous':3,'challenger':1,'fires':1,'year':6,'monitors':1,'neighbourhood':1,'living':18,'factors':6,'amnion':2,'greeks':3,'increase':2,'miles':1,'ladder':1,'overflowing':1,'ascendant':1,'theory':14,'soap-bubble':1,'divergence':3,'possibility':12,'quite':1,'quart':2,'intruding':1,'advantages':2,'sunlight.':1,'fuller':1,'obligation':1,'marine':2,'inevitable':1,'card':2,'care':1,'advance':2,'language':1,'selections':1,'transition':5,'british':5,'ostrich':1,'motion':2,'disguises':1,'place':8,'invalidity':1,'deep-sea':4,'close-set':1,'star':6,'frequent':2,'first':71,'origin':14,'one':21,'long':15,'conifer':1,'message':6,'open':29,'millions':3,'sheep':3,'little':5,'law':3,'silent':1,'spiral.':1,'bite':1,'callous':1,'plastic':1,'stimulation':1,'plains':2,'cooling':2,'2':1,'pockets.':1,'moisture':1,'white':11,'lingering':1,'vapours':1,'gravelly':1,'eyes':8,'way':18,'starfish':1,'brains':2,'canine':1,'seat':3,'photographic':9,'splendid':1,'pterodactyls':2,'cracks':1,'effective':1,'three-spined':1,'crowded':1,'coco-palm':1,'future':11,'fertilisation':1,'cards':2,'gigantic':1,'mariner':1,'photosynthesis':1,'sublime':3,'coconut':1,'rooks':1,'spectroscope:':1,'ant':3,'spectroscope.':1,'lens-shaped':2,'buried':1,'maximum':1,'zoo':1,'snout':2,'sciences':1,'potential':1,'fracture':1,'online':2,'interior':7,'performance':2,'jungle':5,'closer':1,'sure':1,'chromosomes':1,'normal':4,'azores':1,'indelible':2,'price':1,'molecule':1,'falls':2,'visitors':1,'beta':5,'successive':5,'pair':1,'thigh-bone':1,'average':7,'freshwaters':9,'hungry':1,'bustard':1,'tooth':1,'idea.':1,'quiescent':2,'salt':1,'laws':4,'detective':1,'walking':1,'discoverer':1,'merit':1,'gill-cover.':1,'bright':3,'threshold':1,'line':7,'ground':23,'slot':2,'nemesis':2,'ratio':2,'gulf':1,'germ-cell':1,'treasure':1,'proportion':2,'only':13,'down-breaking':1,'black':5,'uppermost':1,'down-rushing':1,'lighted':1,'supra-renal':2,'bittern':1,'freezing':1,'midriff':1,'truly':1,'duckmole':4,'remoter':1,'mud-flats':1,'negative':4,'lighter':2,'primates':4,'clearest':1,'pollen-nucleus':1,'fanciful':1,'parasitic':1,'morning':2,'naked':2,'penguins':1,'sea--the':2,'london':1,'pituitary':1,'vision':1,'kernel':1,'oven':1,'seas':6,'lancelets':1,'silurian':4,'stars--or':1,'relative':4,'1921':1,'stigma':1,'concentric':1,'wonder':2,'ways':5,'subsequent':1,'sites':1,'under-skin':2,'colours':4,'outside':4,'chimpanzees':1,'moons':2,'man.':2,'volvox':1,'notice':1,'parent':10,'eye':20,'screen':7,'rapidly':1,'big-brain':4,'sea.':5,'proterozoic':1,'article':2,'cities':1,'dates':1,'successes':1,'many':1,'region':2,'sodium':1,'quiet':1,'altamira':4,'man-ape':2,'flipper':3,'wheels':1,'expression':4,'surface.':2,'moon;':1,'generalisation':1,'brightly':1,'color':1,'colony':3,'period':7,'spinthariscope':1,'learning':1,'boar':1,'constant':1,'pod':1,'skeletons':2,'sun-spots':1,'fitful':2,'late':5,'west':3,'shortening':2,'combined':1,'reflex':1,'exhaustion':1,'fiftieth':1,'direction':9,'gist':2,'circumference':2,'haunt':1,'sea-horses':1,'external':3,'infusorians':1,'careful':2,'spirit':2,'robber':1,'case':37,'breast.':1,'caucasians':1,'developing':4,'co-ordination':1,'mount':4,'prominence':1,'dints':1,'situation':2,'margin':3,'moon.':1,'coolest':2,'characteristics':2,'nautical':2,'middle':5,'regularity':1,'sudden':3,'tse-tse':1,'eras':1,'unsounded':1,'beaver':5,'jackdaw':1,'floating':6,'movements':9,'rungs':2,'helmet':1,'different':8,'alphabet':1,'same':99,'eggs--up':1,'food':10,'inquiry':2,'agitated':1,'grain':1,'status':1,'oyster-catcher':1,'oil':1,'vestigial':2,'arctic':1,'director':1,'running':1,'edges':5,'delicate':3,'equatorials':1,'changing':2,'perennial':1,'constitutional':1,'severe':2,'frontispiece':1,'bottle':1,'model':1,'otherwise':1,'bodies':1,'overcrowding':2,'summer':3,'money':1,'armour':1,'egg-cell':1,'rest':6,'down-drifting':1,'rule.':1,'potentiality':1,'differentiation':1,'speed':16,'captured':1,'death':2,'widest':3,'hint':1,'bricks':3,'golden':1,'geological':6,'meteorite':1,'hind':2,'dovecot':1,'heavier':3,'skies':1,'real':2,'bitterling':3,'spectacular':1,'rules':1,'outermost':1,'non-digitate':1,'tissues':2,'early':13,'water-measurers':1,'vacuum':1,'cavern':3,'world':46,'part':7,'left-hand':3,'sensational':1,'fossils':2,'oxygen':3,'exquisitely':1,'velocities':1,'multifarious':1,'sieves':1,'benefit':1,'downward':1,'sharp':1,'twelve':1,'night-light':1,'exposed':1,'splash':1,'cathode':1,'pacific':2,'astronomer':6,'duration':1,'pasture':1,'racial':1,'ascent':6,'extinct':3,'gross':1,'calculating':1,'prolific':2,'intricacy':1,'memories':2,'tube':11,'moon':76,'pioneer':3,'critical':2,'lunar':2,'particles':12,'others--the':1,'welcome':1,'wheat':2,'buckling':1,'power':16,'sixth':2,'nails':1,'stereotyped':2,'substratum':1,'broken':1,'alps':1,'resurrection':1,'comparison':1,'stone':1,'ear-trumpet':2,'central':9,'piety':1,'insect':9,'shrimp':1,'addition':1,'wolf':3,'act':3,'pre-human':1,'amber':1,'freeing':1,'lands':2,'fertile':2,'sea-grass':1,'burning':1,'instruments':1,'spreading':1,'surinam':1,'spinal':4,'sneering':1,'rising':1,'elementary':1,'mark':1,'shrinking':2,'shells':1,'bristles':1,'literal':1,'dispersion':1,'strict':3,'world--weighs':1,'low':1,'stars':39,'house':2,'macaques':1,'hen':1,'bubble':4,'fish':6,'continents':3,'mammals':4,'prawn':1,'manipulative':2,'strenuous':1,'elimination':1,'parasites':2,'hottest':1,'land.':1,'wild.':1,'pull':1,'largest':9,'circulation':2,'stoneless':1,'multiplicity':1,'electroscope':1,'nearest':7,'pre-cambrian':1,'grasp':1,'shell.':1,'grass':3,'mimicked.':1,'moles':2,'vedda':1,'dangerous':1,'sinking':1,'lingula':1,'deep':10,'general':23,'imagination':3,'sun--measuring':1,'at':1,'planets':19,'cathedral':1,'corresponding':3,'film':3,'tedious':1,'beds':2,'inflated':1,'shore-haunt':6,'field':4,'prism':3,'polar':8,'vocabulary':1,'bacillus':1,'shelter':2,'planet.':1,'carnegie':2,'important':5,'nucleus':12,'marshes':1,'environing':1,'queensland':1,'sun--a':1,'pool':3,'network':1,'building':1,'condensation':2,'remote':1,'difficulties':7,'mimic':2,'tree-tops':1,'ovary':1,'starting':1,'original':13,'pheasant':1,'skeleton':2,'founder':1,'peacock':1,'lack':1,'muscle-fibres':1,'milt':1,'month':9,'light-waves':1,'upkeep':1,'welfare':2,'plodding':1,'causes':1,'synthetic':2,'stored-up':1,'number':14,'remarkable':2,'inexhaustible':2,'former':1,'tail':10,'boiling-point':1,'friction':1,'safety':3,'presentation':1,'activities':1,'turnips':1,'worse':1,'devonian':8,'chameleon':2,'far':9,'coloured':5,'worm.':1,'psychologist':1,'verb':1,'fan':1,'sandstones':1,'fall':3,'difference':2,'forking':1,'accompanying':1,'stimulus':2,'ceaseless':1,'list':1,'applicable':1,'caucasian':1,'large':9,'sand':1,'three-millionth':3,'small':11,'mammal':6,'locomotive':2,'trumpeting':1,'still':2,'fringing':1,'cannonade':1,'197':1,'reins':2,'past':16,'intricate':1,'rate':10,'invention':1,'double-slide':2,'creatures':1,'lung-fishes':1,'swampy':1,'darkness':2,'consumers':1,'clock':3,'deeply':1,'crust':2,'emotions':1,'thickness':3,'public':3,'multitude':1,'movement':2,'creature.':1,'toes':1,'malaria':2,'martians':1,'compilation':1,'loose':3,'component':1,'answers':3,'hours':1,'threads':2,'trunk':1,'directions':1,'strong':2,'transformation':2,'search':2,'teeth':5,'difficulty':1,'riviera':1,'experimenting':3,'unproved':1,'amount':3,'social':3,'action':4,'slope':2,'narrow':2,'elongated':2,'cataract':1,'tides.':1,'family':1,'spawning':3,'utilisation':2,'chalk':1,'globes':2,'vertebrae':2,'extinction':1,'herring':1,'life-histories':2,'taker':1,'eye--we':1,'two':30,'almost':4,'cultivation':1,'soil':3,'mysterious':4,'jurassic.':1,'ovules':2,'minor':1,'more':18,'scotia':1,'door':2,'substances':1,'text.':3,'emission':1,'chimpanzee':5,'instrumental':1,'stick':3,'particular':9,'foundations':1,'straight-haired':1,'weathering':3,'presumed':1,'fleece':1,'primate':2,'science':3,'centrifugal':1,'moisture-laden':1,'lung-fish':1,'lamp-shell':2,'male':18,'radiations':1,'history':14,'beautiful':6,'shark':1,'nautilus':1,'brown':8,'wave.':1,'brain-mind':1,'autumn':2,'sphere':1,'sense':10,'pond':3,'dress':1,'offspring':2,'salts':3,'axis':1,'terrestrial':4,'huge':3,'upbuilding':1,'starting-point':2,'breaking':1,'milk':1,'oligocene':2,'everyday':2,'glowing':2,'friction.':1,'sacred':1,'freezing-point':3,'daughter-cells':1,'creature':17,'simplicity':1,'plant':5,'salt.':1,'paloloworm':1,'trial-and-error':1,'triumphs':2,'plane':1,'pupae':1,'adventure':1,'polynesian':1,'waves':20,'invasion':4,'inconceivable':1,'a':1,'short':4,'dispersion--that':1,'coat':1,'spectra':1,'buns':1,'coal':1,'shore':34,'tentacles':2,'fundamental':8,'egg':4,'triassic.':1,'bustle':1,'pans':1,'infant':1,'earthworm':3,'help':1,'copper':1,'winged':1,'much-disputed':1,'mission':1,'cross':2,'attitude':1,'scientist':1,'lanugo':1,'existence':5,'kinetic':1,'visceral':1,'roots':2,'thirtieth':2,'arteries':1,'thrilling':1,'systema':1,'tickings':1,'lateral':1,'conjugation':1,'actually':2,'bell-animalcules':1,'absence':4,'parts':4,'microscopic':4,'founders':1,'mammal--instinctive':1,'partitions':1,'sheaves':1,'lowell':1,'evening':1,'reappearance':1,'motley':1,'males':2,'primary':5,'framework':2,'walls':5,'iridescent':1,'foot':2,'linking':1,'adventurous':1,'association':2,'cambrian':8,'mystery':2,'slipper':3,'mathematician':3,'ashes':1,'positions':1,'neanderthalers--the':1,'cavendish':1,'physiologically':1,'heavy':3,'reactions':1,'mental':4,'weight':1,'wall-like':1,'colder':1,'hare':3,'notochord':3,'ripple':1,'balance':3,'event':1,'croaking':2,'really':1,'mottled':1,'neanderthal':12,'pigeon':3,'abysses':3,'nautiloids':1,'fountain':1,'dying':1,'issue':1,'prominences':1,'meteoric':1,'foreground':1,'belief':1,'protruding':1,'story':19,'extraordinary':4,'reason':8,'base':6,'brightest':1,'members':7,'heads':2,'earliest':7,'beginning':39,'revolutionary':1,'producers':2,'albatross':1,'american':1,'fruit':1,'circuit':2,'expedient':1,'mangrove-trees':2,'solidly':1,'knots':2,'flood':1,'reversing':1,'moorhen':2,'probability':5,'radical':1,'bullies':1,'song-thrush':2,'antiquity':2,'well-known':3,'dust':2,'scots':1,'warty':3,'soapy':1,'earthworms':2,'idea':10,'horse':10,'tadpoles':2,'temperature':16,'introduction':2,'leading':1,'light-gatherer':1,'least':5,'assumption':1,'statement':2,'scheme':1,'danger-call':1,'muscles':3,'storm':2,'glow':1,'tides--another':1,'immediate':3,'basal':1,'treasures':1,'parr':1,'rifle':1,'prodigious':1,'selenium-cell':1,'modes':1,'kind':5,'observatory':1,'tunic':1,'kindly':1,'parent--little':1,'double':2,'vocal':1,'recording':1,'contrary':1,'risks':5,'egg-cells':1,'head.':1,'playing':3,'anthropoid':10,'stickleback':3,'outstanding':1,'heaviest':3,'ages':8,'well-developed':1,'colour-resemblance':1,'elaboration':1,'egg.':3,'hare--with':1,'organs':1,'gathering':1,'mountain':5,'dancing':3,'speculative':1,'cave':1,'peculiarities':1,'majority':3,'internal':4,'lip':1,'useless':1,'day.':1,'play':3,'electric':13,'capillaries':1,'eggs':21,'measures':1,'salmon':17,'depths':5,'most':67,'alpha':2,'extremely':2,'approved':1,'head-end':1,'equatorial':2,'whalebone':1,'prolongation':2,'clear':1,'instrument':6,'transmissibility':1,'seething':1,'electrons':15,'artistic':1,'velocity':5,'notch':1,'organism':6,'stones':5,'far-flung':1,'open-minded.':1,'gold':1,'fins':1,'wayside':1,'relation':2,'heavens':18,'fine':7,'find':1,'impact':2,'giant':1,'copyright':6,'spineless':1,'nervous':1,'earth-moon':1,'experiment':3,'quadrupedal':1,'circle':1,'indifference':1,'cromagnards':1,'hip':1,'dominant':1,'gains':3,'permission':2,'adventurers':1,'sunny':1,'shore-pools':3,'germ-cells':6,'earth--as':1,'actions':1,'compass':1,'journey.':1,'eye-piece':3,'chick':1,'sleeve':1,'body.':1,'alteration':1,'underlying':1,'common':9,'liver-fluke':1,'river':6,'californian':1,'rhodesian':4,'bars':1,'estuaries':1,'intelligence':3,'touch':2,'individual':15,'migration':1,'long-fingered':1,'walking-stick':1,'close':1,'precursors':1,'arm':3,'spirited':1,'probable':1,'distinctive':1,'taming':1,'smallest':8,'various':13,'conditions':7,'aeons':1,'supposed':1,'beetling':3,'iron':5,'unconscious':2,'web':1,'sole':2,'jaws.':1,'craters':1,'spectroscopic':1,'eustachian':2,'incident':1,'invisible':7,'inertia':1,'colonisation':1,'prospects':1,'last':16,'reverse':1,'distinctively':1,'annual':1,'harpy':1,'sensitive':1,'connection':2,'amoeba':1,'picture.':1,'earth--an':1,'cloud-like':1,'whole':42,'experimental':1,'sloth':1,'point':6,'simple':7,'others':1,'proton':1,'newborn':2,'unicellular':1,'puzzle-boxes':1,'incandescent':1,'unsuccessful':1,'lamprey--a':1,'startling':1,'moon--the':1,'java':8,'miocene':3,'originators':2,'crocodiles':1,'damp':1,'vertebrate':1,'intricacies':1,'secret':6,'maintenance':1,'widening':1,'yolk-laden':1,'empty':4,'modern':25,'flight':1,'squirrel':2,'fire':2,'gas':2,'amphibians':4,'gap':1,'races':1,'formless':1,'indivisible':1,'plants':5,'top--the':1,'solid':5,'straight':1,'bill':1,'routes':1,'pace':1,'error':1,'robin':1,'underground':2,'fore-limb':3,'century':1,'moth':2,'obstacle':2,'cerebrum':1,'simian':3,'atom--the':1,'currents':1,'twofold':1,'forewing':1,'undersides':1,'beune':2,'shorter':1,'stimulated':1,'shad':1,'ray':3,'yucca':6,'composition':2,'higher':14,'unwary':1,'used':1,'optic':1,'u.s.':1,'moving':6,'user':1,'dark':9,'lower':16,'older':1,'spectrum.':1,'people.':1,'consistence':1,'obviously':1,'person':4,'edge':5,'meridian.':1,'scouring':1,'distances':4,'endeavour':1,'migratory':1,'matter.':1,'isolated':1,'shape':7,'atomic':2,'questions':1,'useful':2,'praying':2,'continent':2,'spinners':1,'profitable':3,'superficial':1,'conclusions':1,'scales':3,'humanoid':3,'source':8,'parents':3,'remaining':3,'silken':2,'overhanging':1,'forces':6,'big':11,'sensatory':1,'game':1,'necessary':1,'bit':1,'earth--making':2,'wings':11,'vapour':1,'ponds':1,'photosphere--the':1,'tail.':2,'neanderthaler':1,'shapes':1,'bootlace':1,'well-poised':1,'individuals':1,'popular':3,'disorder':1,'essential':9,'gibbon.':1,'methods':3,'course':24,'spring':3,'last.':1,'back':15,'yolk':1,'diamond.':1,'martian':1,'mighty':1,'sight':1,'steam-engine':1,'curious':1,'gradually':1,'scale':6,'microbes':1,'flux':1,'fifty-millionth':1,'bushy-tailed':1,'pounding':1,'comet':5,'egg-shell':2,'scaly':1,'life-history':3,'object':3,'universe.':3,'protrusible':1,'nasal':1,'agreement':1,'forming':1,'stem':1,'step':1,'more-pork':1,'race--there':1,'nerves':1,'tidal':1,'intense':1,'analysing':1,'web-wing':1,'tortuous':1,'ear-bones':1,'range':2,'gamma':1,'conquest':5,'appropriate':2,'chalk-forming':2,'deep-violet':1,'question':12,'gases':1,'frog':4,'mimicry':2,'mountains':4,'glamour':1,'moon--meteors':1,'atlantic':5,'legs.':1,'atom':27,'adults':1,'coldest':1,'crane':2,'dull':1,'drifters':1,'skull':5,'characteristic':2,'spectroscope':32,'sifting':4,'stalking':1,'planet':17,'exploration':1,'mature':1,'diameter.':1,'sea-urchin':1,'x-ray':1,'non-living':1,'aerial':1,'protrusive':1,'flow':5,'paving-stones':1,'influence':2,'entrance':3,'metals':1,'char':1,'problem.':1,'single':1,'diving':1,'kidney':1,'cotton':1,'rainbow':4,'intrepid':1,'puzzling':1,'prerogative':1,'uranium':2,'occasional':1,'reputation':1,'electrical':1,'amphibian':2,'milk-glands':1,'elements':4,'small-brained':1,'energetic':1,'beginnings':3,'crouching':1,'backbone':8,'problems':1,'lens':2,'meaning':9,'restoration':7,'fruit-fly':1,'fishes':8,'stoppages':1,'sides':4,'structure':8,'land':7,'age':8,'orbit':2,'unhatched':2,'big-brained':2,'once':3,'hampton':2,'saying':1,'results':9,'mantle':2,'aristocrat':1,'conservative':1,'disintegration':2,'magnifying':1,'depletion':1,'young':42,'arid':2,'cradle':5,'blaze':1,'masculine':2,'coco-palms':1,'details':2,'gravel':1,'little-brain':5,'stupefying':1,'breathing':2,'club-moss':1,'wave':1,'electron':19,'entire':7,'archaeopteryx':2,'stiff':1,'fur':1,'button':1,'anxious':1,'race':10,'verdict':1,'sedentary':3,'poles.':1,'blood-fluid':1,'elk':1,'smaller':5,'booty':1,'lightest':3,'procession':3,'euphrates':1,'rivers':9,'noise':1,'munitions':1,'sifting-out':1,'makers':1,'scientific':9,'south':10,'zest':1,'opaque':1,'waning':1,'paddle':1,'hereditary':1,'ape-man':1,'indian':3,'poles':4,'flowing':1,'bird':18,'body':50,'hypothesis':3,'degree':3,'leg':4,'kangaroo':1,'outlying':1,'youngest':2,'growing':1,'river.':1,'boot.':1,'separation':2,'frilled':1,'consideration':1,'physiology':1,'little-brained':1,'extreme':1,'stellar':4,'great':80,'northern':1,'wandering':1,'larger':5,'haunts':3,'resulting':1,'mussel':1,'guidance':1,'apple':1,'danger':1,'round-mouths':1,'wit':3,'motor':5,'oval':2,'precursor':1,'singing':1,'ape':2,'nest':13,'use':9,'fee':2,'adaptation':2,'stream':8,'remains':9,'cretaceous':3,'next':14,'few':1,'contractile':1,'crab':9,'vehicle':2,'eagles':1,'doubling':1,'simpler':2,'mammoth':2,'sort':1,'grandest':3,'clever':1,'inclined':4,'rarest':1,'bodily':2,'rabbit':1,'baby':1,'gambian':2,'harvest':2,'sea-floor':2,'animals':11,'embryos':5,'lapse':1,'recession':1,'obvious':1,'thin':1,'closing':3,'interlinked':1,'proof':1,'control':3,'weaker':1,'corpuscular':1,'process':10,'purposes':1,'pieces':1,'high':5,'electro-magnet':1,'non-radiant':1,'water.':1,'bones':2,'wonderful':7,'voice':8,'class.':1,'united':13,'varied':2,'defective':1,'shasta':1,'nearness':2,'arrangement':4,'cycads':1,'need':2,'seeds':4,'forest':7,'animal':43,'hormones':1,'mysteries':1,'intelligent':2,'stock':1,'cave-men':1,'maternal':1,'yolk-sac':1,'gill-clefts':1,'waters':7,'thunderstorm':2,'collection':2,'tack':1,'wrist':2,'trees':7,'multiplication':4,'venation':1,'famous':2,'snail':3,'light':39,'lines':6,'interrupted':1,'element':3,'chief':9,'okapi':2,'alloy':1,'locomotor':2,'mud-minnows':1,'immensity':1,'longest':7,'spider':8,'evolutionary':4,'thigh':1,'unpalatable':1,'minnow':1,'egg-laying':1,'nerve-cord':1,'earth':193,'triassic':6,'polished':1,'brittle':1,'bunch':1,'industries':1,'1':2,'outer':7,'exclusion':1,'positively-electrified':1,'coral-reefs':2,'hermit-crab':7,'meantime':1,'beginning--whatever':1,'permanent':1,'duckweed':1,'molten':1,'world.':2,'image':1,'originator':2,'epoch-making':1,'junction':1,'future.':1,'orthodox':1,'dam':1,'material':9,'innermost':1,'cock-paidle':1,'phagocytes':1,'snake':1,'hands':2,'front':6,'rotation':5,'cage':1,'day':15,'articles':1,'crumb-of-bread':1,'mastery':2,'establishment':9,'university':2,'sky.':1,'concave':1,'blazing':1,'vibrations':1,'trap':1,'truth':1,'pools':3,'cocoon':1,'paler':1,'traces':1,'erratic':1,'female':12,'tension':1,'scanty':3,'globe':6,'cultivated':1,'mollusc':1,'frequency':1,'sands':2,'irregularities':1,'special':1,'ebooks':1,'suctorial':2,'cerebral':1,'knickerbocker':1,'inch':1,'gossamer':1,'protoplasm':1,'cross-fertilisation':1,'oriental':1,'pendent':1,'adaptive':1,'cause':2,'red':9,'harvest-mouse':1,'thrush':6,'spot':2,'withering':1,'activity':3,'incalculable':1,'body-cavity':1,'usual':7,'qui':1,'primus':1,'sitting':1,'shortest':3,'young--a':1,'allies':1,'g':1,'route':1,'area':4,'times':2,'length':9,'keel':1,'modernising':1,'barriers':1,'empire.':1,'gamekeeper':1,'embryo':6,'finest':3,'baleen':1,'powerful':1,'scene':2,'bonnet':1,'improvements':1,'placental':1,'owner':4,'scent':1,'two.':1,'salient':1,'monkey':2,'system':4,'ripples':1,'nebular':8,'accretion':1,'caterpillars':2,'under-water':1,'nut':2,'inner':7,'shell':12,'x-rays':8,'explanation':4,'secretion':1,'natural':12,'waist':1,'plumage':1,'photograph':5,'glow-worm':1,'quietness':1,'isolation':1,'well-established':1,'discriminating':1,'heavens.':1,'dynamo':3,'stricter':1,'steep':2,'spurs':1,'ingenious':1,'imaginative':2,'sea':46,'lightly':1,'wood-cock':1,'partnership':1,'poisons':1,'variable':2,'mongolian':1,'throat':1,'apparently':2,'bark':1,'seed-box':2,'complete':3,'pollen-tubes':1,'eye-hole':1,'outward':1,'pectoral':1,'ungirt':1,'tree-frogs':1,'centre':8,'digestive':1,'eight':2,'roadside':1,'flat-fish':1,'emancipation':2,'cleverest':2,'food-canals':1,'profoundest':1,'ancestors':5,'so-called':6,'inexorable':1,'consequences':2,'deccan':1,'ovum-producer':1,'face':3,'animal--perhaps':1,'mechanical':1,'occasion':3,'fact':31,'impression':4,'atmosphere':9,'selection':1,'best-defined':1,'chances':1,'text':4,'woolly':1,'pinhead':1,'sabre-toothed':1,'seaweed':3,'rough':1,'darkest':1,'photograph.':1,'principal':1,'water-vapour':2,'knowledge':1,'jaw':4,'mid-europe':1,'jar':1,'surroundings':3,'insectivores':1,'molecules':17,'inherited':1,'b':1,'local':1,'hope':2,'photographs':2,'handle':2,'exceptional':1,'familiar':2,'background':3,'words':2,'striped':1,'emmer':1,'areas':1,'processes':1,'belts':1,'numerous':4,'cells':1,'taxes':1,'insectivorous':1,'coco-nut':1,'stuff':3,'inter-relation':1,'limpet':1,'making.':1,'embryonic':1,'generations':1,'view':4,'spotted':1,'interstices':1,'universe--the':2,'packet':1,'distantly':1,'intensity':3,'legacy':1,'cenozoic':3,'violet':1,'cleverer':2,'luminous':2,'carboniferous':13,'humblest':2,'nebulae':1,'wire':5,'pedigree':1,'jurassic':5,'pattern':1,'nebula':5,'genius':1,'state':5,'quickest':1,'carapace':2,'hebrides':1,'routine':3,'progress':3,'open-sea':2,'kidneys':3,'attention':3,'explosive':1,'ability':1,'rotating':1,'importance':4,'hurrying':1,'seaweeds':2,'kea':2,'efficiency':1,'wingless':1,'hoatzin':2,'acquisitions':2,'key':3,'eyes.':1,'precious':2,'swift':1,'problem':14,'sediments':1,'limits':5,'cranial':1,'minds':2,'pulp':1,'figures':1,'sexes':2,'plankton':1,'chest':2,'conflagration':1,'wall':2,'wavy-to':1,'mid-rib':2,'animalcule':1,'table':1,'zinc':4,'provinces':1,'palm-bones':1,'tremendous':1,'discrimination':2,'trademark':3,'dazzling':1,'immense':4,'reindeer':2,'squatting':1,'slowly':1,'curtain':1,'feather':1,'waste':1,'senses':3,'controlled':1,'received':1,'coherence':1,'sub-aquatic':1,'bulk':1,'environment.':1,'angler':3,'food-canal':5,'present':15,'associated':1,'crowds':1,'appearance':5,'will':1,'country':1,'wild':8,'discoveries':2,'supply':2,'comets':1,'spectrum--should':1,'food-debris':1,'streams':2,'chaotic':1,'blood':20,'bumbling':1,'surface':50,'raison':1,'bugbear':1,'greater':1,'watchful':1,'jaws':1,'pit':1,'carbohydrates':1,'richness':1,'radiation':2,'forceps':2,'fashioning':1,'romance':5,'strange':1,'exuberance':1,'flower':2,'geographical':1,'ante-natal':2,'well-grown':1,'firmament':1,'neolithic':3,'ball':1,'dusk':2,'appearances':2,'effect':6,'experimenter':1,'colouring':1,'student':2,'fierce':2,'frequently':1,'whale':3,'wonder-world':1,'colour':12,'banded':1,'larvae':1,'ear-passage':2,'english':2,'position':1,'wreckage':1,'drawing':1,'latest':2,'reefs':1,'enormously':4,'flesh':2,'wren':1,'faunal':1,'domestic':1,'flywheel':2,'satellites':1,'ermine':2,'stored':1,'distant':3,'inturned':1,'cuckoo-spit':2,'protecting':1,'glue':1,'wrens--to':1,'grappling':1,'rapid':2,'ovum':3,'work.':1,'antarctic':2,'bell':5,'sky':7,'deposits':2,'transparent':3,'reasons':3,'wet':2,'usage':1,'ought':1,'characteristically':1,'meteor':1,'fate':2,'disappearance':1,'biologists':1,'smithsonian':10,'originative':1,'prominent':2,'loss':1,'backboned':1,'like':11,'success':1,'safest':1,'parasite':2,'colonising':1,'leaves':2,'works':2,'soft':4,'radiant':1,'heel':2,'wonders':3,'glare':2,'ages--evolution':1,'thymus':1,'phenomena':4,'mosquitoes':1,'eventfulness':1,'growth':3,'warmer':1,'past.':1,'proper':2,'trammels':1,'employment':1,'mother':12,'recognition':1,'possibilities':1,'leaf':6,'broad':4,'separate':1,'ether':27,'tadpole':3,'magnitude':2,'board.':1,'fruition':1,'biology':1,'scapula':1,'butterfish':1,'decline':1,'tenability':1,'paper':4,'pressure':3,'host':5,'instinct':2,'germination':1,'brain-box':1,'dredge':1,'transformations':1,'actual':8,'extension':2,'electron--the':1,'universe':37,'certainty':1,'preen':1,'andes':1,'carrier':1,'dominion':1,'rock-record':1,'flattened':1,'tongue':3,'contending':1,'letters':1,'fresh':2,'primal':1,'chemists':1,'wearisome':1,'promise':1,'erect':3,'times.':1,'registration':1,'protozoa':3,'swimmers':1,'mere':4,'endeavours':1,'parentage':1,'sticklebacks':2,'additional':2,'zoologist':1,'slow-worm':1,'museum':2,'larval':3,'spiral':3,'spots':4,'continental':1,'much':4,'invisibility':1,'cell.':1,'biggest':2,'maze':1,'breeding':4,'mouth.':3,'function':1,'funnel':1,'north':11,'gait':1,'repeated':1,'construction':1,'highest':8,'bug':1,'bud':1,'eel':2,'tactics':2,'cohesion':1,'places':2,'volplaning':1,'gravitational':3,'official':2,'smooth':1,'triumphant':1,'poker.':1,'record':1,'projecting':1,'lynx':2,'static':1,'distribution':1,'piece':4,'stirring':1,'supreme':1,'mesozoic':7,'universal':5,'penny':2,'whelk':2,'persistent':1,'water-vole':1,'ten-millionth':1,'elaborate':1,'tide.':1,'education':1,'domesticated':1,'atom--that':1,'mutual':2,'variety':4,'deadly':1,'fore-arm':3,'forests':2,'other':65,'boom':1,'branch':3,'mass':8,'wing':5,'chemist':1,'conclusion':6,'sunshine':2,'kinds':1,'tides':17,'variation':1,'enlargement':2,'astronomy':1,'exposure':1,'ranks':2,'space':1,'pigment-cells':1,'rule':4,'forest.':1,'eighties.':1,'inset':1,'half-second':1,'meteoritic':1,'sun--the':2},'marsupials':{'insectivorous':1,'on':1,'where':1},'musical':{'genius':2},'kinship':{'would':1},'deep-red':{'light':1,'waves':1},'unified':{'by':1},'macaque':{'second':1,'genus':1},'indigo':{'and':1,'to':1,'salicylic':1,'for':1,'in':1},'kale':{'and':1},'quoted':{'tells':1},'photo':{'press':1,':':164,'press.':1},'newton':{'because':1,'for':4,'except':1,'s':1,'taught':1,'worked':1,'was':1},'wasps':{'exhibit':1,';':1,'are':1,'.':1},'cap.':{'illustration':1},'thanks':{'to':2},'victim':{'to':1,'unawares.':1,'.':1},'upturned':{'side':1},'triticum':{'hermonis':1},'electronically':{'the':1,'in':1},'thyroid':{'and':1,'the':1,'.':1},'fearful':{'crime':1},'hills':{'and':2,'the':1},'evidences':{'perhaps':1,'of':5},'passive':{'the':1,'drifters':1,'in':1},'alchemy':{'but':1},'belongs':{'to':1,'was':1,'illustrates':1},'transformed':{'for':1,'descendants':1,'into':2,'directly':1,'guise':1,'by':1,'descendant':1},'board':{'a':1,'nail':1,'ship':1,'with':1,'in':1},'marginal':{'tentacles':1},'industrious':{'but':1},'openings':{'from':1},'photographed':{'from':1,'in':2},'boxed':{'in':1},'them--as':{'a':1},'required.':{'it':1},'caps':{'may':1,'on':1},'it--for':{'several':1},'fusion':{'of':3},'god.':{'nevertheless':1},'argonauta':{'an':2},'cape':{'colony':1},'rough-and-tumble':{'conditions':2},'retreat':{'but':1,'.':1},'hairless':{'whale':1},'utilisation':{'of':2,'was':1},'insurgent':{'nature':1},'cooler':{'vapours--the':1,'than':1,'they':1},'lapsed':{'intelligence':1},'sand-hoppers':{'and':1,'when':1},'evidence.':{'experiments':1},'homing':{'pigeons':1,'pigeon':2},'night':{'and':5,'means':1,'of':1,'is':2,'between':1,'when':2,'algol':1,'.':3,'to':2,'year':1,'the':1,'with':1,'or':1},'security':{'not':1,'that':1},'amoebae':{'and':2,'in':1},'cooled':{'down':2,'and':1,'so':1,'at':1},'dentition':{'but':2},'webb':{'celestial':1},'portuguese':{'man-of-war':2,'men-of-war':1},'bricks.':{'in':1},'lashes':{'or':1},'sends':{'to':1,'on':1},'3030':{'0':1},'1909':{'showing':1,'23':1},'fully-formed':{'creature.':1,'eel.':1,'young':1},'odours':{'a':1},'minnow--the':{'mind':1},'lashed':{'cells':1},'waves--which':{'are':1},'vertebrae':{'forming':1,'of':1,'as':1,'which':1,'.':2},'rill':{'of':1},'orchid':{'perched':1},'signifying':{'particular':1},'asking':{'the':1,'an':1},'lassoes':{'on':1},'month.':{'surprising':1},'colour-cells':{'chromatophores':1,'in':1},'beating':{'seconds':1,'heart':1,'of':1},'columbus':{'voyages':1,'.':1},'states.':{'1.e':1},'view':{'and':2,'that':6,'of':17,'is':3,'primary':1,'.':1,'will':1,'their':1,'maintained':1,'does':1,'which':1,'instinctive':1},'confer':{'upon':1},'illustration':{'24':1,'and':2,'144':2,':':233,'20':1,'that':1,'may':1,'158':1,'showing':2,'indicates':1,'74':1,'168':1,'of':10,'252':1,'280':1,'92':1,'172':1,'is':3,'shows':3},'constructive':{'chemical':1,'possibilities':1},'--these':{'also':1},'six.':{'beyond':1,'it':1},'peer':{'of':1},'taker':{'of':1},'post':{'shows':1},'properties':{'and':1,'of':1,'utterly':1,'attributed':1},'takes':{'stones':1,'on':1,'in':1,'up':1,'approximately':2,'air':1,'to':4,'place':1,'a':3,'time':2,'fresh':1,'the':1,'place.':1,'its':1,'at':1},'chaff':{'separated':1},'theirs':{'certainly':1},'coral':{'and':1,'islands':2,'built':2,'have':1},'months':{'and':1,'within':1,'old':2,'of':3,'after':1,'in':2,'from':1,'the':1,'before':1,'more':1},'constituting':{'that':1},'gentler':{'hills':1},'self-preserving':{'and':1},'horizon':{'the':1},'octopus':{'attacking':2},'serviss':{'curiosities':1},'considerations':{'there':1},'dilemma':{'of':1},'scantier':{'light':1},'pays':{'an':1},'crittur':{'on':1},'float':{'idly':1,'apart':1},'bound':{'to':3,'into':1,'up':1,'by':3},'gearing':{'it':1},'loin':{'and':1},'capped':{'with':1},'magnified.':{'is':1,'the':2,'illustration':1},'formidable':{'forelegs':1,'teeth.':1},'palaeozoic':{'the':1,'nine':1,'mesozoic':1,'era':4},'tint.':{'thus':1},'strangely':{'limited':1,'regular':1},'fight':{'but':1},'conservation':{'of':1},'way':{'and':6,'rooks':1,'specially':1,'remarkable':1,'acquired':1,'into':1,'we':5,'see':1,'through':2,'are':1,'in':10,'offshore.':1,'herring-gulls':1,'from':3,'for':2,'how':1,'there':1,'.':14,'note':1,'to':7,'which':4,'14':1,'out':1,'was':1,'over':1,'gave':1,'round.':1,'begins':1,'comparable':1,'arises':1,'aspects':2,'extend':1,'that':3,'ancestral.':1,'however':1,'but':1,'it':1,'never':1,'along':1,'with':4,'by':1,'he':1,'a':1,'like':1,'of':24,'as':2,'so':1,'back':1,'each':1,'the':7},'wax':{'from':1},'editions':{'will':2,'all':1,'means':1},'dorsal':{'vertebrae':2},'was':{'all':1,'just':2,'less':2,'caused':1,'able':1,'satisfied':1,'discovered':8,'astonished':2,'taken--the':1,'stored':1,'through':1,'still':2,'nearer':1,'certainly':1,'vigorously':1,'also':3,'thinking':1,'much':1,'regarded':1,'exercising':1,'actually':1,'to':3,'finally':1,'spread':1,'bridged':1,'hidden':1,'foster-parent':1,'sent':1,'brown':1,'watching':1,'prevented':2,'replaced':1,'possible':1,'possibly':1,'five':1,'altogether':1,'not':16,'during':2,'associated':2,'now':2,'continued':2,'killed':1,'forty-five':1,'wont':1,'rotating':2,'like':2,'shaped':2,'heaved':1,'joined':1,'twice':1,'found':6,'entirely':1,'spotted':1,'the':49,'set':2,'often':1,'hinted':1,'achieved':1,'absolutely':2,'hard':1,'some':1,'somehow':1,'dead':1,'observed':1,'born':1,'semi-tropical':1,'taught':1,'enhanced':1,'further':1,'extended':1,'perfected':1,'out':1,'established':1,'ultimately':1,'said':1,'imported':1,'placed':2,'unable':1,'probably':8,'neither':1,'ever':1,'filled':1,'freed':1,'condensed':1,'felt':2,'never':2,'quite':1,'by':3,'following':1,'protection':1,'practically':1,'sixty':1,'drawn':1,'joule':1,'promptly':1,'beginning':1,'implicit':1,'suggested':1,'on':1,'about':2,'grist':1,'created':1,'of':1,'barely':1,'later':1,'accomplished':1,'conveyed':1,'unknown':1,'asked':1,'first':1,'composed':1,'raised':1,'already':1,'followed':1,'merely':1,'marked':2,'one':5,'brought':2,'soaring':1,'because':1,'done':1,'cultivated':1,'elementary':1,'proved':2,'noticed':3,'repopulation':1,'doubtless':2,'once':5,'given':3,'invented':2,'from':1,'twenty':1,'due':2,'long':1,'quickly':1,'going':1,'punished':1,'too':4,'taken':2,'formed':1,'laboriously':1,'until':1,'opposed':1,'only':3,'that':4,'happily':1,'mind':2,'offered':1,'continuous':1,'but':2,'direct':1,'repeated':1,'part':2,'known':3,'trying':1,'true':1,'travelling':1,'he':2,'applied':2,'made':4,'this':1,'crossed':1,'originally':3,'immaterial':1,'premature':1,'sometimes':1,'cast':1,'near':1,'accustomed':1,'believed':1,'making':1,'called':2,'at':3,'150':1,'discovered.':1,'constant':1,'then':2,'almost':1,'thus':1,'it':2,'slowing':1,'an':5,'something':1,'in':9,'distinguishable':1,'any':3,'constructed':1,'effected':1,'dimly':1,'no':7,'perhaps':2,'when':1,'isolated':1,'evidently':1,'shorter':1,'.':2,'ordinary':1,'first--began':1,'fairly':1,'used':1,'tried':1,'emotionally':1,'living':1,'conceived':1,'upon':1,'most':2,'moving':1,'destined':2,'propagated':1,'aware':1,'subsequently':1,'a':40,'off':1,'happening':1,'largely':1,'broadened':1,'stronger':1,'or':1,'exceedingly':1,'implied':1,'so':4,'persistently':2,'very':4,'underrated':1,'swimming':1,'sounded':1,'refused':1,'repeopled':1},'war':{'would':1,'mr':1,'museum.':4,'note':1,'to':1,'in':1,'was':1,'254':1},'lowest':{'mammals':1,'pleistocene':1,'there':1,'.':1,'tide':1,'human':1,'arm':1,'first':1},'gaseous':{'state':1,'nebula':3,'nebulae':2,'ring':1,'.':1},'wheatfields':{'were':1},'afresh':{'and':1,'to':1},'fish-eater':{';':1},'becoming':{'longer.':1,'a':2,'longer':1,'suddenly':1,'of':1,'stereotyped':1,'.':2,'almost':1,'complicated':1,'either':1,'in':2,'linking':1,'adapted':1,'more':1},'converse':{'process--a':1},'peninsula':{'of':1,'it':1},'mysterious':{'phases':1,'rays':3,'force':1,'sailing':1,'universe':1,'as':1,'manifestations':2,'forces':1,'cold':1},'quiet-flowing':{'stretches':1},'needles':{'and':1,';':1},'same.':{'a':1},'astonished':{'to':2,'euclid':1},'true':{'flier':2,'is':1,'sense':2,'multicellular':1,'as':2,'in':4,'even':1,'to':1,'ventral':2,'nature':2,'when':1,'.':4,'also':1,'water-spider':1,'circle':1,'bird.':1,'we':1,'flight':1,'that':6,'men':1,'but':1,'fishes':1,'lids':1,'of':6,'mimicry.':1,'the':1,'or':1},'absent':{'of':1,'from':1},'edition.':{'most':1},'reproductive':{'and':1,'cells':1,'organs':3},'ancestral':{'forms':2,'home':1,'stocks':1},'maximum':{'abundance':1,'as':1,'sparseness':1,'in':1,'disclaimer':1},'arc-lamp':{'is':1},'generosity':{'which':1},'emotional':{'art':1,'halo':1},'emit':{'light':2,'but':1},'hotter':{'and':1,'than':1,'.':2,'at':1,'the':1,'until':1},'frederick':{'matter':1,'soddy':1},'muscular':{'appendages':1,'arrangements':1,'system':1},'evidence':{'for':2,'e.g':1,'of':12,'is':1,'there':1,'1':1,'to':1,'that':3,'are':1,'in':2,'suggesting':1,'the':1,';':1},'guessed':{'at':1},'juice.':{'illustration':1},'promised':{'land':2},'prayer':{';':1},'20':{'of':1,'000':1,'reproduced':1,'ounces':1},'life--story':{'of':1},'archive':{'foundation':12,'foundation.':1},'physical':{'and':2,'strength':1,'laboratory.':2,'constitution':1,'basis':1,'universe':1,'environment':1,'renaissance':1,'peculiarities':1,'medium':2,'fact':1,'type':1,'laboratory':1,'conditions':1,'change':1},'curiosities':{'of':1},'dimly':{'guessed':1,'unveiled':1,'aware':1},'dying':{'a':1,'--the':1,'suns':2,'of':1,'sec':1,'sun':1},'40-inch':{'refracting':2,'refractor':2},'reality':{'even':1,'of':3,'one':1,'by':1,'.':3},'pickering':{'thinks':1,'another':1},'holding':{'a':2,'firm':1,'them':2,'her':1,'on':1,'up':1,'fast':3,'their':1},'test':{'the':1,'variations':1,'what':1},'shrink':{'amazingly':1,'into':1,'by':1,'in':1},'robber-crab':{'birgus':2,'as':1,'with':1,'which':2,'for':1},'ordovician':{'the':1,'period':3},'brothers':{'may':1,'.':1},'welcome':{'realisation':1},'convincing':{'impression':1,'enough':1,'quality':1,'though':1},'anatomist':{'sir':1},'walton':{'the':1},'scores':{'of':3},'dissipation':{'of':1},'ours.':{'sec':1},'promise.':{'each':1},'kelts':{'after':1},'interval':{'of':1},'together':{'and':5,'as':5,'result':1,'in':4,'again':2,'by':3,'make':1,'.':3,'to':2,'you':1,'ever':1,'do':1,'again.':1,'but':1,'they':1,'with':2,';':1,'a':3,'of':1,'loosely':1,'so':3,'the':1},'brocklehurst.':{'a':2,'the':2},'beds':{'of':5,'which':1,'were':1},'reception':{'that':1},'sporozoa':{'like':1},'marinus':{'120':1,'which':1},'tigris':{'and':1},'concept':{'and':1,'of':1,'man':1},'impulse':{'to':2,'or':2},'phosphorescence':{'.':1},'aptitudes--power':{'of':1},'dance':{'but':1},'fulcrum':{'for':1},'brownian':{'movement':5},'contingencies--the':{'risk':1},'dalton':{'who':1,'.':1},'tenable':{'now.':1},'layers':{'that':2,'of':4,'into':1,'envelop':1,'.':1,'below':1},'certainly':{'they':1,'scanty':1,'serve':1,'due':1,'been':1,'one':2,'deserves':1,'is--but':1,'not':1,'white':1,'an':1,'was':1,'tells':1},'zone':{'on':1,'there':1,'was':1,'between':1},'shrinkage':{'of':2,'.':1},'hump':{'would':1},'flash':{'from':1,'across':1,'lasts':1},'absorbing':{'dry':1,'matter':1,'some':1},'fog':{'as':1},'permanently':{'like':1},'rhythm':{'which':1},'division':{'of':7,'or':2},'protective':{'resemblance':9,'significance--called':1,'capacity':1,'coloration':6},'sockets':{'along':1},'diminish':{'to':1},'particles.':{'the':1,'they':1},'liability':{'to':2,'costs':1,'breach':1},'aesop':{'prawn':3},'corals.':{'the':1},'mendelism':{'and':1},'trouble':{'than':1},'maternal':{'chromosomes.':1,'call':1,'virtue':1,'care.':1,'origin.':1,'affection':1,'care':1},'brows':{'and':1},'feeble':{'and':1,'current':1,'life':1},'rotating':{'on':1,'about':1,'quicker':1,'faster':2,'very':1,'flywheel':2,'disc':4,'earth':1,'immensely':1,'with':1,'round':3},'perceived':{'the':1,'.':2,'what':1,'either':1},'respiratory':{'system':1,'surface':1},'scandinavia':{'showing':2,'138':1,'141':1},'presented':{'alternately':1,'them':1,'simultaneously':1},'altering':{'the':1},'turns':{'on':2,'always':1,'upon':1,'to':1,'the':1,'round':1},'gun':{'that':1},'gum':{'is':1},'ox':{'and':1},'p':{'.':10},'means--resides':{'in':1},'revolutionised':{'physics':1},'gut':{'is':1,'which':1},'sloths':{'and':1},'woven':{'somehow':1},'upper':{'side.':1,'atmosphere':1,'eyelid':1,'fish':1,'pliocene':1,'reaches':3,'corner':1,'arm':1,'or':2,'pleistocene':2,'cretaceous':1,'regions':1,'parts':2,'lip':3,';':1,'hand':1,'diagram':1,'part':2,'surface':4,'cambrian':1,'photograph':1,'air':1,'side':1},'revolution':{'of':1,'diameter':1,'in':3},'full-grown':{'fish':1,'salmon':1,'shore-crab':1,'individual':1,'the':1,'creature':1},'penetrates':{'the':1},'spoonbill':{'s':2},'d':{'etre':1,'.':1},'niggardly':{'for':1},'affiliation':{'to':1,'with':1},'semi-tropical':{'for':1},'cost':{'and':2,'fee':1,'when':1,'but':1},'change-provoking':{'cross-fertilisation.':1},'helpless':{'that':1},'penetrated':{'further':1,'into':3},'cargo':{'that':1},'appear':{'and':1,'a':1,'it':1,'.':1,'to':9,'as':1,'much':1,'denser':1,'prominently':1,'white':1},'assistance':{'they':1},'burrowers':{'and':1,'like':1},'uniform':{'and':2,'set':1,'temperature':9,'teeth':1},'wave-motion':{'in':1},'eight-armed':{'cuttlefish':2},'illustrations':{'facing':1,'of':2,'all':1,'are':1,'among':1},'shared':{'the':1,'with':1,'equally':1,'by':1},'flame.':{'perhaps':1},'sea-cucumbers':{'lamp-shells':1},'institutions--all':{'must':1},'alertness':{'and':1,'of':1,'along':1,'is':1},'safety.':{'we':1},'supporting':{'and':1,'axis':3},'anvil.':{'as':1},'whiteness':{'may':1,'makes':1,'.':1},'disclaim':{'all':1},'suckers':{'which':1},'sieve':{'incalculable':1},'teacher':{'and':1,'always':1,'the':1,'between':1},'change':{'whose':1,'by':1,'abundant':1,'from':1,'of':9,'into':1,'in':6,'but':1,'.':2,'produced':1,'till':1,'every':1,'they':1,'reorganisation':1,'need':1,'the':1,':':1,'its':2,';':2,'is':1},'sending':{'a':1,'out':1},'illustration.':{'such':1},'flames':{'are':1,'rose':1,'from':1,'peeping':1,'of':1},'impatiently':{'postulated':1},'precursor':{'of':1},'twenty-seven':{'of':1},'vibrating':{'or':1},'trial':{'and':5,'of':1,'the':1,'was':1},'pictorial':{'diagram':1,'representation':3},'usually':{'about':1,'formed':1,'in':3,'longer':1,'produces':1,'very':1,'regarded':2,'work':1,'credited':1,'back':1,'rank':1,'less':1,'multiplies':1,'coming':1,'got':1,'given':1,'disappears':1,'creep':1,'mean':1},'locomotion':{'and':1,'becomes':1,'it':1,'192':1,'which':2,'the':1},'432':{'times':1},'inference':{'we':1,'when':1,'but':1,'.':1,'reason':1,'in':1,'not':1,'or':1},'saunders':{'with':1,'hit':1,'so':1},'stimulus.':{'2':1},'keenness':{'of':1},'sign':{'of':2},'marked':{'a':1,'on':1,'superficial':1,'off':2,'and':1,'d.p.':1,'h':1,'differences':1,'up':1,'vm':1,'by':8,'rotting':1,'fusion':1,'5':1,'in':3,'the':2,'changes':1,'than':1,'as':1},'outfly':{'a':1},'italians':{'punics':1},'seashore':{'and':2,'animals':1,'into':1,'.':1,'sponge':1,'to':1,'through':1,'struggle':1,'in':1,'birds':1},'comets--millions':{'of':1},'capacious':{'and':1,'mouth':1},'illumination':{'is':1,'or':1,'would':1},'rarely':{'seen':1,'over':1,'hinted':1,'dying':1},'pressure--2-1':{'2':1},'stingy':{'for':1},'cuttlefishes':{'which':1,'are':1,'have':1,'in':1,'the':1,'where':1,'by':1},'terminal':{'chamber':1},'breed.':{'there':1},'stereoscopic':{'vision':1},'primrose':{'among':1},'prove':{'to':1,'the':3,'his':1,'that':2},'time-table':{'the':1},'territories':{'of':1},'live':{'a':1,'on':4,'equally':1,'for':1,'independent':1,'far':1,'is':1,'there':2,'among':1,'much':1,'in':5,'the':1,'comfortably':1},'spontaneity':{'on':1},'wonderfully':{'supplemented':1,'rapid':1,'complete':1,'energetic':1},'bluffing':{'on':1},'1.e.8.':{'1.b':1},'angels':{'crowned':1},'entrance':{'and':1,'to':2},'water-ouzel':{'or':1},'cluck':{'when':1},'regrowing':{'them':2},'envelope':{'immediately':1,'or':1,'stops':1,'of':1},'planarian':{'worms':1},'clue':{'to':2},'grilse':{'and':1,'stage':1},'envelops':{'our':1,'the':1},'clumps':{'of':1},'duck-ponds':{'or':1},'migrants':{'from':1},'haddington':{'of':1},'nature--on':{'which':1},'theory--spiral':{'nebulae--the':1},'wolf-dog':{'226':1,'an':1},'cat':{'a':1,'could':1,'has':1,'or':2},'hardest':{'solid':1,'steel':1},'gathers':{'on':1,'more':1},'can':{'control':1,'now':2,'think':1,'divide':1,'be':63,'almost':1,'move':1,'notice':1,'sting':2,'replenish':1,'outfly':1,'say':5,'harness':1,'exist':1,'expect':1,'have':1,'re-utilise':1,'go':1,'dissolve':1,'to-day':1,'discern':1,'glimpse':1,'detect':2,'from':1,'calculate':1,'no':1,'always':1,'transfer':1,'make':4,'offer':1,'help':1,'only':5,'continually':1,'also':2,'live':1,'call':2,'therefore':1,'transmit':1,'survive':5,'hardly':4,'tell':3,'hope':1,'take':2,'breathe':1,'do':4,'we':1,'trace':1,'get':2,'afford':1,'never':1,'use':1,'discover':1,'observe':1,'unfurl':1,'recognise':1,'imagine':4,'distinguish':1,'affect':1,'copy':1,'fly':1,'reveal':1,'extend':1,'in':2,'apprehend.':1,'receive':1,'ever':1,'conceive':1,'work':1,'well':1,'see':4,'retain':1,'grind':1,'credit':1,'remain':1,'succeed':1,'form':1,'confidently':1,'easily':4,'become':1,'weigh':1,'the':1,'assign':1,'travel':1},'thirty-five':{'seconds':1,'minutes':1},'metamorphosis':{'the':1,'.':1},'stimulating':{'and':1,'conditions':1,'change':1},'http:':{'www.pgdp.net':2,'www.pglaf.org.':1,'www.gutenberg.org':2,'gutenberg.org':1,'pglaf.org':4},'heart':{'a':1,'for':1,'of':5,'there':1,'it':1,'.':1,'true':1,'or':1},'pauses':{'in':1},'expanding':{'during':1,'fan':1},'apartness':{'there':1,'from':1},'heard':{'not':1,'of':2,'the':1,'felt':1,'than':1},'chin':{'and':1,'process':1,'.':3},'clothing':{'and':1,'with':1},'occur':{'and':2,'only':1,'also':1,'near':1,'in':4,':':1},'candle;':{'the':1},'infantile':{'call':1,'mortality':3},'dispositions':{'of':1},'discussion':{'of':1,'there':1},'starch':{'and':1,'molecule':1,'.':1},'sandstone':{'was':1,'or':1},'condensation.':{'spiral':1},'offspring':{'and':1,'for':1,'of':1,'is':2,'.':2,'mate':1,'at':1},'nowhere':{'do':1},'despair':{'returned':1},'candle.':{'it':1},'actual':{'photographs':1,'distance':1,'solution...':1,'constitution':1,'temperature':2,'centre':1,'photograph':1,'entity':1,'direct':1,'observations':1,'historical':1,'mechanical':1,'precipitate':1,'dimensions':1},'future.':{'4':1},'familiar':{'case':1,'hum':1,'is':1,'in':2,'type':1,'with':3,'example':1,'fact':1},'over-population':{'and':1,'in':1},'brine-shrimp':{'artemia':1},'dominance':{'of':1},'economy':{'of':2},'gonads':{'only':1},'product':{'which':1},'burrowing':{'mammals':1,'reptiles':1,'parrot':1,'amphibians':1,'birds':1},'southern':{'europe':1,'india':1,'asia':1,'hemisphere':1,'representative':1,'sea':2},'unobtrusive':{'appearance':1},'disgusted':{'next':1},'significance.':{'it':1,'they':1},'produce':{'a':3,'what':1,'very':1,'light':1,'tides':1,'seeds':1,'in':1,'our':1,'the':2,'helium':1},'flourish':{'sometimes':1,'alongside':1},'mentality':{'and':1,'cannot':1,'.':1},'lifting':{'scrap':1,'handling':1},'upbuilding':{'constructive':1},'visitors':{'and':2,'.':1,'are':1,'have':1,'threw':1},'remember':{'how':1,'the':3,'that':3,'sally':1,'their':1},'whenever':{'the':2,'there':1,'any':1},'corona':{'of':2,'is':1,'stretching':1,'which':1,'that':1},'rather':{'a':1,'we':1,'ferocious.':1,'grouselike':1,'longer':1,'that':1,'humdrum':1,'more':2,'than':9,'to':1,'far-fetched':1,'excitedly':1,'in':4,'paltry':1,'eventful':1,'nondescript':1,'simpler':1,'with':1,'the':1,'trout-like':1,'like':1},'conquests':{'of':1},'punting':{'when':1,'sculling':1},'typical':{'plants':1,'spectra':1,'craters':1,'districts':1,'expression':1,'assemblage':1},'no.':{'bred':1},'serving':{'as':1,'the':1},'iii.':{'trial-and-error':1},'indeed':{'what':2,'climate':1,'made':1,'beyond':1,'that':1,'many':1,'no':1,'we':1,'unsurpassable':1,'will':1,'.':1,'safety':1,'they':1,'always':1,'our':1,'the':1,'believe':1,'if':1},'beak':{'and':1,'is':1,'.':1,'under':1},'well-illumined':{'seaweed-growing':1},'playful':{'such':1,'creature':1},'brain':{'and':9,'weighs':1,'is':7,'as':2,'are':1,'should':1,'from':2,'.':2,'does':3,'which':4,'instead':1,';':2,'has':1,'was':2,'shows':1,'development':2,'than':1,'receiving':1,'of':3,'could':1,'inferred':1,'cast':1},'stile':{'which':1},'hairs--an':{'alga':1},'nitrogen':{'of':1},'cold':{'and':1,'on':2,'poker':1,'outer':1,'for':2,'light':1,'.':1,'water':1,'to':1,'weather':1,'iron':2,'of':3,'dark':1,'absorbs':1,'luminosity':1,'yet':1,'came':1},'still':{'and':1,'atmosphere':1,'smaller':3,'being':2,'progressing.':1,'some':1,'it':1,'probing':1,'say':1,'exist':1,'farther':1,'in':3,'further':3,'nearer':1,'bears':2,'unknown':1,'.':3,'shorter':3,'to':1,'going':1,'goes':1,'persist':1,'molten':1,'was':1,'unstereotyped':1,'more':3,'we':1,'himself':1,'very':3,'continuing':1,'plays--the':1,'but':1,'particular':1,'not':1,'with':1,'the':2,'possess':1,'a':1,'made':1,'uncertain':1,'flourished':1,'room':1,'at':1,'tower':1,'feeling':1,'soft':1,'are':1},'birds':{'and':23,'feed':1,'because':1,'often':1,'show':1,'being':1,'is':3,'191':1,'it':1,'as':2,'are':4,'sight':1,'in':1,'carry':1,'seem':1,'its':1,'little':1,'squat':1,'for':1,'how':1,'make':2,'there':1,'.':2,'to':1,'find':1,';':1,'was':1,'evolved':2,'reaching':1,'may':1,'pick':1,'illustration':1,'like':7,'bolt':1,'such':1,'than':1,'must':1,'a':1,'that':4,'of':2,'turn':1,'have':2,'learn':1,'the':1,'where':1,'came':1},'statuettes':{'representing':1},'nucleus.':{'the':1,'illustration':1},'culmination':{'of':1},'tending':{'on':1,'toward':1,'to':3},'curly':{'greens':1},'rhizopods':{'such':1,'with':1},'willow':{'fertile':1,'grouse':2},'forms':{'and':6,'e.g.':1,'almost':1,'over':1,'it':2,'are':1,'arise':1,'kinetic':1,'again':1,'from':2,'.':2,'which':1,'tends':1,';':1,'we':1,'may':1,'daughter-buds':1,'a':7,'like':2,'of':22,'possessed':1,'so':1,'the':1,'or':1},'immortality':{'of':1},'suffocate':{'.':1},'spacious':{'bountiful':1,'cranial':1},'physics--research':{'and':1},'bird.':{'experiments':1,'illustration':2},'pruned':{'off':1},'speeding':{'toward':1},'inter-relations':{'such':1,'.':2,'where':1,'between':1,'simpler':1},'introduce':{'domesticated':1,'us':1,'an':1},'archaeozoic':{'and':1,'ages':1},'tails':{'of':1,'can':1,'.':1},'half':{'a':7,'old':1,'that':1,'of':3,'days':1,'an':3,'hours':2,'to':1,'tons':1,'miles':1,'mile':1,'the':4,'years':1,'out':1},'not':{'represent':1,'all':4,'clog':1,'help':1,'limited':2,'being':1,'indeed':2,'armour':1,'fall':1,'held':1,'through':1,'go':2,'follow':3,'yet':5,'also':1,'convinced':1,'less':5,'young':1,'mathematically':1,'to':11,'only':16,'stand':1,'touched':1,'easy':1,'attained':1,'include':1,'then':2,'unfitting':1,'closed':1,'knock':1,'very':9,'void':1,'material':2,'stop':1,'possible':2,'possibly':1,'open.':1,'know':13,'altogether':1,'accumulate':1,'affect':2,'one':2,'discuss':1,'easily':3,'practise':1,'necessary':1,'like':1,'tear':1,'fully':2,'try':1,'pursue':1,'feel':1,'stopped':1,'always':3,'small':1,'become':1,'entirely':1,'fixed':1,'mean':1,'exceed':1,'related':1,'certain':1,'know.':1,'likely':1,'sure':1,'exist.':2,'functioning':1,'packed':1,'even':3,'appear':2,'for':2,'uniform':1,'liberated':1,'radiated':1,'suggesting':1,'got':2,'be':20,'we':1,'disputed':1,'intelligent.':1,'cellulose':1,'however':1,'hundreds':1,'met':1,'necessarily':3,'attend':1,'backed':1,'quite':4,'come':1,'by':5,'momentous':1,'wait':1,'suggested':1,'on':2,'essentially':1,'indivisible':2,'many':1,'emit':1,'amount':1,'sweat':1,'permit':2,'undergo':1,'think':1,'burning':1,'gone':1,'previously':1,'requiring':1,'merely':2,'bound':1,'highly':1,'visible':1,'been':3,'carry':1,'impossible':1,'want.':1,'readily':3,'given':1,'wanted':1,'from':1,'droop':1,'prove':2,'assumed':1,'there':1,'self-luminous':1,'citing':1,'long':1,'throw':1,'cooling':1,'change':1,'strong':1,'suit':1,'show':2,'survive':1,'themselves':1,'molecular':1,'depreciate':1,'too':1,'a':16,'solicit':2,'received':1,'with':2,'ascribe':1,'but':1,'taken':1,'understand':1,'dwell':1,'catch':1,'copy':1,'true':1,'save':1,'unlike':1,'solid':1,'require':3,'imply':1,'will':1,'greatly':1,'how':1,'of':2,'more':6,'agree':3,'say':1,'and':1,'claim':1,'troublesome':1,'fit.':1,'give':1,'judge':1,'salmo':1,'arise':1,'share':1,'it':1,'an':3,'involve':1,'as':4,'exist':1,'at':2,'have':5,'in':5,'seen':1,'seem':4,'occupied':1,'any':2,'instinctively':1,'terrestrial':1,'conspicuous':1,'want':1,'perhaps':1,'sprawl.':1,'travel':1,'get':1,'able':1,'till':2,'interested':1,'take':2,'cling':1,'contain':1,'wanting':1,'shirk':1,'difficult':1,'used':1,'intended':1,'see':1,'dive':1,'after':1,'charge':2,'produce':2,'moving':1,'uncommon':1,'recognise':1,'revolve':1,'unlink':1,'nipped':1,'known':2,'pure-bred':1,'lead':3,'surprising':3,'clear':1,'lose':1,'flow':1,'asked':1,'without':1,'so':10,'allow':1,'far':1,'hear':1,'the':16,'make':3,'talk':1,'nearly':3},'ritchie':{'a':1,'s':1,'well':1},'courtship':{'or':1},'now':{'and':4,'studying.':1,'who':1,'exists':1,'be':2,'is':4,'successfully':1,'it':6,'an':2,'observed':1,'known':4,'as':1,'at':1,'a':1,'in':2,'our':1,'disappear':1,'if':1,'extinct--taking':1,'what':3,'based':1,'just':1,'to':3,'much':1,'there':3,'able':1,'send':1,'.':2,'extinct.':1,'that':1,'recognised':1,'pretty':1,'mars':1,'taken':1,'announce':1,'occurs':1,'crookes':1,'do':1,'we':4,'used':1,'complete':1,'slight':1,'evolving':1,'lights':1,'regard':1,'but':1,'permanent':1,'moving':1,'know':4,'accompanied':1,'represented':1,'one':1,'between':1,'unavailable':1,'concentrated':1,'high':1,'made':1,'this':5,'going':2,'other':1,'these':1,'suppose':1,'can':1,'believed':2,'let':2,'the':9,'assume':1,'called':1},'provision':{'of':1},'left--to':{'snap':1},'nor':{'do':1,'certainty':1,'like':1,'would':1,'hibernates':1,'very':1,'indeed':1,'is':1,'knew':1,'surface':1,'destroyed':1,'to':1,'explain':1,'does':1,'in':3,'of':2,'has':1,'any':1},'nos':{'.':2},'lineage':{'for':1},'it--a':{'natural':1,'mind':1},'sea-butterflies':{'on':1},'seaweed-growing':{'shelf':2,'area':1},'drop':{'of':2,'inwards':1,'out':1},'form.':{'it':1},'cagcombe':{'co.':2},'intrigued':{'at':1},'bursts':{'through':1},'luminosity':{'a':1,'indefinitely':1,'we':1,'due':1},'cusps':{'on':1},'entirely':{'different':3,'marine.':1,'dependent':1,'absent;':1,'random':1,'fluid':1,'unsolved.':1,'electrical':1,'in':1,'new':1,'dissipated':1,'with':1,'out':1},'cliffs':{'of':1,'there':1},'last':{'and':1,'twelve':1,'ten':1,'century':1,'is':1,'haunt':1,'indefinitely.':1,'questions':1,'one':1,'for':1,'twenty':1,'doubt':1,'it':1,'glacial':1,'has':1,'two.':1,'hit':1,'period':1,'arose':3,'dwindling':1,'with':1,'great':2,'chamber':1},'side-view':{'of':5},'domain':{'and':1,'to':1,'does':1,'in':3,'print':1,'works':1,'ebooks':1},'fired':{'it':1},'advantage.':{'perhaps':1},'green-flies':{'which':1},'sugars':{'and':1},'dagoes':{'he':1},'challenger':{'expedition':1},'fires':{'of':1},'year':{'and':4,'old':1,'grouse':1,'this':1,'energy':1,'there':1,'but':1,'one':2,'to':1,'out':2,'are':1,'they':1,'in':3,'followed':1,'the':1,'.':4,'encased':1,'before':1},'happen':{'as':1,'when':1,'if':1},'avoided':{'the':1},'monitors':{'are':1},'wheat--changes':{'in':1},'shown':{'a':1,'and':1,'faint':1,'that':7,'also':1,'there':1,'an':1,'to':1,'greatly':1,'at':2,'opposite':1,'in':11,'the':1,'.':1,'arno':1,'clearly':1,'remaining':1},'rude':{'stone':1},'space':{'and':5,'on':1,'that':1,'with':1,'straight':1,'in':2,'it':1,'can':1,'.':8,'yet':1,'are':1,'above':1,'between':1,'at':1,'during':1,'the':1,'shows':1,'where':1,'by':1,'is':3,'circular':1},'amnion':{'and':1,'which':1},'furthermore':{'there':1,'they':1},'inconceivably':{'small':3,'distant':1,'greater':1},'equatorially':{';':1},'hastily':{'referred':1},'increase':{'to':1,'rather':1,'of':6,'their':1,'in':3,'our':1},'kingdom.':{'on':1,'j':1},'rational':{'device':1,'conduct':3},'receiving':{'no':1,'stimuli':1,'tidings':1,'olfactory':1,'it':1,'contributions':1},'shows':{'a':3,'the':17,'great':1,'that':6,'any':1,'many':1,'some':1,'two':1,'an':1,'how':1,'definitely':1,'certain':1,'affinities':1,'clearly':1,'positively':1},'inevitably':{'lead':1},'e.':{'rutherford':1},'eighty-eight':{'of':1},'glass--the':{'stopper':1},'divergence':{'arboreal':1,'of':3},'animals.':{'the':1,'senses':1,'sec':1},'quart':{'.':2},'intruding':{'fishes':1,'bacteria':1,'parasites':1},'directions.':{'this':1,'so':1},'advantages':{'being':1,'of':1,'.':1},'taxed':{'no':1},'animals;':{'of':1,'it':1},'marine':{'animals':3,'family':1,'organisms':1,'lampreys':2,'fish':4,'but':1,'.':1,'leech':1},'inevitable':{'stoppage':1,'processes':1},'card':{'says':1,'tea':1,'is':1,'donations.':1,'in':1,'prof':1,'was':1},'care':{'and':3,'on':1,'associated':2,'in':1,'mammals':1,'is':1,'there':1,'it':1,'.':3,'as':2,'so':1,'which':1,'of':2,'exhibited':1},'vestige':{'and':1,'of':3,'in':1},'reflect':{'the':4,'that':2},'rearrangements':{';':1},'fixed':{'paths':1,'angle':1,'like':1,'for':1,'faith':1,'to':1,'distances':1,'limits':1,'vegetation--a':1,'in':3,'stage':1},'stage.':{'the':1},'selections':{'made':1},'transition':{'to':2,'.':1,'from':2,'which':1,'stage':1},'british':{'columbia.':2,'nightjar':1,'starfish':2,'guiana':2,'salterns':1,'museum':14,'coasts':1,'sailor':1,'average':1,'association':2},'invitation':{'to':1},'lighting':{'on':2},'domed':{'and':1,'web':1,'cranial':1,'than':1},'hesperornis':{'100':1,'after':1},'suffice':{'to':1,'of':1},'sprawling':{'blotch':1},'flying':{'and':2,'phalanger':1,'fish':2,'dragons':5,'past':1,'debris':1,'bats':1,'in':1,'birds':2,'frog':2,'reptiles':1,'under':1,'bird':1,'dragons--the':1,'squirrel':2,'crouching':1,'mammals':1,'jumps':1,'tree-toad':1,'fishes':2,'squirrels':1,'creatures.':2,'dragon':4,'matter':1,'lizard':1,'reptiles.':1,'lemurs':1,'phalangers':2,'round':1},'striking':{'and':1,'confirmation':1,'resemblance':2,'novelties':1,'of':1,'is':1,'illustration':1,'.':1,'instances':1,'as':1,'fact':1,'devices':1,'are':2,'feature.':1,'the':3,'difference':1,'coloration':1,'proof':1},'omitted':{'the':2},'comprised':{'only':1,'in':1},'brain.':{'the':1},'directly':{'and':1,'towards':1,'into':1,'important':1,'between':3,'pitted':1,'the':1,'or':3,'apart':1},'comprises':{'a':1,'the':1},'impossible':{'even':1,'on':1,'we':2,'because':1,'for':1,'but':1,'.':3,'to':7,'in':1},'ring':{'and':2,'a':1,'getting':1,'of':3,'into':1,'up':1,'.':1,'which':1},'drove':{'our':1},'size':{'and':6,'is':1,'it':1,'shape':1,'are':1,'in':1,'compared':1,'from':1,'possible.':1,'except':1,'.':4,'only':1,'has':1,'though':1,'after':1,'but':1,'101':1,'with':2,'covering':1,'of':22,'as':2,'mass':1,'the':1},'sheep':{'horses':1,'contrasted':1,'.':3,'in':1,'tearing':1,'or':1},'cerebration':{'at':1},'sheer':{'dexterity':2,'intelligence.':1,'quickness':1},'air-sacs':{'in':1},'checked':{'in':1},'silent':{'laboratories':1,'monotonous':1},'apple.':{'of':1},'caught':{'and':2,'a':1,'its':1,'on':1},'breed':{'.':1},'callous':{'rough-and-tumble':1},'longitudinally.':{'the':1},'wing-span':{'of':1},'flint':{'and':1,'implements':1,'implement.':1},'joseph':{'evolution':1},'melanocetus':{'indicus':1,'murrayi':1},'friend':{'the':1,'or':1},'nutrition':{'and':1},'x.':{'this':1},'rock-dove':{'just':1},'mostly':{'confined':1,'on':1,'caught':1,'white':1,'in':1},'that':{'all':14,'spiders':1,'go':2,'causes':1,'physiological':1,'suits':2,'to':2,'reptiles':1,'under':1,'degeneration':1,'case':1,'coloured':1,'every':10,'fall':1,'affect':1,'monkeys':1,'minute':1,'did':2,'herbert':1,'small':1,'round':1,'full-grown':1,'crop':1,'further':1,'creatures':1,'even':4,'pale-white':1,'apparatus':1,'assisted':1,'asia':2,'goes':2,'new':1,'body':1,'sinks':1,'climbs':3,'here':1,'atoms':1,'along':1,'change':1,'convert':1,'substance':2,'ichneumon':1,'wherever':1,'experience':1,'electricity':1,'locomotion':1,'makes':2,'followed':1,'trained':1,'bloweth':1,'from':1,'would':2,'prove':2,'remains':2,'live':3,'therefore':1,'mysterious':1,'substances':1,'marks':1,'particular':1,'90':1,'93':1,'must':1,'account':1,'animals':4,'this':20,'science':2,'piltdown':1,'can':5,'meet':1,'indicated':1,'frogs':2,'allowed':1,'high':1,'arise':1,'evidently':1,'viviparity':1,'end':1,'damage':1,'seeds':2,'movements':1,'intelligent':1,'swayed':1,'may':3,'after':3,'curiosity':1,'man':16,'a':32,'light':6,'sun-spots':1,'life':2,'green':1,'unsteady':1,'over':1,'produced':1,'experiments':1,'during':1,'carnivores':1,'existence':1,'rewarded':2,'birds':5,'before':1,'group':1,'forms':1,'vast':1,'covered':2,'might':3,'pays.':1,'evolution':6,'they':70,'not':1,'each':2,'went':3,'energy':4,'constitute':1,'our':8,'out':1,'living':3,'percepts':1,'flowed':1,'supports':1,'given':1,'put':1,'could':3,'length':1,'throws':1,'already':2,'number':1,'one':4,'long':1,'size':1,'little':1,'toy':1,'leading':1,'system':1,'hangs':1,'their':6,'gives':1,'eyes':1,'that':1,'took':1,'part':1,'flowers':1,'distance':4,'kind':1,'require':1,'tree':1,'matter':1,'were':2,'enables':1,'and':1,'ages':1,'have':11,'wallowed':1,'any':1,'-':1,'ideas':1,'cropped':1,'build':2,'which':7,'mammals':2,'play':1,'unless':1,'though':1,'object':1,'what':1,'falls':2,'most':2,'letter':1,'device':1,'extremely':1,'manifested':1,'gather':1,'steady':1,'electrons':2,'came':1,'gold':1,'insects':1,'means--resides':1,'only':2,'molecules':2,'8':1,'inhabit':1,'he':8,'local':1,'meant':1,'his':2,'sense':1,'skims':1,'means':1,'nearly':1,'instinctive':1,'dr':1,'runs':1,'she':2,'contain':1,'where':1,'aspect':1,'intelligence':1,'radium':2,'depends':2,'individual':2,'are':7,'tender':1,'definite':1,'its':2,'halves':1,'outside':1,'various':1,'between':3,'neither':1,'we':42,'nature':1,'originated':1,'multiplies':1,'come':2,'both':4,'many':6,'s':1,'figures':1,'expended':1,'comes':1,'otherwise':1,'among':2,'point':1,'whatever':1,'height':1,'regulated':1,'ether':1,'.':2,'interest':1,'mars':1,'empty':1,'direction':1,'flight':1,'amphibians':1,'engage':1,'lives':2,'sound':1,'these':12,'will':2,'while':8,'intercepts':1,'discoveries':1,'century':1,'light.':1,'is':51,'it':73,'experts':1,'in':27,'if':11,'different':1,'develop':1,'make':4,'grows':1,'neolithic':1,'used':1,'moment':1,'necessity':1,'supposing':1,'recent':1,'dark':1,'no':5,'sound-waves':1,'the':305,'bodies':1,'left':2,'just':2,'when':13,'distant':1,'questions':1,'speed':1,'death':1,'field':1,'had':6,'has':13,'gave':1,'increased':1,'early':2,'elapses':1,'like':1,'often':1,'ascend':1,'lingers':1,'happens':1,'provided':1,'leaf':1,'for':3,'does':2,'although':2,'instinct':2,'littoral':1,'by':2,'on':3,'about':1,'central':1,'of':52,'wave-length':1,'primitive':1,'within':1,'promise':1,'spores':1,'sticklebacks':1,'her':1,'there':47,'gases':1,'was':8,'opens':1,'form':1,'some':15,'amongst':1,'atom':1,'remote':1,'with':1,'partially':1,'made':1,'flit':1,'variations':1,'planet':1,'below':1,'attaches':1,'universal':1,'body-making':1,'deep':1,'an':6,'as':7,'exist':1,'at':7,'walks':1,'again':1,'variety':1,'uranium':1,'slumbers':1,'other':1,'you':4,'star':1,'visits':1,'develops':1,'fishes':2,'implies':1,'lead':1,'age':1,'depth':1,'time':1,'once':2},'brains':{'a':1,'and':2,'about':1,'from':1,'of':2,'is':1,'.':1,'occupying':1,'more':1},'kangaroo-like':{'fashion':1},'bees.':{'sheer':1},'eliminated':{'while':1,'in':1},'flowers':{'and':5,'yet':1,'in':1},'than':{'all':2,'uranium':1,'fifty':1,'light-waves':2,'birds':1,'before':1,'25':1,'to':5,'self-fertilisation':1,'ours':1,'seen.':1,'evolution--but':1,'very':1,'five':1,'occasional':1,'they':4,'half':1,'one':3,'55':1,'twice':1,'she':1,'science':1,'seventeen':1,'violet-light':1,'are':1,'our':1,'parachuting':1,'what':1,'its':1,'across':1,'we':3,'full':1,'300':1,'men':1,'efficiency':1,'others':2,'might':1,'100':2,'by':2,'anything':1,'of':1,'himself.':1,'34':1,'bricks':1,'two':4,'decrease':1,'learning':1,'one-millionth':1,'reflective--which':1,'from':1,'her':1,'twenty':1,'support':1,'there':1,'three':3,'cats':1,'500':1,'life':1,'that':7,'understand':1,'with':1,'those':4,'women':1,'sound':1,'non-existence':1,'thirty':1,'this':3,'plain':1,'replaced':1,'many':1,'my':1,'collecting':1,'seven':1,'guesses':1,'is':9,'radial':1,'it':3,'an':7,'as':1,'itself':1,'three-chambered.':1,'at':1,'fumbling':1,'in':15,'any':4,'tentative':1,'when':2,'regions':1,'arboreal':1,'another':1,'142':1,'eighty':2,'variation':1,'eight':1,'a':23,'elusive':1,'counterbalances':1,'-200':1,'the':52},'rugged':{'.':1},'artificer':{'fashioning':1},'accordance':{'with':3},'three-spined':{'and':1,'stickleback':2},'shunting':{'waggons':1},'dawn.':{'in':1},'apples':{'and':1},'fruits':{'and':1,'the':1,'191':1},'accessed':{'displayed':1},'photosynthesis':{'carbon':1,'that':1,'.':1,'i.e':1},'sublime':{'process':2,'device':1,'indifference':1,'movement':1},'dipnoan':{'which':1},'troublesome':{'as':1},'chlorophyll':{';':1,'that':1,'or':2,'which':1,'in':1},'angel':{'in':1},'remained':{'naked':1,'flat':1,'unchanged':1,'plastic--a':1,'at':1},'caterpillars.':{'of':1},'interpretation':{'of':6,'is':1},'lens-shaped':{'middle':1,'portion':1,'formation':1,'system':1},'anger':{'and':1},'wallowed':{'in':1},'recover':{'itself':1},'slab':{'of':1},'lumps':{'of':1},'erectus.':{'3':1},'overcoming':{'the':1},'shark':{'and':1,'his':1},'snout':{'the':1,'was':1,'region':1},'equipment':{'is':1,'including':1,'especially':1,'.':2},'mr.':{'waterhouse':1},'repeatedly':{'pruned':1,'changed':1,'shot':1,'against':1},'online':{'distributed':2,'at':3,'payments':1},'mediterraneans':{'semites':1},'hornbill':{'s':2},'begin':{'to':10,'with':6,'at':1,'afresh':1},'price':{'essence':1,'paid':1},'evaporate':{'altogether':1},'ultramicroscope':{'have':1},'men--conspicuous':{'amongst':1},'america':{'and':3,'a':1,'introductory':1,'africa':1,'.':2,'the':2,'by':1,'is':1},'greyish':{'jelly':1,'zone':1},'forever':{'unseen':1},'music.':{'illustration':1},'dream':{'that':1,'.':1},'freshwaters':{'and':1,'afforded':1,'form':1,'is':1,'.':2,'including':1,'4':1,'the':1},'steady':{'flow':1,'rhythmical':1,'renewal':1},'tooth':{'and':3,'is':1,'catches':1},'sunset':{'mean':1},'hurled':{'against':1,'out':1},'pattern':{'to':1,'is':1,'of':1,'.':1},'dust--that':{'it':1},'honour.':{'what':1},'discoverer':{'of':2},'fifty':{'thousandths':1,'eggs':1,'years':3,'feet':1,'miles':4,'fathoms':1},'discovered':{'and':3,'a':2,'about':1,'or':1,'star':1,'that':2,'it':1,'whatever':1,'an':1,'near':1,'until':1,'then':1,'in':12,'new':2,'the':4,'.':5,'by':2},'227':{'photo':1,'from':1},'226':{'photo':1},'fifth':{'printing':1},'crashing':{'along':1},'gnaw':{'the':1,'through':1},'ratio':{'of':1,'for':2,'to':1},'darwinism.':{'iii':1},'title':{':':1},'proportion':{'shown':1,'that':1,'of':1,'to':2,'as':1,'at':1},'jolt':{'that':1},'only':{'and':1,'exposed':1,'certain':1,'is':1,'coming':1,'competition':1,'one':13,'beginning':1,'as':3,'animals':1,'are':1,'planets':1,'in':4,'globes':1,'happen':1,'large':1,'differ':1,'from':2,'for':2,'shifts':1,'twenty':1,'make':1,'though':1,'when':2,'two':1,'been':1,'inferred':1,'to':6,'that':3,'without':1,'extravagant':1,'4':1,'way':1,'gradually':1,'mean':1,'profiting':1,'infer':1,'plants':1,'return':1,'206':1,'pours':1,'liberated':1,'apparent':1,'dimly':1,'but':1,'possible':2,'approaches':1,'a':28,'waves':1,'method.':1,'during':2,'shadow':1,'an':3,'with':1,'by':3,'minute':1,'fly':1,'on':1,'about':1,'luminescence':1,'backboned':1,'working':1,'thirty':1,'be':1,'of':4,'supporting':1,'required':2,'half':1,'different':1,'travels':1,'matter':1,'maintain':1,'were':1,'found':1,'the':5,'say':1,'or':1,'meaning':1,'once':4},'self-forgetful':{'and':1},'essence':{'of':1},'thompson':{'silvanus':1},'orthoptera':{'have':1},'220':{'the':1},'seen.':{'the':1,'illustration':1},'continuance':{'of':5},'shepherding':{';':1},'15.--mars':{'1':1},'warm-blooded':{'.':1,'creature':1},'cannot':{'and':1,'all':1,'give':2,'indeed':1,'in':1,'discover':1,'replace':1,'go':3,'see':1,'expect':1,'have':2,'enumerate':1,'fail':1,'follow':1,'even':1,'guess':1,'make':1,'continue':2,'survive':1,'tell':1,'swim':1,'be':26,'shut':1,'dispense':1,'however':1,'here':1,'possibly':1,'succeed':1,'put':1,'now':1,'come':1,'positively':2,'of':1,'conceive':1,'say':4,'evade':1,'think':2,'leave':2,'settle':1,'avoid':2,'travel':1},'genealogy':{'which':1},'appreciatively':{'in':1},'exactitude':{'and':1},'seldom':{'coincides':1,'spends':1,'if':1},'girdled':{'about':1},'baits':{'of':1},'prevents':{'bleeding':1},'sea--the':{'fresh':1,'shallow':1,'open':1,'deep':1},'girdles':{'of':1},'pituitary':{'and':1},'burst':{'into':2},'physically':{'far':1},'lancelets':{'and':1},'famine':{'or':1},'namely':{'portions':1,'that':1,'air':1,'in':1,'the':6,'sexual':1,'experimental':1},'actively':{'and':1,'hunts':1,'from':1},'sticklebacks.':{'after':1},'successive':{'ages--the':1,'series':1,'rings':1,'strata':2,'steps':1,'periods':1,'sets':1,'stages':1,'conquests':1,'incarnations':2},'sport':{'and':1,'for':1},'key--a':{'way':1},'concern':{'the':1,'for':1},'sprawl.':{'they':1},'justifies':{'itself':1},'colours':{'and':4,'then':1,'from':2,'which':2,'apart':1,'sometimes':1,'correspond':1,'.':11,'observed':1,'will':2,'are':1,'produced':1,'in':1,'alone':1,'283':1,'coloured':1,'with':1,'the':2,'red':1,'gives':1},'3':{'and':4,'below.':1,'1908':2,'educational':1,'rapid':1,'from':1,'hillock':1,'.':11,'3':1,'4':1,'we':1,'inches':1,'000':1,'letter':1,'variable':1,'now':1,'with':1,'by':1,'man':1,'evolution':1,'i':1,'of':2,'making':1,'the':11,'minutes':1,'drawing':1},'between':{'stones':1,'summer':1,'ten':1,'intelligence':1,'modern':1,'mind':1,'worms':1,'one':1,'tide':1,'our':1,'its':1,'tide-marks':1,'different':1,'flowers':2,'two':5,'physiology':1,'certain':1,'raising':1,'stars':1,'mars':1,'red':2,'a':3,'them':5,'that':1,'atoms':1,'it':1,'members':1,'shadow':1,'water-weeds':1,'fifteen':1,'day':1,'minute':1,'man':3,'plants':2,'loss':1,'one-seventh':1,'this':2,'hungry':1,'us':4,'these':3,'those':1,'common':2,'mother':2,'the':32,'male':1},'kneads':{'it':1},'justified':{'his':1,'by':1},'whipped':{'egg':1},'notice':{'what':1,'that':5,'this':1,'of':2,'is':2,'in':5,'how':1,'therefore':1,'another':1,'certain':1,'the':6,':':1,';':1,'indicating':1},'article':{'on':2,'is':1,'dealing':1},'profitless':{'stimuli':1},'stages':{'still':1,'e.g':1,'of':5,'when':1,'it':1,'through':1,'at':1,'which':1,'in':9,':':1,'until':1},'strides':{'associated':1},'cycad':{'flora':1},'systema':{'naturae':2},'altamira':{'cave':4},'enabling':{'the':1},'sparseness':{'in':1},'comet':{'and':1,'october':1,'for':1,'that':1,'september':1,'of':1,'is':1,'s':1,'.':1,'fig.':1,'approaches':1,'the':1,'dashes':1},'wheels':{'go':1},'already.':{'among':1},'comes':{'a':3,'and':1,'about':1,'from':1,'into':1,'within':2,'back':1,'.':1,'to':3,'through':1,'directly':1,'close':1,'the':1,'out':2},'mites':{'many':1},'passenger':{'pigeon':1},'jeans':{'says':1},'juvenile':{'stages':2},'learning':{'a':1,'by':7,'from':1,'intelligently.':1,'to':5,'thinking':1,'tricks':1,'there':1,'but':1,'.':1,'trial':1,'at':1,'the':1,'or':1},'moreover':{'even':1,'climate':1,'that':3,'meteorites':1,'there':2,'their':1,'as':2,'every':1,'they':1,'the':2,'if':1},'actually':{'standing':1,'do':2,'fly.':1,'longer':1,'dividing':1,'consort':1,'settled':1,'caught':1,'observed':2,'implied':1,'lives':1,'stuffed':1,'in':1,'observing':1},'sun-spots':{'appear':1,'that':1,'is':2,'rise':1,'it':1,'.':1,'are':1,'where':1},'oliver':{'lodge':2,'electrons':1},'cares':{'.':1},'mimicry--the':{'subject':1},'markedly':{'contrasted':1,'from':1,'in':1},'jerks':{'a':1,'itself':1,'its':1},'punished':{'by':1},'rotting':{'or':1,'.':1},'dangers':{'.':1,'e.g':1},'exhaustion':{'of':1},'gill-breathing':{'and':1},'angles--that':{'is':1},'observers':{'who':1,'that':1},'stephen':{'cribb.':2},'textbook':{'organic':1},'rubs':{'it':1},'stems':{'of':1,'gave':1},'suspected':{'that':1,'.':1},'water-animals':{'.':1},'realities':{'in':1,'.':1},'prehistoric':{'skulls':1,'brothers':1,'human':2,'metallurgists':1},'developing':{'organs':1,'eggs':1,'egg':1,'human':1},'these':{'flaming':1,'partial':1,'planetesimals':1,'magnetic':1,'forests':1,'four':1,'not':1,'motions':1,'facts':2,'tropisms':1,'its':1,'before':2,'layers':1,'middlemen':1,'giant':1,'daughter-buds':1,'infinitely':1,'quaint':2,'greeks':1,'masses':1,'show':1,'young':1,'forms':2,'to':1,'twig-insects':1,'spirals':1,'clusters':1,'include':1,'moorhens':1,'rodents':1,'exalted':2,'questions':2,'dark':1,'gloomy':1,'effects':2,'words':2,'radio-active':1,'instinctive':1,'fragments':2,'vast':1,'vapour':1,'shallow-water':1,'variable':1,'sources':1,'large':1,'small':1,'works':1,'embryonic':1,'mean':1,'methods':1,'are':16,'instances':1,'concern':1,'gill-slits':1,'three':4,'palaeolithic':1,'organisms':1,'self-effacing':1,'shallow':1,'particles':4,'various':2,'moons':1,'open-sea':1,'illustrate':1,'encounters':1,'red':2,'mercury':1,'we':1,'men':1,'agencies':1,'atoms':2,'wingless':1,'threads':1,'represented':1,'tidal':1,'craters':1,'great':1,'last':1,'flames':1,'brilliant':1,'could':1,'haunts':1,'strange':2,'extremes':1,'streams':1,'dents':1,'efforts':1,'wonders':1,'considerations':1,'reasons':1,'instruments':3,'marvels':1,'spiral':2,'invisible':1,'gases':1,'protozoa':1,'ether':1,'technically':1,'ring-formations':1,'little':2,'ancient':1,'from':1,'entities':1,'outbreaks':1,'there':4,'two':9,'spots':1,'.':1,'stuck':1,'observations':1,'fiery':1,'reflex':1,'manufacture':1,'enable':1,'vigorous':1,'stars':2,'form':1,'that':1,'formed':1,'minute':1,'cases':1,'sleeping':1,'with':2,'must':1,'portions':1,'was':1,'cells':1,'variations':1,'will':1,'regions':1,'replaced':1,'thin':1,'were':4,'coral':1,'and':1,'seven':2,'planets':1,'is':3,'it':1,'days':1,'pieces':1,'have':5,'in':2,'need':1,'x-rays':1,'pages.':1,'paths':1,'rays':2,'requirements':1,'inborn':2,'perhaps':1,'things':3,'cave':1,'struggles':1,'astronomers':1,'sciences':1,'amazing':1,'other':1,'details':1,'which':1,'papers':1,'units':1,'green':2,'several':2,'higher':1,'play':1,'elements':1,'vestigial':2,'may':1,'long':1,'eight':1,'delicate':1,'half-brutish':1,'waves':3,'fishes':2,'types':2,'so-called':1,'enregistrations':1,'spectra':1,'lines':3,'lasted':1,'substances':2,'chemical':3,'points':2,'electrons':7,'bodies':1,'allow':1,'tentatives':1,'the':2,'molluscs':1},'danger.':{'illustration':1},'handicapped':{'by':1},'biped':{'and':1,'202':1,'when':1},'care.':{'but':1,'illustration':1},'coolest':{'and':1,'places':1},'ein':{'or':1},'ocean-basins.':{'beginnings':1},'soil':{'of':1,'the':3,'by':1,'.':1},'startling':{'results.':1,'in':1,'effect':1,'rapidity':1,'.':1},'100th':{'of':1},'eras':{'marked':1,'.':2,'eighteen':1,'passed':1,'in':1,'with':1},'beaver':{'will':1,'not':1,'the':2,'shore-frequenting':1,'220':1},'property':{'infringement':1,'of':4,'trademark':1,'common':1,'which':1},'helium':{'and':1,'from':1,'could':1,'gas':1,'by':1},'thrills':{'the':1},'generously':{'.':1},'cromagnon':{'man':2},'develop':{'and':2,'into':2,'without':1,'inside':1,'in':2},'inquire':{'how':3,'into':1,'however':1,'what':2},'intelligently':{'appreciate':1,'.':1},'epoch':{'now':1,'in':1},'inquiry':{'into':1,'was':1,'is':2,'called':1},'streams':{'and':1,'of':4,'.':1,'bring':2,'in':1,'encounter':1,'out':1},'gorging':{'itself':1},'noble':{'giants.':1,'qualities':2,'in':1},'investigated':{'to':1,'.':1},'centuries':{'astronomers':1,'to':2,'unavailable':1},'arctic':{'plants':1,'fox':2,'foxes':1,'ocean':1,'forms':1,'terns':1},'foam':{'beneath':1,'it':1},'unconvincing':{'.':1},'fruit':{'to':1,'it':1,'but':1,'.':1},'attributes':{'as':1},'solicitation':{'requirements':1},'passing':{'on':1,'from':2,'two':1,'quickly':1,'down':1,'to':1,'through':5,'stars':1,'in':1,'an':1,'cloud':1,'before':1},'traps':{'and':1},'framework':{'of':1,'in':1},'charges':{'and':1,'of':3,'within':1,'carried':1,'.':1},'constitutional':{'sometimes':1,'changes':1,'rhythm':1},'breezy':{'morning':1},'severe':{'processes':1,'winter':2,'for':1,'interglacial':1,'in':1,'cold':2,'conditions':1},'luminous':{'body':1,'and':1,'interpretation':1,'body.':1,'envelope':1,'after':1,'spot':1,'.':1,'to':1,'cloud-like':1,';':1,'organs':1,'the':1,'fact':1},'laboratories':{'of':2},'charged':{'particles':1,'with':1,'nucleus':1},'heaps':{'them':1},'three-chambered':{'heart':2},'last.':{'the':1,'there':1},'aeration':{'is':1},'transmitting':{'waves':1},'cromagnards':{'probably':1,'in':1,'.':1},'dancers':{'in':1},'valuable':{'food-plant':1,'practically':1},'electrification':{'like':1},'accumulate':{'on':1,'any':1,'.':1},'rule.':{'getting':1},'ounces':{';':1,'at':1},'touch':{'of':3,'the':1,'is':1,'came':1,'.':1},'speed':{'a':1,'we':2,'that':1,'of':15,'is':1,'though':1,'given':1,'.':3,'to':1,'as':1,'increases':1,'which':1,'in':1,'has':1,'with':1,'or':2,'round':1},'death':{'and':2,'a':2,'of':3,'is':3,'there':2,'when':1,'but':1,'.':3,'as':1,'sec':1,'are':1,'208':1,'the':1,'should':1,'similar':1,'becoming':1},'legitimately':{'inquire':1},'thinking':{'about':1,'of':3,'is':1,'.':2,';':1,'feeling':2},'darkness--an':{'eternal':1},'starlings':{'in':1},'improvement':{'where':1,'e.g':1},'journey.':{'we':1},'treatment':{'and':1,'of':1},'versa':{'some':1},'dovecot':{'to':1},'struck':{'only':1,'in':1},'real':{'wealth':1,'nature':2,'food':1,'men':1,'seeds':1,'sense':1,'progress':1},'spectacular':{'display':2,'element':1},'larva':{'about':1,'e.g':1,'called':1,'transparent':1,'that':1},'rules':{'is':1,'set':1},'outermost':{'finger':3,'moons':1},'stung':{'by':1},'epoch-making':{'step':1,'experimental':1},'discontinue':{'all':1},'absorptive':{'wall':1},'early':{'embryo':1,'summer':1,'atmosphere':1,'instruments':1,'pliocene':2,'chapters':1,'years':1,'triassic':1,'in':1,'stage.':1,'instrument':1,'reptiles':1,'ripening':1,'stage':2,'vegetation':1,'life-history':2,'neolithic':1,'waters':1,'men':1,'community':1,'man':1,'stone':2,'forking':1,'days':2,'youth':1,'greek':1,'victorian':1,'offshoot':2,'or':1},'quickness':{'of':1,'correlated':1,'.':1},'broader.':{'other':1},'decipher.':{'another':1},'using':{'a':2,'up.':1,'them':1,'and':1,'these':1,'or':1,'their':2,'electricity':1,'the':3,'any':1},'lady':{'came':1},'ruled':{'by':1},'inevitableness':{'of':1},'learnedly':{'called':1},'heat-waves':{'and':1,'.':1},'nerve-endings':{'on':1},'pounds':{'and':3,'of':4,'.':1},'smell':{'and':1,'less':1,'of':1,'that':1,'.':1,'in':2,'detecting':1,'or':1},'velocities':{'and':1,'with':1,'from':1},'streamers':{'which':1},'system.':{'the':3,'several':1,'what':1,'illustration':1,'in':1},'benefit':{'is':1,'in':1},'t':{'our':1,'.':3,'of':1},'fully':{'formed':1,'into':1,'explained':1,'appreciate':1,'aware':1,'absorbed':1,'in':1,'.':1},'downward':{'current':1,'currents':1},'twelve':{'hours':1,'different':1},'exposed':{'on':1,'it':1,'rocks':1,'to':3,'at':1,'the':1},'coal--a':{'chemical':1},'cathode':{'gave':1},'chronology':{'do':1},'astronomer':{'simon':1,'takes':1,'calls':2,'means':1,'h':1,'seldom':1,'.':1,'offers':1,'said':1,'has':1,'despairing':1},'shore-pool':{'and':1},'1859':{'made':1,'.':1},'salicylic':{'acid':1},'unlocked':{'.':1},'1850':{'.':1},'recorded':{'.':1,'in':1},'1856':{'in':1},'conservative':{'and':1,'animals':1,'type':1,'anatomist':1},'clear-cut':{'perceptual':1,'ideas':1,'.':1},'iron-forming':{'bacteria':1},'wheat':{'and':3,'a':1,'in':2,'which':1,'on':1,'of':1,'is':2,'that':1,'it':1,'1919':1,'emerged':1,'were':1,'harvest':1,'with':1,'called':1,'before':1},'business':{'office':1,'that':1,'of':1,'.':1,'pglaf.org':1,'in':1},'sixth':{'printing':1,'day':1,'month':1},'equivalent':{'to':1},'uneasy':{'and':1,'restlessness':1},'sixty':{'millions.':1,'miles':2,'years':1},'exciting':{'chapter':1,'race':1},'throw':{'off':1,'light':1,'it':1,'much':1,'dust':1,'prickly':1},'comparison':{'of':1,'the':1,'.':1,'with':3,'should':1},'ear-trumpet':{'or':1,'man':1},'central':{'and':1,'body':2,'stomach':1,'sun':1,'region':1,'java.':1,'europe':1,'fire.':1,'portion':1,'part':1,'nucleus':2,'africa':1,'biological':1,'lens-shaped':2,'mass':1,'fact':1},'piety':{'of':1},'tentatives':{'have':1,'.':1},'wolf':{'a':1,'the':1,'.':2},'greatly':{'increased.':1,'and':1,'economised':1,'from':1,'increased':2,'for':1,'restricted':1,'enlarged':1,'according':1,'by':1,'misjudge':1,'increases':1,'magnified.':2,'in':1,'affect':1,'reduced':1,'elongated':1,'encouraged':1},'bright-green':{'hue':1},'predatory':{'creatures':1,'animal':1,'cuttlefishes':1},'freeing':{'of':1},'outlook':{'on':1},'whole.':{'geologists':1},'kapp':{'gisbert':1},'goethe':{'s':1},'skunks':{'magpies':1},'rolling':{'stone':1},'heated':{'.':1},'elementary':{'exposition':1,'can':1,'fact':1},'shrinking':{'the':1,'mass':1},'your':{'poker':1,'possession.':1,'written':1,'country':1,'equipment.':1,'use':1,'applicable':1,'pocket':1,'state':1,'periodic':1,'nerves':1,'cold':1,'hand':1,'efforts':1},'stare':{'at':1},'risen.':{'one':1},'fast':{'and':1,'line--are':1,'that':2,'bound':1,'.':1,'to':1},'log':{'ready':1},'prepare':{'or':1,'your':1},'area':{'and':2,'of':5,'varies':1,'.':1,'as':1,'are':1,'which':2,'by':1},'stoppage':{'of':1},'start':{'a':2,'of':1,'at':1,'the':1,':':1,'with':1},'cats':{'and':2},'low':{'and':2,'flat':1,'temperatures':1,'temperature':1,'form':1,'level':3,'nest-building':1,'grounds':1,'when':1,'forests':1,'gap':1,'chemical':1,'to':1,'quiet-looking':1,'retreating':1,'psychical':1,'the':1,'on':1,'type':1,'order':1,'degree':1},'lot':{'of':2},'colder':{'water':1,'.':1},'jones':{'has':1},'philosophers':{'but':1},'posterior':{'claspers':1},'manipulative':{'intelligence':1,'skill':1,'expertness':1},'1871--a':{'book':1},'body-cells':{';':1},'two-thirds':{'of':2},'water-vapour':{'gathers':1,'which':1,'in':1},'hottest':{'.':1},'playsomest':{'crittur':1},'sea-level':{'.':1},'circulation':{'of':2},'species.':{'sec':1,'it':1},'star.':{'this':1},'phosphorescent':{'things':1,'animals;':1,'at':1},'waltzing':{'mouse':1},'embedded':{'in':2},'waste-product':{'called':1},'beliefs':{'concerning':1},'euplectella':{'a':2},'vedda':{'of':1},'600':{'a':2,'miles':1,'000':1},'describe':{'this':1,'even':1,'the':1,'it':1,'as':1},'moved':{'slightly':1,'still':1,'slowly':1,'forwards':1,'weigh':1},'sheath':{'which':1},'moves':{'and':1,'only':1},'extinct--taking':{'us':1},'innings':{'.':1},'plants--the':{'first':2},'alligator-like':{'forms':1},'thither':{'rather':1,'somewhat':1},'you':{'already':1,'give':1,'within':1,'distribute':1,'share':1,'begin':2,'press':1,'are':4,'have':6,'in':1,'carefully':1,'follow':1,'will':1,'derive':1,'from':1,'for':2,'provide':3,'pay':1,'indicate':1,'charge':1,'take':1,'do':4,'notice':1,'cause.':1,'may':9,'beat':1,'as-is':1,'pick':1,'paid':3,'discover':1,'produce':1,'put':2,'hold':1,'with':1,'comply':2,'must':6,'a':1,'received':3,'prepare':1,'receive':1,'wish':1,'like':1,'cannot':1,'can':9,'learn':1,'agree':4},'forcing':{'us':1},'poor':{'.':1,'endowment':1,'in':2},'polar':{'bear':5,'ocean':1,'cap.':1,'snow-caps':1,'caps':2,'areas':1},'466':{'sirius':1},'bacillus':{'of':1},'drift':{'across':1,'but':1,'which':1},'carpenter':{'who':1},'flattened':{'shape':1,'tips':1,'sacs':1},'suited':{'to':3,'for':9,'certain':1},'queensland':{'one':1,'mudfish':1},'pool':{'on':1,'almost':1,'of':1,'is':1,'.':1,'swamp':1,'in':1},'ramsay':{'discovered':1,'and':1},'building':{'of':2,'material':1,'up':7},'bulk':{'of':4,'under':1},'condensation':{'of':1,'would':1,'they':1,'.':1},'sperm-cells':{'distinct':2,'.':1},'controlled':{'and':2,'activities':1,'life':1,'then':1,'movements':1,'more':1},'profits':{'you':1,'by':1},'doubted':{'even':1},'signalling':{'to':1},'strings':{'round':1},'since':{'lessons':1,'then':1,'we':2,'sheep-ranches':1,'many':2,'noon':1,'there':1,'it':4,'rain':1,'matter':1,'disappeared.':1,'all':1,'man':1,'the':8,'darwin':1,'extinct':2,'if':1},'contemporaneously':{'with':2},'skeleton':{'and':1,'remains':1,'musculature':1,'of':4,'tend':1,'in':1,'or':2},'pointing':{'out':1},'breadth':{'of':1},'splitting':{'the':1,'into':1,'up':2},'month':{'and':2,'because':1,'old':1,'increased':1,'of':2,'began':1,'but':1,'.':1,'became':1},'ceased':{'to':5,'it':1},'thoughtful':{'men.':1},'re-utilise':{'.':1},'revealed':{'down':1,'to':1,'themselves':1,'itself':1},'asterias':{'forreri':2},'carpet':{'of':2},'keith':{'and':1,'pithecanthropus':1,'pictures':1,'arthur':1,';':1,'m.d':2,'says:':1},'referring':{'it':1},'cliff':{'.':1},'unenforceability':{'of':1},'wyoming':{'u.s.a.':1},'talkativeness':{'.':1},'deep-rooted':{'corresponding':1},'boiling-point':{'of':1,'while':1},'solicit':{'donations':1,'contributions':1},'sustain':{'it':1},'thomson.':{'i':1},'divisions':{'of':1},'very':{'precise':1,'permeable':1,'hooky':1,'remarkable':5,'distant':1,'carefully':1,'tough':1,'uniform':1,'fine':4,'profitable':1,'rapid':2,'rapidly':1,'educable':2,'interesting':11,'young':2,'peculiar':1,'passive':1,'deep-rooted':1,'masculine':1,'inconspicuous':4,'good':2,'dust':1,'far':4,'discrepant':1,'early':1,'nearly':1,'closely':1,'vividly':1,'highly':1,'feeble':1,'minute':2,'brightly':1,'dim':1,'like':4,'profound':1,'numerous':3,'imperious':1,'large':4,'common':3,'liable':1,'quick':1,'antique':1,'dilute':1,'old':1,'often':3,'innocent':1,'unprofitable':1,'changeful':1,'likely':1,'convincingly':1,'miserable':1,'heavy':1,'gradually':1,'dense':1,'prolific':2,'poisonous':2,'definite':1,'near':1,'conservative':1,'simplest':1,'crude':1,'sluggish':1,'palatable':1,'intimate':1,'notable':1,'weak':1,'voracious':1,'small':9,'completely':1,'slow':2,'active':3,'eventful':1,'strong':3,'beginning':2,'momentous':1,'great':3,'instant':1,'reverse':1,'many':1,'distinctively':1,'inexpensive':1,'practical':1,'sensitive':4,'greatly':2,'slightly':1,'hearty--we':1,'puny':1,'first':1,'favoured':1,'primitive':1,'useful':3,'striking':4,'simple':4,'image':1,'powerful':1,'apt':1,'obscure--sometimes':1,'forcibly':1,'finely':1,'complex':2,'readily':2,'sensible':1,'little':4,'ancient':2,'basis':1,'distinct':1,'own.':1,'faint':2,'markedly':1,'long':6,'plastic':1,'marked.':1,'literal':1,'much':9,'slowly':2,'low':5,'perfectly':1,'protuberant':1,'easy':2,'successful':3,'shallow':1,'feminine':1,'representative':2,'considerable':1,'gradually.':1,'uncertain':2,'instructive':2,'characteristic':1,'largely':1,'intimately':1,'suggestive':1,'obvious':2,'thin':1,'promising':1,'beautiful':3,'heart':1,'aerial':1,'compact':1,'violently':1,'slim':1,'few':1,'high':2,'effectively':1,'variable':2,'close':1,'tranquil':1,'different':9,'keen':2,'unsuitable':1,'eloquent':1,'utilitarian':1,'hot':4,'vital':1,'grand':1,'unpromising':1,'ordinary':1,'difficult':4,'fairly':1,'opposite':1,'convincing':1,'alert':1,'important':7,'sagacious':1,'fierce':1,'frequently':1,'conspicuous':1,'dark':1,'short':2,'advantageous':1,'effective':1,'crowded':1,'mobile':1,'vigorously':1,'well':2,'severe':1,'serious':2,'incomplete':1},'indubitable':{'multicellular':1,'dynamical':1,'.':1},'bombarded':{'by':2},'coloured':{'and':1,'on':1,'reproductive':1,'lights':1,'illustration':13,'cloth':1,'flowers--attractive':1,'discs':1,'objects':1,'tree-frogs':1,'cardboard':1,'disc':1,'frontispiece':1},'oncorhynchus':{'not':1},'balancing':{'and':1,'on':2,'themselves':1,'not':1,'the':1},'minded':{'of':1},'decide':{'upon':1},'10.--solar':{'prominences':1},'cross-striped':{'quickly':1},'generalised':{'not':1,'percept':1,'humanoid':2,'members':1},'obvious':{'limitation':1,'advantage':1,'that':1,'when':1,'.':1,'advantages':1,'therefore':1,'factor':1,'fact':1},'deficient':{'in':1},'louis':{'agassiz':1,'robinson':1},'ceaseless':{'sifting.':1,'process':1},'elusiveness.':{'v':1},'retrogressions':{'in':1},'mile':{'a':1,'all':2,'towards':1,'would':1,'away':1,'per':1,'.':1,'high.':1},'plain':{'and':1,'story':2,'that':4,'is':1,'account':1,'enough':1,'vanilla':2},'locomotive':{'publishing':2},'trumpeting':{'with':1},'brittle-star':{'and':1},'salterns':{'has':1},'torpedo-net.':{'they':1},'disintegration.':{'there':1},'4557':{'melan':1},'casual':{'and':1},'bass':{'which':1},'inspire.':{'subsequent':1},'darkness':{'and':1,'of':2,'.':1,'was':1,'in':2},'consumers':{'.':1},'witnessed':{'.':1},'emotions':{'ideas':1,'but':1,'.':1,'in':1,'such':1,'beyond':1},'thickness':{'would':1,'of':8,'is':2,'.':1,';':1,'he':1},'him.':{'instantaneously':1,'illustration':1},'argyroneta':{'natans':1},'learned':{'for':2,'to':9,'that':2,'.':1,'their':1,'in':2,';':1,'its':1},'elsewhere.':{'the':1,'as':1},'edited':{'by':1},'loose':{'and':4,'spiral.':1,'sort':1,'behind.':1,'network':1},'answers':{'back':2,'.':1,'to':1,'are':1,'the':1,'must':1,'come':1,'first':1},'elmhirst':{'r':1},'11.86':{'86500':1},'trunk':{'till':1,'it':1},'lull.':{'1':1,'what':1},'i.e':{'.':14},'strong':{'desire':1,'pectoral':1,'vigorous':1,'shoulders.':1,'power':1,'that':1,'reasons':1,'jaws':1,'magnetic':1,'radiation':1,'tendency':2,'evidence':2,'feet':1,'enough':2,'artistic':2,'currents':1,'the':1,'.':2,'carapace':1,'man':1},'interposed':{'a':1},'creeps':{'close':1},'ahead':{'of':1,'in':1,'.':1},'disclaimers':{'of':1},'vegetarian':{'the':1,'scooping':1,'or':1,'triassic':2},'whine':{'about':1},'experimenting':{'and':3,'mood':1,'of':1,'.':1,'as':1,'which':1,'in':1,'rises':1,'with':3,'or':1,'more':1},'unproved':{'hypothesis':1},'soldier':{'wounded':2},'amount':{'generation':1,'of':18,'.':1,'to':2,'which':1,'proportional':1},'successors':{'whatsoever':1,'would':1},'helps':{'to':4,'the':1,'us':1},'tides.':{'illustration':1},'family':{'and':2,'spawn':1,'cares':1,'of':4,'is':1,'perceive':1,'relations':1,'.':2,'124':1,'are':1,'life.':1,'one':1,'affection':1,'swimming':1},'requiring':{'to':1,'no':1},'ask':{'the':1,'.':1},'trained':{'police':1,'animals':1,'to':1},'globes':{'and':1,'of':2,'in':2},'spawned':{'or':1},'conventional':{'modes':1},'ash':{'by':1},'flaws':{'in':1},'discriminative':{'absorption':1},'0':{'earth':1,'venus':1,'4':1},'revelation':{'of':1},'eye--we':{'have':1},'contains':{'about':1,'several':1,'an':1,'no':1,'billions':1,'.001':1,'.':1,'as':1,'ingested':1},'bask':{'on':1},'almost':{'all':5,'constant':1,'suddenly':1,'certain':3,'universal':1,'bound':1,'noisy':1,'confined':1,'see':1,'grazing':1,'at':1,'invisible.':1,'impossible':1,'wholly':1,'uncatchable':1,'as':3,'incredible':1,'cylindrical.':1,'exclusively':1,'surpassed':1,'to':1,'black':1,'girdling':1,'automatic.':1,'circular':1,'complete':1,'any':1,'formed':1,'completely':1,'sagacious':1,'nothing':1,'unique':2,'hairless':1,'a':2,'perfectly':1,'wise':1,'instantaneously':2,'perceptible':1,'no':3,'equal':1,'daily':1,'conquered':1,'ready-made':1,'invisible':2,'squirrel-like':1,'say':1},'unpleasant':{'expressions':1},'vi':{'evolution':1,'.':3},'taken':{'a':1,'by':5,'from':1,'generously':1,'for':1,'that':1,'into':2,'as':1,'.':1,'to':3,'charge':1,'at':7,'in':5,'the':2,'more':1,'any':1,'nearly':1,'out':1},'injury':{'or':1},'temps':{'would':1},'polyps':{'whose':1,'each':2},'stock--an':{'anthropoid':1},'lichens':{'and':1,'on':1},'globe.':{'for':1},'ejected':{'in':1},'site':{'and':1,'www.gutenberg.org':1,'of':2,'includes':1,'which':1,'often':1},'instrumental':{'music':2},'tapeworm':{'certainly':1},'moistened':{'finger-tip':1},'broke':{'up':1},'mounted':{'on':1,'equatorially':1,'batteries':1,'that':1},'producing':{'a':1,'visible':1,'x-rays':1,'an':1},'weathering':{'of':2,'now':1,'have':1},'cremated':{'every':1},'helped':{'by':2,'success':1,'us':1},'rotifer--we':{'are':1},'wafts':{'into':1},'sweeps':{'this':1},'egg-shell':{'and':1,'just':1},'moisture-laden':{'air':1},'nine':{'and':2,'thousand':1,'months':2,'to':1,'moons':1,'cases':1,'hundred':2},'propounded':{'to':1},'spontaneous':{'generation':1,'breaking':1,'above':1,'change':1},'history':{'an':1,'for':1,'no':1,'of':25,'museum':4,'museum.':2,'back':1,'behind':2,'which':1,'in':1,'.':13,'called':1},'f3':{'.':1},'pushes':{'itself':1},'gas.':{'but':1,'illustration':1},'stinging':{'animals':1,'cells':2,'tentacles':1,'lassoes':1},'eclipsed.':{'illustration':1},'pushed':{'will':1,'along':1,'it':1,'out':1},'sun-spot':{'of':2,'is':1},'phrase':{'and':1,'project':4,'has':1,'.':1},'lacks':{'both':1},'species':{'and':1,'1859':2,'use':2,'waddle':1,'off':1,'descent':1,'e.g':1,'perhaps':2,'of':4,'is':1,'there':1,'discover':1,'.':2,'in':1,'represented':1,'what':1,';':2,'hitherto':1,'the':2},'firmly':{'and':1,'established':1,'on':1,'that':1,'.':1,'to':1},'viviparity':{'is':1,'.':1,'the':1,'naturally':1},'starting-point':{'of':1,'the':1,'they':1},'lithographic':{'stones':1},'surpassed':{'only':1,'expectations':1},'friction.':{'but':1},'freezing-point':{'of':1,'or':1,'.':2},'surpasses':{'that':1,'in':1},'daughter-cells':{'into':1},'millikan':{'s':2},'ft':{'.':2},'tried':{'a':1,'and':1,'for':1,'one':1,'to':1,'as':1},'fv':{'contains':1},'communicating':{'cells':1,'nerve-cell':1},'derived':{'energy':1,'from':3,'infinitely':2},'sneak':{'upon':2},'gestation':{'is':1},'triumphs':{'of':5},'consequence':{'of':2,'the':1,'has':1,'enormously':1},'tries':{'to':2},'invasion':{'of':3,'was':1,'due':2,'which':2},'horizontal':{'bar':1,'except':1},'inconceivable':{'distances':1,'ages':1,'.':1,'to':1,'numbers':2,'velocity':1},'a':{'limited':1,'hampton':1,'code':1,'partial':1,'skeleton':2,'remarkable':9,'defenceless':1,'magnetic':7,'varying':1,'focus':2,'month':1,'sequoia':1,'mild':3,'mile':4,'higher':12,'zinc':1,'sweep':1,'dish':1,'golf':2,'conservative':1,'carpet':2,'compact':1,'glimpse':5,'preformed':2,'chain':2,'physiological':3,'pouch':3,'young':4,'passage':1,'granular':1,'tail':2,'cradle':1,'microscopist':1,'stable':1,'fountain':1,'friendly':1,'trilobite':2,'descendant--the':1,'brown':4,'string':1,'deeper':1,'chameleon':4,'very':59,'sun-spot':1,'wave':2,'soapy':1,'smack':1,'graphic':1,'fan':1,'leisurely':1,'microbe':1,'tank':1,'difference':2,'continued':1,'feeble':1,'minute':4,'cool':1,'generalised':3,'sea-anemone':3,'speed':5,'respiratory':1,'beginning':1,'parrot':1,'naturalist':1,'stimulus':1,'skeletal':1,'shock':1,'list':3,'gun':1,'cloudy':1,'large':32,'farthing--contains':1,'swirling':1,'starlit':1,'key--a':1,'succession':1,'small':24,'lever':1,'perceptual':1,'pool':1,'pterodactyl':2,'veritable':3,'bull-terrier':1,'force':1,'meadow':1,'full-grown':2,'trend':2,'crow':2,'sea-squirt':1,'sensation':3,'crop':1,'milligram':1,'past':1,'widened':1,'second':27,'burrower':1,'subtle':1,'further':2,'estimated':1,'port':1,'theory':3,'blue':4,'cargo':1,'stately':1,'clock':1,'waning':1,'fine':7,'section':1,'gatepost':2,'crust':1,'lizard':1,'thickness':2,'cell':2,'reconstruction':2,'new':31,'falling':3,'row':1,'method':2,'multitude':4,'body':19,'condensed':1,'full':3,'trypanosome':1,'degree':3,'compilation':1,'loose':2,'birthplace':1,'fifteenth':1,'drawing':2,'plant-like':2,'protection':1,'tangent':2,'free':4,'separate':6,'tremor':1,'strong':8,'four-chambered':1,'teacher':1,'light-year':1,'sensory':2,'great':39,'substance':4,'survivor':1,'brilliant':3,'study':2,'larger':4,'slave':1,'second--more':1,'soldier':2,'simultaneous':1,'survey':3,'suggestion':4,'social':2,'real':1,'narrow':5,'pathological':1,'steady':1,'diameter':4,'showing':1,'land-crab':1,'useful':4,'secure':1,'halfpenny':1,'stimulus.':1,'discontinuous':1,'fauna--the':1,'loose-limbed':1,'layer':1,'marked':1,'decrease':1,'motor':1,'limb':1,'glance':1,'total':3,'unit':1,'fee':3,'lens':5,'vivid':1,'distinct':3,'revelation':1,'faint':1,'visit':1,'charge':2,'frog':7,'distributing':1,'few':40,'sample':1,'saucerful':1,'centre':1,'knoll':1,'diving-bell':1,'stage':2,'type':3,'more':14,'sort':15,'flat':1,'clever':1,'door':1,'rich':2,'conductor':1,'successful':1,'whirling':1,'screen.':1,'chimpanzee':1,'bodily':1,'fan-like':1,'moistened':1,'surface':1,'rabbit':1,'particular':6,'baby':1,'coyote':1,'hole':2,'hold':1,'rivalry':1,'fly':2,'rebounding':1,'frequently':1,'flora':1,'word':1,'primate':1,'needle':1,'work':2,'stroke':1,'cat':3,'mammalian':1,'suggestive':1,'sudden':3,'thin':1,'universe':1,'chin':2,'fauna':2,'male':2,'history':2,'decorative':1,'continuity':1,'reflector':1,'stream':6,'process':5,'climax':3,'share':1,'parachute':3,'beautiful':3,'minimum':2,'caution':2,'sense':5,'pond':3,'story':1,'hydrogen':1,'species':1,'masterly':1,'terrestrial':2,'huge':8,'united':1,'winter':3,'defective':1,'keen':1,'rather':3,'finger-post':1,'discussion':1,'coot':1,'copious':1,'solidifying':1,'far':1,'hot':1,'pair':2,'forest':2,'fourth':4,'widespread':1,'native':1,'civilisation':1,'stock':3,'mould':1,'yellowish':1,'plant':1,'dull-red':1,'maternal':1,'scion':1,'candle;':1,'thickened':1,'tse-tse':2,'spot':1,'movable':1,'collection':1,'narrow-beaked':1,'diagram':3,'deep-sea':1,'lot':2,'lattice-work':2,'bird-dropping':3,'horizontal':1,'coloured':1,'spiral':7,'man':8,'a':1,'free-swimming':1,'short':9,'natural':2,'liquid':5,'conscious':1,'light':1,'projecting':1,'complexity':1,'green':4,'skilful':1,'deterioration':1,'basket':1,'diary':1,'coral-snake':1,'dream':1,'wing':1,'hen-pigeon':1,'wine':1,'plaice':1,'sperm-cell':1,'shield':1,'feather-wing':1,'double-breather':1,'gradual':6,'minnow':2,'billion':2,'cross':1,'brain':2,'stile':1,'paper':2,'thinning':1,'cold':1,'still':1,'tendency':4,'bunch':3,'chemical':6,'some':2,'group':4,'fit':1,'positively-electrified':1,'glowing':1,'roving':1,'better':2,'window':1,'permanent':1,'microscopic':1,'vast':6,'tubeful':1,'precipitate':1,'main':1,'puzzle':1,'finer':1,'non':1,'good':19,'return':1,'greater':6,'fragment':2,'safe':1,'hunter':1,'number':19,'band':2,'caterpillar':2,'billiard':1,'flint':1,'snake':1,'stout':1,'half':9,'foot':5,'lifelong':1,'day':2,'bank':1,'successor':1,'bony':2,'rocky':2,'profound':1,'mastery':4,'degree.':1,'male-producing':1,'potassium':1,'lifetime':1,'seashore.':1,'hundredth':1,'jellyfish':3,'promise':1,'creature':4,'meal':1,'predatory':1,'turtle':2,'week':3,'molecule.':1,'mental':1,'beginner':1,'map':1,'scanty':1,'garment':6,'fish':6,'hard':1,'spider':7,'related':1,'solution':1,'ball':1,'year':5,'laboratory':1,'first-class':1,'special':2,'magnet':7,'flower':2,'lobster':1,'truly':1,'pigeon':3,'day.':1,'time.':1,'race':2,'flattening':1,'portentous':1,'wide':2,'mammal':1,'brilliantly':1,'sluggish':1,'red':6,'common':12,'foundation':2,'fly.':1,'thrush':1,'belief':2,'many-celled':1,'zoological':1,'southern':1,'million':13,'little':31,'possibility':2,'quite':1,'paralysing':1,'backboneless':2,'reason':1,'lump':1,'hollowed-out':1,'plague':1,'region':2,'cough':1,'marine':3,'wall':3,'monkey':6,'vestige':3,'unique':3,'fixed':2,'yard':1,'hostile':1,'rule':4,'perceptible':1,'moment':6,'british':2,'thing':1,'length':1,'keel':1,'place':2,'nebula':7,'tempting':1,'consequence':1,'weakling':1,'user':2,'blind':3,'copper':3,'sheep-driving':1,'limestone':2,'surviving':1,'striking':7,'spoken':1,'wasp':1,'prehistoric':2,'powerful':4,'scene':2,'sack':1,'system':3,'well-known':1,'fertilised':1,'light-brown':1,'lighter.':1,'spanish':1,'twig-like':1,'ring':2,'tangle':1,'cogged':1,'romance':1,'hood':1,'speck':1,'sheep':1,'city':1,'given':1,'fuller':1,'temperature':1,'swarm':2,'leading':1,'brisker':1,'wing-span':1,'colossal':1,'nebular':1,'wonderful':6,'ton':3,'too':1,'storm':1,'periwinkle':1,'white':7,'compartment':1,'final':1,'friend':2,'low':7,'sex-call':2,'million.':1,'shell':4,'vigorous':1,'fraction':1,'starfish':2,'that':1,'tool':2,'shallow':1,'japanese':3,'crevice':1,'vegetarian':2,'reflecting':1,'zeppelin':1,'somewhat':1,'rifle':4,'prodigious':3,'copy':4,'photographic':3,'peculiar':5,'positively':1,'population':1,'distance':6,'bodyguard':1,'hundred':13,'third':6,'body.':1,'double':1,'tree':7,'rate':2,'medley':1,'bee':2,'youth':1,'matter':9,'legacy':1,'treasure-house':1,'recapitulation':2,'gigantic':4,'steep':1,'distinguished':1,'sublime':1,'collecting':1,'brittle-star':1,'withered':1,'modern':4,'defect':2,'glass':4,'direct':1,'rat':1,'ramifying':1,'sharp':1,'manner':2,'uganda':1,'gaseous':3,'breezy':1,'slab':1,'dozen':4,'conspicuous':1,'female--first':1,'convenient':1,'speculative':1,'shore':1,'soap-bubble':1,'silvery':3,'walk':1,'fish-eater':1,'high':8,'useless':1,'satisfactory':1,'long-drawn-out':1,'soap':4,'propitious':1,'butterfly':1,'memory':1,'continuous':2,'multiple':1,'normal':1,'coconut':1,'leaf.':1,'molecule':5,'boiling':1,'reef-building':2,'regular':1,'connected':1,'non-protrusive':1,'device':1,'coin':1,'hide-and-seek':1,'model':5,'wind.':1,'refractor':1,'known':1,'so-called':1,'piping':1,'thigh-bone':1,'surprising':1,'washerwoman':1,'mobile':2,'heartening':1,'clear':4,'later':6,'metal':1,'dog':6,'wasp-like':2,'tooth':1,'pipe':1,'short-lived':1,'reputation':2,'mammoth':2,'principle':1,'foster-mother':1,'distinctive':2,'velocity':3,'typical':1,'salt':1,'moon':1,'night.':1,'quantity':1,'refund':5,'selected':1,'particularly':1,'sparrow':3,'visitor':1,'manifestation':3,'skin-wing':1,'rotating':2,'bright':1,'shore-pool.':1,'seaweed':1,'constituent':1,'velvety':1,'corner':2,'pill-like':1,'uniform':4,'feat':1,'hustler':1,'staff':1,'current':4,'giant':4,'longer':1,'latent':1,'knowledge':1,'copyright':2,'series':6,'nervous':2,'less':2,'proportion':1,'jolt':1,'fluid':1,'considerable':12,'fox-terrier':1,'winged':1,'bush':1,'going':1,'black':1,'meteorite':1,'pretty':1,'spice':1,'female-producing':1,'ball-room':1,'plate':2,'single-chambered':1,'loss':2,'well-advanced':1,'means':5,'solution.':1,'familiar':1,'vascular':1,'sunny':1,'kind':8,'warm-blooded':1,'pocket':1,'whistle':1,'b':1,'roundabout':1,'measured':2,'silk':1,'spur':1,'live-and-let-live':1,'target':1,'flywheel':1,'bar':1,'progressive':2,'covering':1,'cry':1,'median':2,'violent':4,'doubled':1,'bird':11,'microscope':1,'groove':1,'bison':2,'troop':1,'memory-image':1,'freshwater':2,'web-wing':1,'human':5,'fascinating':1,'habit':1,'flash.':1,'nut':1,'globe':1,'canine':1,'richer':1,'relative':1,'computer':1,'result':2,'frog-like':1,'close':2,'luminous':3,'nocturnal':1,'wonder':1,'peanut':1,'shower':3,'crown':1,'wire':2,'capacity':3,'probable':1,'crooked':1,'subsequent':1,'century':1,'monstrous':1,'definite':6,'seventieth':1,'case':3,'state':10,'proof':1,'hiss':1,'promised':2,'progress':1,'mouthful':1,'perfectly':1,'lethargic':1,'crookes':2,'measurable':2,'notice':1,'recently':1,'cauliflower':1,'parental':1,'fold':1,'screen':3,'weak':2,'dome':1,'veil':1,'rapid':3,'conflagration':1,'waste-product':1,'flowering':1,'swift':2,'problem':2,'colonisation':1,'deep-water':1,'drum':2,'cliff.':1,'country':4,'pre-material':1,'strange':2,'waterfall':2,'quadruped':1,'sensitive':1,'connection':1,'grain':4,'mane':1,'retrograde':1,'lash':1,'comet':4,'passing':1,'whole':8,'humanoid':2,'photograph':9,'stony':1,'cooling':1,'dago':1,'point':3,'simple':9,'continuation':2,'colony':3,'donkey':1,'tapeworm':1,'height':8,'newborn':1,'moot':1,'written':1,'learning':2,'path':2,'greenish':1,'sea-cucumber':2,'hermit-crab':1,'grazing':2,'millimetre':2,'dwindling':3,'deep':1,'basis':2,'tremendous':3,'prelude':1,'damp':1,'tiny':5,'legend':1,'protozoon':1,'reduction':1,'much':5,'newt':1,'certain':18,'reflective':1,'feather':1,'reflex':3,'board':1,'firm':2,'box':2,'direction':1,'penny':2,'corresponding':1,'squirrel':1,'wood-snail':1,'brush':1,'thousand':15,'gas':4,'search':1,'spectrum':1,'coherent':1,'representative':2,'child':3,'laying':1,'careful':3,'land':1,'sound':3,'specialised':1,'novel':3,'conception':1,'remote':1,'solid':4,'plain':3,'straight':3,'prominence':1,'reminiscence':1,'form-resemblance.':1,'technical':1,'while':3,'teaspoonful':1,'biped':3,'voice':2,'cock':1,'guide':1,'mistake':2,'key':2,'food-signal':1,'pound':3,'project':5,'crowning':1,'moth':1,'it':1,'bipedal':1,'quiet':1,'tell-tale':1,'brake':1,'in':1,'twig':2,'simian':6,'property':1,'receptacle':1,'floating':1,'helmet':1,'different':5,'shooting':1,'descent':1,'trial':1,'domesticated':3,'roman':1,'check':1,'member':2,'motley':1,'unity':3,'complex':2,'diplodocus':1,'widely':1,'grand':1,'heavier':1,'web':1,'relatively':5,'yucca':1,'specimen':1,'difficult':2,'wheel':3,'satellite':1,'current.':1,'temporary':2,'cubic':3,'nest':8,'collie':1,'hand':2,'running':1,'dynamo.':1,'moving':1,'delicate':2,'climbing':1,'whale':4,'railway':1,'single':15,'destruction':1,'lower':7,'suitable':1,'stupendous':1,'flattish':1,'weapon':1,'disembodied':1,'tentacle':1,'skull-cap':1,'spoonful':1,'glorious':1,'partner':1,'position':3,'the':1,'reward':1,'musical':1,'left':1,'summer':2,'manifold':2,'kettle':4,'canal':1,'bristle':1,'being':1,'sporting':1,'newton':1,'morsel':1,'loaf':1,'three-chambered':2,'disguise':1,'steamer':1,'victim':1,'touch':1,'jackal':1,'rushing':1,'previous':6,'blow':1,'tailless':1,'disturbance':1,'wedge-shaped':1,'hint':2,'general':5,'bell':2,'master-key':1,'pitcher-plant':1,'silver':1,'straw':1,'spread':2,'transformed':2,'galloping':2,'ray':7,'5':1,'room--pour':1,'transformation':2,'finder':1,'kingdom':1,'puzzle-box':1,'nightjar':1,'fire':2,'format':1,'big':11,'couple':1,'knife-blade-like':1,'period':8,'dark':2,'cromagnon':2,'fusion':2,'royalty':1,'god.':1,'background':1,'vacuum':8,'text-book':1,'world':1,'part':1,'crusher':1,'vague':1,'name':1,'desire':1,'satisfaction':1,'necessary':1,'dislodged':1,'particle':2,'cock-pigeon':1,'signal':2,'performing':1,'sound--':1,'diffraction':1,'specific':2,'soup-plate':1,'vortex':1,'cotton-reel':2,'security':2,'soft':2,'replacement':3,'mathematical':1,'reaches':1,'right':2,'trained':1,'people':1,'prolonged':1,'process--a':1,'plausible':1,'wattle':1,'fully-formed':1,'library':3,'muscle-fibre':1,'sponge':1,'pack':1,'mighty':4,'second.':4,'mirror':4,'diving':1,'battalion':1,'bigger':1,'transparent':1,'saucer':1,'savage':1,'lung.':1,'dense':1,'calculating':1,'prolific':1,'curious':3,'broad':1,'tube':4,'footing':1,'fox':1,'nook':1,'favourite':1,'critical':2,'mutation':1,'changeful':1,'starch':1,'repeopling':1,'transmutation':1,'trap':1,'beetle':1,'knitting-needle':1,'thunderstorm':1,'reasonable':2,'power':2,'slight':3,'notable':4,'pupil':1,'cork':1,'life-or-death':1,'step':1,'caricature':1,'chick':1,'peer':1,'tidal':1,'revolution':3,'chapter':2,'plastic':1,'stone':5,'quarter':4,'central':1,'cigarette':1,'heat-measuring':1,'of':1,'biscuit':1,'bit':3,'slender':1,'greatly':1,'nucleus':5,'bright-green':1,'basin':1,'provisional':1,'pre-human':1,'swimming':1,'heavy':1,'primitive':2,'whole.':1,'cell-wall':1,'predominance':1,'colour':2,'variable':1,'wrack':1,'lung':2,'lively':1,'female':4,'cultivated':1,'pivot':3,'.':16,'telescope':3,'strangely':1,'minute.':1,'weight':2,'well-developed':1,'wonder-horse':1,'grave':1,'tennis':1,'question':1,'reindeer':1,'long':27,'fight':1,'continental':1,'standstill':1,'sea-spider':1,'double-armed':1,'hundred-millionth':1,'house':2,'bubble':2,'hare':1,'bud':1,'greyish':1,'medium':3,'relic':1,'complete':2,'form':2,'voracious':1,'magnificent':1,'registered':2,'converse':1,'neanderthal':1,'triangular':1,'mysterious':1,'cloud':1,'billion.':1,'game':2,'dead':7,'boon':1,'sprinkling':1,'line':9,'true':5,'dull':5,'versatile':1,'luxuriant':1,'continuance':1,'minnow--the':1,'rush':1,'partitioned':1,'genealogy':1,'flood':1,'characteristic':4,'spectroscope':1,'purpose':1,'maximum':3,'supple':1,'planet':2,'crystal':1,'growth':2,'limit':1,'centenarian':1,'mature':2,'monument':1,'soldering':1,'water-bag':1,'distribution':1,'piece':15,'similar':3,'leaf':7,'strongly':1,'stock--an':1,'constant':3,'flow':5,'universal':2,'measure':1,'brightly':1,'whelk':2,'sticky':1,'scientific':1,'diamond':4,'well-defined':1,'leptocephalus.':1,'home':5,'sheath':1,'ship':1,'horse':5,'living.':2,'curtain':1,'film':2,'physical':2,'water-filled':1,'brick':1,'variety':5,'glacier':1,'way':6,'there':1,'prerogative':1,'fruit-laden':1,'portion':1,'reality':2,'neolithic':1,'field':3,'prism':2,'setting':2,'stagnant':1,'branch':5,'most':6,'puppy':1,'superfluous':1,'sufficient':2,'10':1,'polar':1,'quintillion':1,'star':10,'phoenix':1,'living':3,'shelter':1,'flinty':1,'preceding':1,'planet.':1,'drift':1,'prepared':1,'choice':1,'scale':1,'recent':5,'fresh':2,'rolling':1,'yorkshire':1,'hair':1,'score':1,'sneeze':1,'concatenation':1,'source':2,'tree.':1,'vaseline':1,'meteor':1,'bivalve':2,'lead':1,'bullet':2,'dogma':1,'deep-seated':1,'movement-controlling':1,'yacht':1,'jelly':1,'drifting':1,'gorilla':2,'depth':1,'train':1,'mass':5,'fact':2,'time':17,'big-brained':1,'stick':1},'pithecanthropus':{'erectus':1,'erectus.':1,'.':1,'the':8,'was':1,'seem':1},'spectra':{'of':2,'six':1,'.':1,'corresponds':1,'36':1},'bugs':{'ever':1},'renewing':{'the':1},'deterioration':{'of':1,'the':1},'healthfulness':{'and':1},'egg':{'and':1,'a':1,'shed':1,'just':1,'for':1,'of':2,'is':1,'-cell':1,'should':1,'to':1,'which':1,'in':1,'depository':5,'signalling':1,'has':1},'chicks':{'peck':1,'had':1},'earthworm':{'is':1,'.':1,'1':1,'76':1,'s':2,'72':1,'half':1,'fragments':1,'or':1,'earthworms':1},'help':{'preserve':1,'them':1,'of':1,'flotation':1,'it':1,'to':2,'see':1,'produce':1,'in':2,'the':1},'reservoir':{'of':3},'hierarchy':{'of':1},'soon':{'a':1,'picked':1,'began':1,'it':1,'to':1,'as':1,'became':1,'realise':1,'learn':2,'learned':1,'has':1,'was':1,'appears':1,'partially':1},'indistinguishable':{'but':1},'held':{'closely':1,'to':1,'back':1,'together':2,'up':1,'their':1,'above':1,'by':1},'committed':{'to':1},'three-horned':{'skull':1},'kinetic':{'and':1,'energy':3},'liquefies':{'gases':1},'positively-electrified':{'body':1,'atoms':2},'tickings':{'of':1},'lateral':{'line':2},'solving':{'the':1},'teeming':{'.':1},'gentleness.':{'illustration':1},'absence':{'of':7,'or':1},'disclosed':{'by':1},'founders':{'of':1},'peanuts':{'which':1},'mammal--instinctive':{'aptitudes--power':1},'finer':{'world':1,'form':1},'evening':{'work':1,'star':1,'primrose':1},'food':{'and':10,'accentuated':1,'danger':1,'requiring':1,'into':1,'within':1,'it':1,'are':1,'in':3,'consists':1,'crisis':1,'note':1,'vacuole':1,'from':3,'for':2,'there':2,'.':2,'particles':2,'outside':1,'going':1,'was':1,'is':2,'on':1,'shelter':1,'but':1,'227':1,'with':1,'by':1,'enemy':1,'like':1,'largely':1,'many':1,'inside':1,'near':1,'without':1,'the':1,'or':3},'theory--the':{'structure':1},'pglaf':{'owns':1},'floating':{'plants':2,'and':1,'log':1,'sea-meadows':4,'dead':1,'buns':1,'seaweed':1,'in':1,'dust':1,'bacteria':1,'out':1},'anticipated':{'forty-one':1},'permissible':{'to':1},'foot':{'and':2,'flat':2,'of':2,'but':1,'high':2,'became':1,'long':1,'in':2},'feet':{'and':2,'four':2,'from':3,'just':1,'of':1,'whereas':1,'long':2,'.':5,'high':2,'deep':1,'7':1,'in':2,'or':1,'are':2},'stopper':{'of':1},'finite':{'or':1},'dulled':{'by':1},'occasions':{'we':1},'male-producing':{'egg':1},'enlarged':{'pectoral':1,'illustration':1,'in':1},'infer':{'this':1},'flowers--attractive':{'to':1},'stopped':{'until':1},'radial':{';':1,'animals':1,'canals':1},'neanderthalers--the':{'general':1},'dominating':{'the':1},'referred':{'to':3,'to.':1},'heavy':{'great':1,'blankets':1,'gas':1,'brain':2,'as':2,'complicated':1,'with':1,'ape':1},'transcribe':{'and':1},'matthew.':{'diagram':1,'1':1},'restless':{'inquisitiveness':2,'experimenting':1},'jaws':{'and':1,'shaped':1,'of':2,'.':1,'engulfing':1,'which':1,';':1},'down--the':{'day':1},'sulked':{'for':1},'energy.':{'sec':1},'ball':{'revealing':2,'and':1,'of':4,'found':1,'the':2,'or':1},'punitive':{'or':1},'trilobites--jointed-footed':{'antenna-bearing':1},'beyond':{'a':1,'even':1,'that':2,'this':1,'radium':1,'science.':1,'possibility':1,'its':1,'these':1,'which':1,'our':4,'the':6,'playing':1,'ordinary':1},'event':{'when':1,'seems':1,'than':1,'which':1},'oviparous':{';':1},'unsurpassed':{'gifts':1},'percepts':{'and':1},'crustacean':{'s':1},'surrounded':{'by':3},'abysses':{'and':1,'from':1,'of':1,'took':1,'.':1,'so':1,'are':1,'the':1},'america.':{'3':1,'2':1,'4':1,'6':1},'coincidences':{'.':1},'safety':{'on':1,'for':1,'of':3,'is':2,'within':1,'.':1,'until':1,'or':1,'first':1},'7':{'and':1,'palaeolithic':1,'inches':1,'why':1,'.':3,'000':1,'918':1,'1871':1,'250':1,'with':1,'the':2,'250000':1},'brownish':{'caterpillars':1},'sharp-eyed':{'enemies':1},'house-flies':{'and':1},'issue':{'of':2},'meteoric':{'matter':3},'metchnikoff':{'the':1},'drink':{'from':1},'inert':{'matter':2,'just':1,'in':1},'protruding':{'bag':1},'lights':{'as':1,'the':2},'schwalbe':{'has':1},'backboneless':{'stocks':1,'animals':3,'or':1,'animal':2},'reason':{'for':6,'to':9,'being':1,'of':2,'is':4,'in':1,'but':1,'.':1,'how':1,'--an':1,'i.e':1,'quite':1,'why':2},'base':{'and':1,'of':5,'an':1},'jaw.':{'illustration':1},'brightest':{'star':1},'put':{'a':2,'on':6,'her':1,'into':1,'out':2,'some':1,'it':3,'together':3,'two':1,'to':2,'together.':1,'zinc':1,'in':2,'forward':1,'our':1,'the':5,'themselves':1,'safely':1,'your':1,'evenly':1},'earliest':{'known':3,'remains':1,'inhabitants':1,'metal':1,'representatives':1},'algae':{'and':2,'symbiosis':1,'.':1},'revolutionary':{'changes':1},'capacities.':{'body':1},'perceptible':{'to':1,'impression':1},'persuading':{'some':1},'tortoises':{'to':1,'from':2},'fifty-four':{'muscles':1},'american':{'killdeer':1,'monkey':1,'forests':1,'monkeys':1,'.':1,'minnows':1,'astronomer':1,'tree-frogs':1,'continent':1},'conquered.':{'it':1},'daisy':{'are':1},'undergo':{'disintegration.':1},'zoophyte':{'called':2,'.':2},'assign':{'no':1},'most...':{'.':1},'partnerships':{'between':1},'knots':{'subsequently':1,'or':1,'smoke':1,'for':1},'probability':{'is':4,'that':1,'the':1,'in':1},'encoding':{':':1},'knocking':{'off':1},'reflected':{'rays':1,'from':3,'back':1,'to':1,'depends':1,'through':1},'antiquity':{'and':1,'of':3,'the':1,'with':1},'moorings':{'.':1},'elder':{'brothers':1},'unexpected':{'manoeuvres':1},'incubated':{'in':1},'warty':{'chameleon':3,'creature':1},'1871':{'when':1},'mist':{'that':1},'miss':{'gertrude':1,'the':1,'part':1,'frances':1},'ninth':{'printing':1},'foraminifera':{'and':1,';':1,'each':2},'utters':{'instinctively':1},'horse':{'and':7,'eohippus':1,'use':1,'merychippus':1,'orohippus':1,'of':2,'showing':2,'pliohippus':1,'running':1,'.':1,'shunting':1,'will':1,'s':1,'mesohippus':1,'a':1,'have':1,'which':1,'has':1,'beginning':2,'or':1,'is':1},'pelagica':{'this':1,'125':1},'findings':{'of':1},'interwoven':{'with':1,'that':1},'obedience':{'to':1},'483.3':{'11.86':1},'wonderful':{'instruments':1,'modern':1,'cluster':1,'devices':1,'colour-scheme':1,'fabric':1,'to':1,'system':1,'.':1,'instrument':3,'new':1,'elements':1,'intellectually':1,'revelations':1,'photograph':1,'corona':1,'manifestations':1,'mass':1,'source':1,'piece':1,'changes':1,'discoveries':1,'x-ray':2,'result':1},'gibraltar':{'professor':1,'so':1},'einstein.':{'illustration':1},'scheme':{'represents':1,'of':1},'danger-call':{'of':1},'passed':{'and':5,'perhaps':1,'down':1,'to':1,'as':1,'through':3,'the':2,'by':1,'before':2},'pure-bred':{'wheat':1},'measurable':{'.':1,'quantity':2},'basal':{'appetites':1},'1918':{'flew':1,'upwards':1},'blindly':{'and':1},'1911':{'showing':1,'23':1},'half-made':{'wing':1},'1912':{'.':1,'in':1},'1914':{'this':1,'and':1,'41':1,'an':1},'1917':{'a':1,'we':1,'upwards':1},'grew':{'to':1,'wheat':1,'by':1,'up':1},'tunic':{'of':1},'kindly':{'emotions':1},'grey':{'red':1,'in':1},'haddock':{'or':1},'intensities':{'of':1},'toward':{'the':2,'death':1,'increasing':1,'us':1},'stickleback':{'enters':2,'being':1,'of':1,'is':2,'s':1,'making':2},'fisheries':{'in':1},'withered':{'leaf':1,'herbage':1},'clerk-maxwell':{'james':1,'246':1,'one':1},'bells.':{'in':1},'alongside':{'of':3},'juice':{'has':1},'sentences':{'of':1,'were':1},'events':{'included':1},'concentration':{'than':1},'organs':{'and':1,'of':1,'pass':1,'but':1,'.':4,'in':1,'throughout':1,'or':1},'gathering':{'light':1,'some':1,'round':1,'to':1,'of':1},'atoms--the':{'energy':1,'discovery':1},'lid':{'.':1},'lie':{'on':1,'disregarded':1,'outside':1,'low':1,'in':1,';':1,'at':1},'u.s':{'.':2},'speculative':{'and':1,'picture':1,'point':1},'flaming':{'jets':1,'hydrogen':2},'scotland':{'1920':1,'s':1,'since':2,'were':1,'.':1},'camouflage':{'and':1,'a':1},'lit':{'our':1,'the':1,'by':1,'up':1},'relieved':{'of':1,'by':2},'labour':{'and':2,'becomes':1,'has':1,'set':1,'.':1},'lip':{'of':1,'the':1,'which':1,'but':1},'useless':{'vestige':1,'responses':1,'movements.':1,'halfpennies':1,'heat':1,'movements':2},'command':{'travels':2},'presently.':{'regions':1,'if':1},'embryological':{'evidence':1,'proof':1},'towards':{'a':1,'what':2,'or':1,'becoming':1,'us':2,'fruit-eating':1,'him.':1,'flesh-eating':1,'harmony':1,'nobler':1,'the':17,'increasing':1,'clothing':1,'its':2,'those':1},'figures--bison':{'reindeer':1},'quote':{'professor':1,'the':1},'literal':{'demonstration':1,'blood-relationship':1},'systems':{'comes':1},'indefinitely.':{'the':1},'eaten':{'or':1},'position':{'and':1,'would':1,'these':1,'of':3,'is':2,'.':1,'held':1,'as':1,'in':1,'invisible':1,'increasing':1,'where':1,'into':1},'alpha':{'the':2,'rays':1,'particle':1,'centauri':2},'approved':{'fashion':1},'19.--comet':{'september':1},'muscle':{'and':1,'for':1,'which':1,'blood-vessel':1},'evolution--factors':{'in':2},'prolongation':{'of':2},'mobile':{'ribs':1,'vehicle':1,'pigment-cells':1,'.':1,'water':2,'in':1,'tongue':1},'performances':{'and':1,'depended':1},'clear':{'and':2,'for':1,'that':8,'ideas':1,'illustration':1,'.':2,'water':1,'as':1,'without':1,'adaptation':1,'in':1,'passage':1,'why':2},'broadened':{'and':1,'out':1},'snapping':{'at':1},'25--giant':{'spiral':1},'electrons':{'and':7,'copper':1,'all':1,'being':1,'possessing':1,'move':1,'moving':1,'it':2,'an':2,'produced':2,'streaming':2,'as':2,'are':7,'in':6,'particles':1,'compose':1,'from':8,'would':1,'electricity':1,'flying':1,'circulating':1,'travel.':1,'.':11,'rushes':1,'to':2,'behind':1,'without':1,'therefore':1,'contained':1,'revolving':1,';':2,'has':3,'pass':1,'is':2,'do':1,'may':1,'circulated':1,'but':2,'263':1,'267':1,'revolve':1,'now':1,'spin':1,'a':1,'rush':1,'resulting':1,'receive':1,'leave':1,'into':1,'258':1,'across':1,'will':1,'continue':1,'so':1,'were':1,'become':1,'increase':1,'or':3},'foster-mother':{'hen':1},'velocity':{'for':1,'of':8,'sufficient':1,'.':2,'which':1,'beyond':1,'masses':1},'usual':{'interchange':1,'direction':1,'definite':1,'difficulty':1,'mode':1,'way':1,'shortness':1,'notion':1},'tubes':{'and':1,'.':1,'by':1,'until':1},'one-eighth':{'of':1},'phenomenon':{'of':1,'is':1,'.':1},'registers':{'the':1,'itself':1},'caries':{'hitherto':1},'velvety':{'skin':1},'stores':{'of':3,'nor':1},'heavens':{'we':1,'7':1,'being':1,'is':1,'.':5,'are':1,'constitutes':1,'which':2,'the':1,'more':1,'with':1,'along':1,'at':1},'164.78':{'34800':1},'wriggle':{'through':1,'up':1},'debts.':{'moreover':1},'with.':{'in':1},'betokens':{'a':1},'northern':{'hemisphere':1,'rhodesia':2,'spain':4,'lakes':1},'duncan':{'.':1},'series':{'of':13,'is':1,'e.g':1,'.':2},'distances;':{'the':1},'less':{'satisfactory':1,'secure':1,'striking':1,'expensively':1,'successfully':1,'powerful':1,'genial':1,'likely':1,'definite':1,'in':1,'radiation':1,'clearly':1,'protrusive':1,'prolific':1,'domed':2,'able':1,'.':2,'moist':1,'stable':2,';':1,'degree':1,'continuous':1,'accurately':1,'important':4,'strenuous':1,'known':1,'regular.':1,'than':17,'conspicuous':1,'aimless':1,'central':1,'fit':2,'brusque':1,'of':3,'steady':1,'severe':1,'promising':1,'the':1,'spontaneous':1},'darted':{'furiously':1},'orbits.':{'circling':1,'yet':1},'surveyed':{'.':1},'pretty':{'generally':1,'fluorescence':1,'pieces':1},'quadrupedal':{'fashion':1},'circle':{'this':1,'of':1,'here':1,'are':1,'round':3,'shows':1},'darwin':{'origin':1,'sir':1,'said':1,'showed':3,'charles':1,'56':1,'observed':1,'s':9,'greatest':1,'in':1,'the':3,'called':1},'ball-room':{'.':1},'dominant':{'spring':1,'reptiles':1},'meanwhile':{'the':1,'we':1,'it':1},'trees':{'a':2,'and':2,'like':1,'with':1,'of':1,'.':2,'where':2,'were':1,'the':1,'has':1,'was':1,'why':1},'famous':{'jesuit':1,'theory':1,'form':1,'of':1,'for':4,'book':1,'manchester':1},'feels':{'for':2},'combinations':{'of':1},'during':{'a':3,'her':1,'eclipses':1,'this':3,'many':1,'an':2,'these':1,'which':5,'the':19,'its':2},'molten':{'interior':1,'matter':1,'by':1},'birds.':{'during':1,'according':1,'it':1},'catches':{'a':1,'the':1},'intrude':{'on':1},'alteration':{'modification':1,'of':1},'flight.':{'illustration':1},'underlying':{'photosphere':1},'withdrawal':{'of':1},'hours--a':{'prodigious':1},'hobbled':{'with':1},'seventeen':{'and':1,'years':1},'religiosa':{'a':1,'138':1},'electro-magnet':{'and':1},'throwing':{'the':1,'off':1},'plausible':{'view':1},'culture':{'gave':1,'migrating':1,'.':1},'invisible.':{'the':2,'sec':1,'illustration':1},'close':{'and':1,'rapidly':1,'indeed':1,'enough':1,'together':1,'to':3,'resemblances':1,'contact':2,'at':1,'reproduction':1,'of':1,'resemblance':1,'by':2},'plankton.':{'hunger':1},'gravitation':{'that':1,'of':1,'is':1,'.':3,'to':1,';':1,'etc.':1},'probable':{'date':1,'age':1,'that':12,'period':1,'however':2},'plasticity':{'of':1,'.':2},'not-living':{'material':1,'materials':1},'tibet':{'indo-china':1},'seventieth':{'of':1},'educability':{'is':1,'but':1,'.':1},'won':{'most':1},'years.':{'and':1,'in':1},'probably':{'associated':1,'illustrates':1,'an':1,'not':1,'are':1,'begun':1,'in':2,'cloud':1,'profitable':1,'from':2,'adapted':1,'there':1,'when':1,'indicate':1,'much':2,'helps':1,'survive':1,'means':2,'lived':1,'that':2,'far':1,'safe':2,'clearer':1,'less':1,'connected':1,'represented':1,'during':1,'breeding':1,'intrinsically':1,'a':3,'did':1,'of':2,'taking':1,'preyed':1,'suggests':1,'points':1,'evolved':2,'the':3,'encased':1,'counted':1,'came':1},'conditions':{'and':1,'that':2,'this':1,'of':15,'when':1,'culminating':1,'.':5,'will':1,'while':1,'internal':1,'are':4,'they':1,'in':2,'reached':1,'the':1,'our':1},'aeons':{'of':1},'ps':{'.':1},'stagnation':{'.':1},'egg-cells':{'and':4},'fox-bat':{'with':1},'missing':{'an':1},'description.':{'it':1},'moults':{'three':1},'craters':{'and':1,'on':1,'indicated':1,'of':3,'.':1,'which':1},'ranked':{'amongst':1},'basalts':{'.':1},'invisible':{'and':2,'because':1,'star':1,'thread':1,'visible':2,'light':2,'gas':1,'against':1,'.':3,'particles':1,'to':1,'rays':1,'electrons':1,'but':1,'molecules':1,'waves':1,'world':1,'medium':1,'if':1},'both':{'jaws':2,'is':1,'in':1,'are':1,'paragraphs':1,'birds':1,'cases--marvellous':1,'from':1,'ways':1,'when':2,'.':1,';':1,'difficult':1,'eyes':2,'his':1,'kinds':1,'photography':1,'chimpanzee':1,'minnows':1,'adult':1,'cases':3,'with':1,'sides':2,'man':1,'on':1,'processes':1,'land':1,'these':3,'of':4,'hemispheres':1,'below':1,'time':1,'small':1,'the':2,'fertility':1,'herons':1},'humidity.':{'there':1},'gaunt':{'and':1},'greater--a':{'sudden':1},'sensitive':{'and':1,'period--the':1,'bromogelatine':1,'hairs':1,'no':1,'to':2,'that':1,'line':1,'than':3},'picture.':{'b':1,'illustration':2},'vaster':{'irregular':1},'experimental':{'plot':1,'discoverer':1,'study':1,'men':1,'character':1,'evidence':1,'behaviour':1,'initiative':1,'way':1,'embryology':1,'conditions':1,'devices.':1,'proof':1},'battery':{'consisted':1},'hewn':{'but':1},'whatever':{'be':1,'kind':1,'medium':1,'means':1,'advances':1,'colour':1,'number':1,'part':1,'way':1,'sets':1,'the':1},'chromosomes.':{'3':1,'5':1,'illustration':1,'6':1},'galileo':{'s':1,'who':1},'climbers':{'of':1,'in':1},'undulating':{'flashes':1},'revolutionising':{'our':1},'persecuted':{'.':1},'described':{'on':1,'later':1,'it':1,'one':1,'to':1,'as':3,'without':1,'stars':1,'in':4,'the':1,'.':1,'by':1},'stamp':{'of':2},'damp':{'meadow.':1,'weather.':1,'grass':1,'meadow-grass':1},'exert':{'this':1,'a':1},'geddes':{'and':1},'describes':{'the':1},'maintenance':{'of':1},'territory':{'we':1},'empty':{'available':1,'shell':2,'space':2,'of':1,'nest':2,'space--ether':1,'coco-nut':1,'infinite':1,'chambers':1,'the':1,'tubular':1},'jesuit':{'astronomer':1},'lived':{'on':1,'like':1,'for':1,'there':1,'.':1,'in':3,'100':1,'between':1},'partly':{'on':2,'because':9,'opened':1,'due':2,'accounts':1,'by':2},'success.':{'the':1},'intelligently.':{'intelligence':1},'freezing-point.':{'the':1},'exempt':{'status':2,'from':1},'permeating':{'the':1},'else':{'it':1,'soon':1,'in':2,'.':1,'seek':1,'mere':1},'lives':{'a':1,'on':2,'there.':1,'for':1,'inside':1,'together':1,'.':3,'at':1,'which':1,'in':4,'or':1},'liver':{'and':1},'magnetised':{'iron':1},'look':{'towards':1,'like':1,'for':3,'exactly':1,'.':1,'to':1,'at':4,'forward':2,'further':1,'precisely':1,'after':3,'more':1},'opportunity.':{'there':1},'ape-like':{'and':1,'eyebrow':1},'pace':{'sternly':1,'of':1},'while':{'and':1,'all':1,'contemporaneously':2,'energy':1,'some':1,'it':1,'one':1,'at':1,'zinc':1,'in':1,'our':1,'neanderthal':1,'her':1,'there':1,'two':1,'to':1,'we':1,'they':2,'others':2,'monkeys':1,'a':2,'on':1,'fleas':1,'these':1,'many':1,'this':1,'the':12,'similar':1},'ought':{'to':4,'definitely':1},'286':{'transformation':1},'mitchell':{'it':1},'guide':{'the':1,'him':1,'.':1},'pack':{'of':1},'albatros':{'fashion.':1},'forelegs':{'as':1},'selected':{'spot':1,'was':1},'dictum':{'that':1},'fed.':{'the':1},'overlooked':{'the':1},'geologists':{'to':1,'cannot':1},'reads':{'the':1,'like':1},'ready':{'to':4,'way':1},'simian':{'tribe.':1,'branch':1,'stock--physiological':1,'characters':1,'line':1,'type':1,'stock':5},'communal':{'life.':1},'predominates':{'.':1},'forewing':{'.':1},'belong':{'to':6,'as':1,'.':1},'unpromising':{'haunt':1},'shad':{'which':1},'grand':{'hardwood':1,'total':1,'.':1},'modification':{'or':1},'composition':{'of':3,'what':1,'was':1,'we':1},'clearness':{'and':1},'hind-leg':{'of':2},'used':{'on':1,'we':1,'for':6,'fire':1,'is':1,'up':2,'.':1,'to':14,'as':4,'threads':1,'in':10,'such':1,'the':1,'was':1,'by':5,'if':1},'temporary':{'and':2,'diseased':1,'nest':1},'suggestion':{'of':5,'that':2,'was':1,'.':1},'optic':{'nerve':1},'tube.':{'it':1},'u.s.':{'unless':1},'wilson':{'a':1,'observatory':2,'reflector':1,'45':1,'reflecting':1,'california':2,'observatory.':8},'000':{'and':1,'barrels':1,'miles':35,'years.':1,'pounds':3,'of':6,'times':3,'feet':1,'to':6,'000':20,'miles--eighteen':1,'are':1,'atoms.':1,'inch':2,'deg':2,'years':17,'bushels':2},'uses':{'it':1},'cleaning':{'the':1},'saucer-shaped':{'body':1},'assortment':{'of':1},'brussels':{'sprouts':1},'tufts':{'growing':1,'of':1,'in':1},'changed.':{'we':1},'luminescence':{'will':1,'makes':1,'that':1},'older':{'astronomers':1,'and':1,'loess':1,'yucca':1,'than':1},'spectrum.':{'that':1},'copper.':{'illustration':1},'consistence':{'of':1},'obviously':{'that':1,'much':1,'means':2,'desirable':1,'depends':1,'complex':1,'the':1,'must':1},'segmented':{'marine':1},'forms.':{'illustration':1},'calcutta':{'which':1,'.':1},'suddenness':{'the':1,'like':1},'scouring':{'a':1,'tide':1},'distances':{'and':1,'distance':1,'from':5,'of':3,'within':1,'deriving':1,'are':1,'which':1,'between':1,'the':1,'with':1},'alytes':{'not':1},'cave':{'in':2,'drawings':1,'northern':4,'.':1},'judgments':{'about':1,'expressed':1,'in':1},'migratory':{'flight':1},'overflows':{'over':1},'rabbit--who':{'by':1},'quarters':{';':1},'perforating':{'the':1},'planetoids':{'splashed':1,'or':1},'useful':{'and':1,'associations':2,'ready-made':1,'branches':1,'means':1,'pennies':1,'teeth':1,'law--senses':1,'to':6,'deposit':1,'advertisement':1,'in':3,'offices.':1,'law':1,'quality':1,'first':1},'praying':{'mantis':3},'informal':{'introductions':1},'possessors':{'to':1,'back':1,'than':1},'stock--physiological':{'proof--embryological':1},'debatable':{'questions':1},'remaining':{'on':1,'six.':2,'provisions.':1},'elver':{'at':1},'unravelled':{';':1},'march':{'23':2},'insert':{'here':1},'reptilian':{'splendour.':1,'mind--mind':1,'life':1,'mind':1,'features':1},'showing':{'a':10,'division':1,'seven':2,'him':1,'upper':1,'gradual':2,'that':1,'evolution':1,'marked':1,'.':1,'how':1,'various':2,'no':1,'under':1,'in':1,'variable':1,'what':1,'the':16,'many':1,'their':1,'trout':1},'game':{'of':4,';':1,'or':1},'wiser':{'than':1},'text-book':{'of':2},'damage':{'or':1},'distance.':{'illustration':1},'wings':{'of':3,'is':2,'turned':1,'it':1,'.':4,'suggests':1,'while':1,'are':3,'have':1,'in':1,'the':1},'translucent':{'blue':1},'ponds':{'and':1,'where':1,'they':1,'.':1},'fore-limb':{'and':1,'of':2,'is':1,'has':2,'transformed':1},'long-drawn-out':{'sublime':1},'pillar':{'to':1,'the':1,'parallel':1},'resorted':{'to':1},'holes':{'and':1},'manifest':{'themselves':1},'eel':{'and':1,'is':1,'early':1,'haddock':1,'anguilla':2,'ever':2},'popular':{'lectures':1,'astronomy':1,'idea':1,'sense':1,'interpreter':1,'estimation':1},'death-feigning':{'for':1},'minced':{'snail':1},'mathematical':{'discussion.':1,'astronomers':1,'genius':1,'points':1,'consequence':1,'astronomy':1,'reasoning':1},'wrack':{'behind':1},'cones':{'and':1,'to':1},'negative.':{'a':1},'creation':{'of':1,':':1,'when':1,'.':3},'some':{'pollen':1,'remarkable':1,'insects':2,'cromagnards':1,'muscle-fibres':1,'worms':1,'parts':4,'years':2,'volcanic':1,'cases':10,'knowledge':1,'hint':1,'interesting':1,'young':1,'improvement':1,'source':1,'writers':1,'black':1,'botanists':1,'deep-seated':1,'thousands':1,'dispute':1,'which':1,'food':1,'leisure':1,'dark':2,'they':1,'radio-active':1,'uncertain':1,'adventurous':1,'stimulus':1,'deficient':1,'miles':1,'truth':1,'small':2,'force':1,'people':1,'animals':4,'idea':2,'namely':1,'are':3,'measure':8,'disturbing':1,'nocturnal':1,'creatures':1,'respects':3,'organisms':1,'solemn':1,'anatomists':1,'eminent':2,'uniform':2,'fossil':1,'new':4,';':1,'twenty-five':1,'sluggish':1,'trout':1,'degree':2,'men':1,'lakes':1,'quite':1,'water':1,'extraordinary':1,'reason':1,'extent':5,'path':1,'canals':2,'strong':1,'great':2,'thirty':1,'of':55,'region':1,'undisguised':1,'aboriginal':1,'butterflies':1,'place':1,'deep-sea':1,'other':15,'mound-birds':1,'members':1,'striking':1,'simple':2,'fishes':3,'hermit-crabs':2,'carry':1,'ape':1,'little':1,'nebulae':2,'would':2,'harmless':1,'lizards':1,'unknown':1,'long':1,'way':5,'more':1,'sort':8,'that':1,'vanishing':1,'mammals':2,'explanation':1,'precision':1,'races':1,'particular':1,'prodigious':1,'primeval':2,'careful':1,'spirit':1,'task.':1,'150':1,'distance':2,'kind':5,'word':1,'solid':1,'theories':1,'nine':1,'were':1,'beautiful':2,'imaginative':1,'larger':1,'beetles':1,'process':1,'modern':1,'geologists':1,'states':1,'say':1,'have':2,'regulate':1,'species':2,'education':1,'considerable':1,'detail':1,'astronomers':4,'very':1,'strange':1,'electrical':1,'animal':1,'semi-fluid':1,'intelligent':1,'day':2,'fairly':1,'unimaginable':1,'kinds':2,'earlier':1,'delicacy':1,'secluded':1,'waves':1,'authorities':6,'such':2,'land':1,'dragon-flies':1,'surprising':1,'magical':2,'think':1,'fundamental':3,'time':1,'wood-snails':1,'eighty-odd':2,'bodies':1,'typical':1},'yolk':{'fully':1,';':1,'has':1,'y.s.':1,'.':1},'apes--gorilla':{'orang':1},'urgent':{'need':1},'lips':{'and':2,'four':1,'audibly':1},'economic':{'and':1},'besides.':{'interpretation':1},'nerve-fibres':{'one':1},'lingers':{'in':1},'body-mind':{'.':1},'universes':{'why':1,'comparable':1,'.':1,'like':1,'in':1},'bruising':{'the':2},'savage':{'nature':1},'nonproprietary':{'or':1},'fifty-millionth':{'of':1},'pitchblende':{'about':1,'which':1},'exceeding':{'the':1,'that':1},'competitions':{'arose':1},'pounding':{'breakers':1},'civilization':{'.':1},'sympathetic':{'ganglia':1,'colouring':1},'claimed':{'that':1},'knitting-needle':{'in':1},'eating':{'at':2,'one':1},'protrusible':{'tongue':1,'tentacles':1},'processing':{'or':1},'lakes':{'and':1,'there':1,'are':2},'stem':{'still':1,'diverged':1,'help':1,'goes':1,'.':2},'step':{'meant':1,'towards':1,'two-thirds':1,'which':1,'in':6,'toward':1,'was':3},'lasts':{'till':1,'through':1,'no':1},'become':{'equally':1,'words':1,'beautifully':2,'satisfactory':1,'an':1,'at':1,'sea':1,'in':3,'luminous':1,'living':1,'bipeds':1,'unavailable':2,'unavailable.':1,'burrowers':1,'silvery':1,'shorter':2,'permanent':1,'fatal':1,'more':3,'real':1,'yellowish':1,'separate':1,'secondarily':1,'invisible--just':1,'faintly':1,'steadied':1,'parr':1,'utterly':1,'not':1,'instinctive':1,'dissipated':1,'quite':1,'invisible.':1,'a':13,'organically':1,'perfectly':1,'like':1,'liquid':1,'of':1,'large':1,'the':2,'adapted':1},'abroad':{'during':1},'facility:':{'http:':1},'shine':{'very':1,'out':1},'faith':{'that':1},'76':{'photo':1,'the':1,'venus':1,'capella':1},'entailed':{'on':1},'prothyl':{'as':1},'warm-bloodedness':{'is':2},'four-footed':{'ancestry':1},'chaps.':{'illustration':1},'silence':{'and':1,'immense':1},'seeing':{'there':1,'it':1},'baboons':{'.':1},'visit':{'to':1,':':1,'http:':1},'within':{'into':1,'60':1,'as':2,'itself':2,'.':1,'their':2,'which':2,'themselves':1,'them':2,'his':1,'reach':1,'five':2,'90':2,'recent':1,'a':7,'about':2,'limits':1,'this':1,'30':1,'bounds':1,'reasonable':1,'the':20,'fixed':1},'libelled':{'as':1},'encircling':{'rampart':1},'one-millionth':{'of':2},'france':{'and':3,'in':3},'smells':{'indeed':1},'theory.':{'the':1,'while':1,'illustration':1},'statistics':{'worked':1},'feelers.':{'illustration':1},'renewal':{'.':1},'sea-snail':{'and':1,'.':1},'transcending':{'the':1,'anything':1},'placing':{'a':1,'the':1},'moseley':{'found':1,'s':1,'some':1},'heritage':{'not':1,'much':1},'spawning':{'none':1,'solution':1,'.':1,'beds':1,'are':1,'method':1},'revolving':{'very':1,'as':1,'electrons':1,'in':1,'round':1,'blades':1},'tortoise-shell':{'butterfly':1},'manufacture':{'and':1,'subtle':1,'much':1,'chlorophyll':1},'himself':{'and':1,'established':1,'educated':1,'the':1,'.':1,'in':1,';':1,'by':1},'registered':{'on':1,'trademark':2},'frost':{'and':1,'acting':1,'but':1},'torch':{'of':1},'shore-crab':{'is':1,'shows':1,'.':1},'properly':{'the':1},'authority':{'on':2,'thinks':1},'newer':{'loess':1},'hares':{'and':1},'dull':{'sheaths':1,'white':3,'red-hot':1,'red':1,'.':1},'zooelogical':{'discoveries':1},'lamp-shells':{'trilobites':1,'molluscs':1},'folk-ways':{'to':1},'drifters':{'the':1,'or':1,'plankton':1},'skull':{'and':6,'represents':1,'from':1,'then':1,'of':2,'is':2,'was':3,'.':3,'discovered':2,'looks':1,'which':1,'the':2,'with':1,'warns':1,'170':1},'circuits':{'as':1},'sifting':{'process':1,'.':1,'to':1,'continue':1,'which':3,'the':2,'by':1,'out':3},'foresight':{'and':1,'to':1,'means':1},'state--':{'radiant':1},'cautiously':{'out':1},'similar':{'palatable':1,'needs':1,'disturbance':1,'inference':1,'adaptations':1,'organisms':1,'sedimentary':1,'performances.':1,'processes':1,'results':1,'forms':2,'to':5,'experiments':1,'statements':1,'in':1,'things.':1,'disorders':1,'pieces':1,'conditions':1,'deposits':1,'stage':1},'non-living':{'sea-dust':1,'world.':1},'adults':{'of':1,'the':1,'like':1},'introducing':{'dust':1,'2':1},'metals':{'afforded':1,'would':1,'began':1,'but':1,'as':1,'were':1,';':1,'seem':1,'the':1},'unwise':{'to':1},'1894':{'in':1},'1895':{'sir':1,'roentgen':1},'1896':{'becquerel':1},'1890':{'that':1},'shown.':{'in':1},'kidney':{'filters':1},'cotton':{'packet':1,'were':1},'ancestors':{'a':1,'belonged.':1,'breathing':1,'on':1,'may':1,'of':5,'.':4,'which':1,'were':2,'during':1},'amounts':{'almost':1,'according':1},'heat.':{'recent':1,'illustration':1,'that':1},'prerogative':{'of':2},'mantises':{'which':1},'dissolved':{'away':2,'in':2,'salts':1,'out':1},'electrical':{'industries':1,'force':1,'installations':1,'nature':1,'influence':1,'energy':2,'phenomena.':1,'phenomena':2,'.':1,'cell':1,'attraction':2,'storm':1},'themselves.':{'illustration':1},'milk-glands':{'of':1},'dashes':{'round':1},'bodies.':{'4':1},'draw':{'water':1,'this':1,'a':1,'back':1},'clean':{'and':1},'calculating':{'boy':2},'crouching':{'bird':1,'lying':1},'potentialities':{'of':1},'triumph':{'that':1},'visits':{'us':1,'another':1},'frances':{'pitt':1},'william':{'king':1,'james':1,'bragg':2,'leche':2,'ramsay':1,'crookes':5},'astronomy.':{'ball':1},'chameleon':{'140':1,'attacked':1,'may':1,'is':2,'.':1,'s':1,'which':1,'in':1,'the':1,'inflated':1,'anolis':1},'does;':{'with':1},'cuttlefish':{'do':1,'or':4,'swimming':1},'structure':{'201':1,'and':3,'or':1,'would':1,'do':1,'far':1,'of':8,'is':1,'between':1,'mainly':1,'.':4,'adaptation':1,'which':1,'in':1,';':1,'has':1,'the':1},'independently':{'established':1,'darting':1},'correlated':{'with':1},'e':{';':1,'vivo':1,'.':9},'practically':{'a':1,'dates':1,'cosmopolitan':1,'anything':1,'certain':2,'extinguished':1,'all':1,'as':1,'every':4,'invisible.':1,'invisible':1,'the':1,'ready-made':1,'illimitable':1},'physics':{'and':2,'is':1,'.':1,'cannot':1,'so':1,'at':1,'has':1,'with':1,'are':1},'portentous':{'furnace':1,'event':1,'mines':1},'required':{'to':2,'five':1,'by':1,'thirty-five':1,'for':3},'resolving':{'to':1,'the':1},'orbit':{'to':1,'of':2,'round':1,'.':1},'utilised':{'to':1,'we':1,'by':1,'directly.':1},'depth':{'of':2,'the':1,'limit':1,'.':1},'night.':{'meteors':1,'higher':1},'utilises':{'the':1},'ignorant':{'of':2},'underrated':{'.':1},'berries':{'and':1},'requires':{'to':2,'the':1,'for':1,'ten':2},'sounded':{'by':1},'evenly':{'together':1},'gr':{'granules.':1},'cheerful':{'and':1},'34800':{'1':1},'go':{'and':1,'into':3,'back':4,'down':2,'through':3,'farther':2,'irresponsibly':1,'in':2,'out':2,'their':1,'up-stream':1,'since':1,'to':4,'too':1,'forward':1,'round.':1,'badly':1,'far':2,'free':1,'hand':1,'they':1,'a':1,'on':8,'fully':1,'straight':1,'up':1,'so':1,'deeply':1,'wrong:':1,'the':1,'round':2},'compact':{'little':2,'readily':1},'birthplace':{'after':1,'where':1,'.':1},'baron':{'cuvier':2},'arid':{'and':1,'summer':1},'suits':{'their':1,'the':1},'task.':{'quick':1},'friendly':{'home':1},'fond':{'of':3},'moribund':{'animalcules':1},'rebounding':{'branch':1},'1796':{'the':1},'miners':{'when':1},'wave':{'would':1,'thunder':1,'of':1,'.':1,'shapes':3,'forms.':1},'board.':{'the':1},'trough':{'to':1,'is':1,'in':1},'more.':{'there':1,'sec':1},'whirlpools':{'.':1,'in':1},'scrapers':{'gravers':1},'stiff':{'when':1,'tail-feathers':1},'positions':{'of':1,'towards':1,'so':1,'.':2},'button':{'at':1},'michael':{'s':1,'hart':1},'hive':{'bees':1},'tree.':{'the':1,'sec':1},'verdict':{'omne':1},'sedentary':{'plants':1,'sea-squirts':1,'sponges':1,'or':1,'types':1},'betelgeux':{'has':1},'deg.-34':{'deg':1},'teeth.':{'adaptations':1,'illustration':1},'dilute':{'substances':1},'booty':{'.':1},'detaches':{'a':1},'gumboil':{'too':1},'picked':{'them':1,'off':1,'it':1,'up':3},'creatures--the':{'first':1},'notwithstanding':{'our':1},'fishermen;':{'without':1},'plays':{'possum.':1,'upon':2,'its':1,'an':2},'paintings':{'on':2},'opaque':{'covering':1,'substances.':1,'substance':1,'with':1,'substances':2},'b-c.':{'older':1},'atoms--different':{'kinds':1},'cell':{'that':1,'to':1,'as':1,'in':2,'the':1,'has':1,'come':1},'prejudicially':{'affected':1},'experiment':{'and':1,'showed':1,'would':1,'that':1,'with':1,'.':4,'will':1,'2':1,'which':1,'in':1,';':1,'has':3,'was':2,'he':1},'poles':{'of':3,'especially':1,'.':1},'rotted':{'into':1},';':{'just':1,'indeed':1,'soon':1,'yet':3,'before':1,'copernicus':1,'interesting':1,'3':3,'to':2,'out-breeding':1,'4':2,'8':1,'his':1,'rational':1,'meanwhile':1,'food':1,'they':25,'not':1,'nor':1,'h':1,'where':1,'round':1,'energy':1,'some':4,'ourselves':1,'out':1,'even':2,'living':1,'what':2,'organisms':1,'its':2,'enough':1,'discovers':1,'7':2,'probably':1,'we':7,'here':1,'water':3,'others':2,'by':5,'on':4,'c':1,'of':2,'larger':1,'or':1,'simple':1,'ca':1,'one':3,'another':2,'mercury':1,'from':1,'there':11,'two':1,'thirdly':1,'2':4,'therefore':1,'6':2,'corresponding':1,'that':12,'ages':1,'but':39,'those':1,'he':3,'sound':1,'b':2,'mc':1,'this':3,'while':1,'r':1,'and':61,'almost':1,'thus':1,'it':51,'an':1,'as':1,'at':1,'in':17,'partly':1,'if':6,'perhaps':4,'foretells':1,'how':1,'5':2,'which':2,'9':1,'though':3,'gradually':1,'most':1,'man':1,'a':7,'lower':1,'short':1,'for':3,'sometimes':2,'so':1,'the':65},'completion':{'assuming':1},'melancholy':{'the':1,'in':1},'cellulose':{'walls':2,'but':2},'filings':{'on':1,'arrange':1},'commercial':{'redistribution.':1},'fifteenth':{'of':1},'arrow-worm':{'and':1},'following':{'short':1,'for':1,'that':1,'this':1,'list':1,'professor':1,'sentence':1,'definite':1,'up':2,':':1,'which':1,'each':1,'the':3,'stages':1},'boot.':{'sec':1},'collar-bone':{'which':1},'canals':{'and':2,'of':1,'running':1,'have':1,'.':2},'water-weeds':{';':1},'convert':{'even':1,'to':1,'nitrogenous':1},'indivisible':{'thing':1,'.':3,'particle':1,'they':1,'in':1},'anvil':{'a':1,'the':1,'could':1,'221':1,'.':1},'haunts':{'and':1,'both':1,'of':5,'there':1,'.':2,'untenable':1,'are':1,'in':1,'the':1,'or':1},'animalcules':{'especially':1,'which':1},'benevolence':{'which':2},'repel':{'one':1},'products':{'the':1},'stars--the':{'shape':1,'nebular':1,'age':1},'hearty--we':{'might':1},'stump-like':{'legs':1},'daybreak':{'and':1},'addresses':{'.':2},'danger':{'home':1,'but':1,'of':1},'foothold':{'and':2,'to':1,'in':2},'limited--there':{'are':1},'wit':{'of':2,'enough':1,'to':1},'vegetation--a':{'very':1},'singing':{'of':1},'cloud':{'and':1,'formations.':1,'of':1,'to':2,'32':1,'not':1,'makes':1,'or':2},'reflector':{'differ':1,'of':1,'.':1,'at':1,'instead':1,'the':1,'has':1},'remains':{'adjusted':1,'bring':1,'as':2,'are':1,'in':1,'unaltered':1,'to':1,'known':1,'that':1,'very':1,'occurred':1,'unfrozen':1,'164':1,'quite':1,'with':1,'man':1,'a':2,'obscure.':1,'of':7,'clear':1,'were':2,'found':4,'the':1,'fixed':1,'stationary':1,'consisted':2},'hydra':{'growing':1,'and':1,'72':1,'a':1,'many':1},'contentment':{'.':1},'crab':{'and':1,'then':1,'gets':1,'on':1,'these':1,'is':3,'continues':1,'soon':1,'to':1,'s':2,'116':1,'has':1,'prefers':1,'must':1},'vehicle':{'and':1,'of':2},'stage':{'and':1,'what':1,'or':1,'fastened':1,'like':2,'of':4,'is':1,'there':1,'.':1,'in':4,';':1,'its':1,'before':1},'depreciate':{'the':1},'started':{'the':1,'his':1,'with':1,'less':1},'becomes':{'a':4,'limited':1,'gradually':1,'feebler':1,'lead':2,'very':1,'radium':2,'hard':1,'uranium':1,'electrified':1,'possible':1,'shorter':1,'much':1,'impure.':1,'radiated':1,'negatively':1,'aware':1,'the':5,'great.':1,'more':4},'visibility':{'are':1,'but':1},'43.4':{'alpha':1},'rivalry':{'of':2},'huxley':{'regarded':1,'1825-95':2,'by':2,'called':1},'sea-floor':{'and':1,'a':1},'crosses':{'a':1,'the':2},'consort':{'with':1},'lapse':{'of':1},'averaged':{'off.':1},'recession':{'of':1},'3--the':{'moon':1},'meet':{'and':1,'exceptional':1,'this':1,'where':1,'their':1,'frequently':1,'the':3,'with':1},'nurture':{'habits':1,'seems':1},'drops':{'of':2,'as':1},'control':{'a':1,'of':2,'over':1,'in':1,'but':1,'.':1,'as':1,'each':1,'the':1},'corpuscular':{'theory':1},'escapes':{'this':1,'attention':1,'from':1,'by':1,'.':1},'escaped':{'and':1},'his':{'chariot':1,'magnetic':1,'actions':1,'hind-legs':1,'polish':1,'throne.':1,'previous':1,'pectoral':1,'limbs':1,'rapid':1,'disposal':1,'beagle':1,'kingdom.':1,'astonishment':1,'world.':1,'grip':1,'plate':1,'big':2,'navigable':1,'wives':1,'famous':1,'breast':1,'facial':1,'vacuum':1,'foot':2,'experiments.':1,'distrust':1,'science':1,'fertility':1,'teeth.':1,'ethical':1,'lowly':2,'infancy':1,'best--':1,'dead':1,'affiliation':1,'cost':1,'living':1,'pedigree':1,'tube':1,'fingers':1,'lowliness':1,'conduct':2,'origin.':1,'achievements':1,'theory':1,'business':1,'dental':1,'behaviour':1,'ancestry':1,'flanks':1,'eye':2,'tortoise':1,'conviction':1,'pursuits.':1,'messages':1,'interesting':1,'or':1,'origin':1,'own':3,'family':1,'bonnet':1,'erect':1,'god-like':2,'refined':1,'greatness.':1,'mental':2,'parentage':1,'fields.':1,'monkey':1,'own.':1,'brute':1,'long':1,'milieu':1,'observations':1,'greatness':1,'right.':1,'telegraph':1,'descent.':1,'head':3,'relationship':1,'bodily':2,'hole':1,'breast-pocket':1,'structure.':1,'encouragement.':1,'work':1,'individual':1,'more':1,'eyes':1,'domesticated':1,'everyday':1,'innings':1,'leisure-time':1,'electro-magnetic':1,'power':2,'faults':1,'reach.':1,'arguments':1,'answer':1,'stock':1,'development':2,'noble':2,'elbows':1,'social':1,'hand':1,'mouse-pupil':1,'mouth':2,'mate':2,'solidarity':1,'attempt':1,'observation':1,'charges':1,'starting':1,'chickens':1,'daily':1,'hypotheses':1,'fundamental':1,'tubes':1,'left':1},'pulling':{'things':1,'the':2},'sought':{'after':1,'out':1},'cave-men':{'of':1,'lived':1,'or':1,'show':1},'herring-gulls':{'lift':1},'embodiment':{'to':1,'or':2,'of':1},'defective':{'you':1,'work':1,'or':2},'digested':{'or':1},'confessed':{'that':2},'andes':{'.':1},'arrangement':{'of':4,'is':1,'there':1,'by':1},'solidifying':{'of':1},'located':{'on':1,'in':1,'at':2,'also':1},'sentiments':{';':1,'in':1},'instinctively':{'a':1,'recognize':1,'as':1,'for':1,'but':1},'re-use':{'it':2},'circular':{'magnetic':1,'orbit':1,'craters':1},'pink':{'mouth':1},'fostered':{'and':1,'not':1},'furiously':{'upon':1},'thunderstorm':{'we':2,'.':1},'trinil':{'in':1},'regrown':{'double.':1,'.':1},'sugar-bird':{'in':1},'free-swimming':{'larval':1,'larvae':1},'1.88':{'4230':1},'gulps':{'.':1},'conspicuousness':{'serves':1},'divided':{'their':1,'the':1,'into':5,'.':1},'immensity':{'of':1,'is':1},'least':{'meant':1,'a':3,'cold':1,'within':1,'600':2,'has':1,'interesting':1,'half':1,'there':1,'twenty':1,'one':1,'as':1,'of':2,'two':1,'in':1,'progress':1,'tremor':1,'.':2,'the':1,'by':1,'inclination':1},'astronomical':{'instruments':1,'society.':2,'instrument':1},'spots--they':{'are':1},'sperm':{'-cell':1},'boils':{'because':1},'primates':{'and':1,'sprang':2,'began':1,'soon':1,'.':1,'emerged':1,'in':1,'was':1},'including':{'climate':1,'shrews':1,'that':1,'some':1,'life':1,'legal':2,'obsolete':1,'checks':1,'but':1,'how':1,'the':5,'river':1,'outdated':1,'any':1},'obelia':{'68':1,'consisting':1},'converting':{'it':1},'facilitates':{'the':1},'brittle':{'spikelet-bearing':1},'avebury':{'s':1},'27-1':{'2':1},'outer':{'layers':1,'and':1,'stream':1,'space':1,'envelope':1,'one-mile':1,'crust':1,'surface':1,'crust.':1,'mile':1,'world':2,'ring':1},'exclusion':{'or':1},'thence':{'to':1},'up-stream':{'as':1},'masses':{'and':2,'of':6,'the':2,'or':1,'a':1},'water-weed':{';':1,'glued':2},'brook':{'of':1},'him':{'and':1,'partly':1,'of':1,'.':2,'how':1,'which':1,'in':1,'with':2},'registration.':{'illustration':1},'pre-dravidians':{'and':1},'master.':{'learning':1},'dead-leaf':{'butterfly':2},'popularly':{'known':1,'supposed':1},'shasta':{'daisy':1},'hills.':{'the':1},'rising':{'and':2,'from':1,'into':1,'sometimes':2,'water':1,'to':1,'in':1},'africa.':{'illustration':2},'stout':{'knitting':1},'hands':{'and':1,'did':1,'.':1,'in':1,'of':1},'front':{'and':3,'of':3,'door':1,'side':1,'.':1},'revealed.':{'even':1,'illustration':1},'masters':{'of':1},'f.e.s.':{'a':5,'diagram':1,'protective':1,'earthworm':1,'when':1,'hermit-crab':1,'hind-leg':1,'glass':1,'green':1,'new':1,'the':5,'trypanosoma':1,'venus':1},'mastery':{'of':5,'by':1,'.':1},'university':{'of':2,'library':3,'10':1},'plate-holder':{'on':1},'magnitude':{'and':2,'of':1,'what':1,'which':1},'mode':{'of':1},'pools':{'and':1,'of':2,'it':1,'dried':1,'which':1,'in':1},'evolution--how':{'it':1},'legions':{'of':1},'upward':{'and':2,'to':1,'at':1},'mare.':{'illustration':1},'map':{'of':2},'globe':{'and':1,'from':1,'like':1,'turns':1,'.':3,'will':1,'to':1,'bounded':1,'which':1,'was':1},'steadied':{'into':1},'mollusc':{'and':1,'s':1,'shells':1},'sands':{'of':2},'measure':{'be':1,'them':1,'for':1,'this':1,'speed':1,'explained':1,'it':1,'.':2,'how':1,'controlling':1,'unveiled':1,'dependent':1,'the':1,'with':1,'climb':1},'separating':{'the':1,'from':1,'positively-electrified':1},'special':{'protective':1,'vertical':1,'danger':1,'rules':1,'study':1,'protection':1,'interest':1,'make-up':1,'skin-leaves':1,'photographic':1,'properties':1},'143':{'protective':1},'ejecting':{'beta':1,'an':1},'vaporisation':{'of':1},'9.--the':{'great':1},'confess':{'to':1},'protoplasm':{'which':1,'flowing':1},'may':{'afterwards':1,'consider':1,'obtain':1,'rest':1,'bring':1,'go':2,'follow':2,'still':2,'find':1,'help':1,'29':2,'charge':1,'choose':1,'save':1,'swim':1,'do':1,'get':1,'read':1,'express':1,'mention':2,'not':4,'tend':1,'fitly':1,'realise':1,'contain':1,'become':3,'mean':1,'traverse':1,'set':1,'we':1,'see':1,'1924':1,'pass':6,'creep':1,'even':1,'by':1,'yet':1,'wriggle':1,'approach':1,'refer':1,'make':3,'be':124,'notice':1,'extend':1,'associate':1,'here':1,'qualify':1,'distinguish':1,'bask':1,'change':1,'convert':1,'keep':1,'credit':1,'place':1,'retain':1,'safely':1,'think':1,'elect':1,'divide':1,'conclude':1,'merely':1,'determine':1,'speak':4,'use':2,'raise':1,'prove':2,'there':2,'add':1,'.':1,'call':1,'therefore':1,'only':1,'form':2,'serve':1,'hear':1,'gain':1,'demand':1,'copy':2,'look':2,'remain':1,'suppose':1,'learn':3,'spawn':1,'give':3,'escape':1,'it':1,'say':3,'at':1,'have':27,'seem':3,'seek':1,'occur':2,'lie':1,'turn':2,'perhaps':1,'travel':1,'also':3,'take':1,'rise':1,'quote':1,'produce':2,'recognise':1,'assume':1,'well':3,'roughly':1,'spend':2},'time.':{'the':2,'illustration':1,'in':1},'pendent':{'whalebone':1},'cause':{'a':3,'and':1,'clouds':1,'of':2,'tiny':1,'chemical':1,'to':1,'the':1,'bodies':1},'achievements':{'of':2,'so':1},'fly.':{'the':1,'illustration':1},'that--':{'first':1},'withering':{'leaves':1,'leaf':1},'completely':{'disappear':1,'invisible.':1,'mysterious':1,'camouflaged.':1,'worked':1,'empty':1},'ancestry':{'of':2,'.':1,'but':1,'in':1},'egg-cocoons':{'in':1},'x':{'indicates':1},'mares':{'brought':1},'spongillidae':{'the':1},'hostile':{'way':1},'determining':{'the':1},'route':{'of':1},'times':{'and':4,'among':1,'smaller':5,'over':1,'it':1,'as':7,'thinner':2,'human':1,'in':3,'still':1,'from':1,'for':2,'whipping':1,'there':1,'when':1,'long':1,'.':2,'cooling':1,'until':1,'more':1,'we':2,'around':1,'that':6,'lizzie':1,'rise':1,'during':1,'emergence':1,'longer':1,'a':3,'faster':1,'of':3,'the':6,'round':1},'counterpart':{'of':1,'in':1},'keen':{'and':2,'a':1,'senses':1,'struggle':2,'are':1},'keel':{'on':1,'which':1,'for':1,'if':1},'apennines':{'have':1},'glories':{'of':1},'sargasso':{'sea.':1,'weed':2},'fertilises':{'these':1,'the':2},'baleen':{'whale':1},'possessing':{'the':1,'with':1},'powerful':{'a':1,'telescopes.':1,'muscles':1,'friar-birds':1,'leg':1,'strokes':1,'legs':1,'tides':1,'factors':1,'possible':1,'agencies':1,'magnet':1,'microscope':1,'current':1,'as':1,'.':1,'than':2,'lens':1},'disembodied':{'electricity':2,'atom':1},'fertilised':{'egg-cell':7,'egg':2,'ovum':2,'by':1},'light-brown':{'colour':1},'lighter.':{'the':1},'proterospongia':{'69':1,'one':1},'activity.':{'this':1},'precisely':{'the':2,'because':1,'controlled':1,'like':1},'quality':{'and':1,'which':2,'that':1,'of':4,'is':1,'.':2,'they':1,'in':1,'than':1},'suck':{'.':1},'long':{'slope':1,'golden':1,'strings':1,'afterwards':1,'weighs':1,'process':2,'series':1,'is':1,'ages':4,'it':2,'as':6,'gristly':1,'summer':1,'result':1,'another':1,'curved':1,'lifetime':1,'racial':1,'tubular':1,'arm':1,'before':3,'story':1,'gamut':1,'pedigree':1,'prehensile':1,'ones':1,'since':3,'.':4,'to':4,'tail':1,'low':1,'way':3,'time':2,'has':1,'red':1,'stilt-like':1,'ago':12,'begin':1,'run':2,'arboreal':1,'history':2,'inclined':1,'after':1,'body':1,'haunt':1,'ovipositor':1,'step':1,'journey':2,'threads':1,'with':1,'day':1,'chapter':1,'on':1,'and':3,'like':1,'stalks':2,'we':1,'the':1,'lizard-like':2,'face':2,'range':1,'branched':1,'period':2,'night.':1,'night':1,'periods':1,'rising':1,'tongue':1,'narrow':1,'summer.':1,'or':1,'pre-human':1,'are':1},'bears':{'very':1,'the':1,'in':2},'dove':{'and':1},'land--the':{'air.':1},'relations':{'and':1,'making':1,'of':1,'with':1,'to':1},'well-formed':{'when':1},'attach':{'to':1},'attack':{'it':1},'fishes.':{'eventually':1,'there':1,'cambrian':1},'declines':{'to':1},'wrapped':{'up':4,'it':1},'perfectly':{'still':1,'aerated':1,'straightforward':1,'circular':1},'final':{'spectrum':1,'.':1,'dispersion':1,'stable':1,'answer':1,'clue':1,'unification.':1},'circulate':{'round':1},'hydrosphere':{'.':1},'2-1':{'2':1},'rays--the':{'alpha':1},'exactly':{'like':1,'where':1,'equal':1,'the':2,'balance':1,'similar':1},'well-finished':{'statuettes':1},'stress':{'on':1},'lists':{'of':1},'feint':{'towards':1},'chemicals':{'which':1},'manipulation':{'of':1,'another':1},'natural':{'process':1,'spectrum':1,'rate':1,'leafy':1,'knowable':1,'size':1,'death':7,'inheritance.':1,'inheritance':2,'question':1,'to':1,'reduction':1,'therefore':1,'size.':1,'conditions':2,'resources':1,'surroundings.':1,'death.':1,'law':1,'death--procession':1,'reflex':1,'history':22},'waist':{'of':1},'photograph':{'a':1,'from':2,'reproduced':1,'of':11,'showing':4,'below.':1,'tied':1,'an':1,'note':1,'255':1,'attaining':1,'are':1,'taken':4,'the':3,'.':1,'shows':3,'clearly':1,'is':2,'fig':1},'glow-worm':{'or':1},'well-established':{'jellyfish':1},'bed':{'of':1},'bee':{';':1,'or':1,'can':1,'.':1},'providing':{'large':1,'access':2,'it':1,'copies':1},'distinguished':{'from':2,'of':1,'astronomers':1,'physicists':1,'solar':1,'anthropologist':1,'man':1},'spurs':{'of':1},'exhibit':{'in':1,'pieces':1},'enforced':{'descent':1},'lightly':{'built':3},'unchanged':{'since':1},'abyssal':{'area':1},'yielding':{'and':1},'p.m':{'.':1},'nototrema':{'there':1},'need':{'and':2,'a':1,'for':3,'be':1,'is':1,'.':1,'not':6,'foundations':1,'hardly':4},'precursors':{'of':4},'screw':{'in':1},'student-citizen':{'otherwise':1},'pursued':{'by':1},'able':{'even':1,'to':36,'with':2,'artificially':1,'in':1},'darkened':{'nest':1},'celandine':{'with':1},'instance':{'a':1,'by':1,'iron':1,'that':3,'of':6,'is':2,'in':4,'when':1,'having':1,'will':1,'how':2,'which':2,'have':1,'were':1,'the':1,'.':1,'was':1,'occurs':1,'to':1,'must':1},'relatives':{'there':1,'some':1,'like':1,'illustrate':1},'rischgitz.':{'professor':1,'baron':1},'pursues':{'a':1,'it':1,'another':1},'blades':{'of':1},'lectures':{'and':1},'moths':{'in':1,'are':1,'that':1},'connected':{'to':2,'story':1,'with':4,'by':1},'last--that':{'is':1},'learnt':{'something':1},'intrinsic':{'racial':1},'gallery':{'there':1},'speed--and':{'must':1},'enregistrations':{'are':1},'radiating':{'away':1,'heat':1,'or':1},'ovum-producer':{'for':1},'upset':{'both':1},'prickle':{'or':1},'astonishing':{'fact':1,'rapidity':1},'prickly':{'fruits':1},'se':{'.':1},'wot':{'isn':1},'impression':{'147':1,'that':1,'of':7,'is':1,'when':1,'illustration':1,'which':1,'on':1,'left':1},'emerging':{';':1,'from':4},'sent':{'on':1,'an':1,'to':1,'through':1,'forth':1,'out':1},'multicellular':{'animals':7},'influences.':{'but':1},'well-being':{'throughout':1},'pigling':{'creeps':1},'graptolites':{'and':1},'slow.':{'illustration':1},'based':{'on':5,'upon':1},'sheriff':{'of':1},'millennia':{'of':1,'in':1},'brighten':{'almost':1},'bases':{'embedded':1},'bud':{'a':1,'by':1},'inherited':{'nature.':1,'from':1},'attained':{'dark':1,'to':3,'a':1,'by':1},'employed':{'and':1,'to':1,'the':1,'in':1},'mortality':{'and':1,'had':1,'hardly':1,'.':1},'seizing':{'and':2,'every':1,'killing':2},'120':{'large':1,'deep-sea':1,'the':1,'flinty':1},'121':{'the':1,'egg':1},'123':{'miles':1},'124':{'photo':1,'woolly':1},'125':{'of':1,'albatross':1,'000':1,'storm':1},'sifting--the':{'groaning':1},'128':{'the':1},'thomson':{'sir':2,'evolution':1,'end':1,'262':1,'this':1,'was':1,'professor':1,'j':1,'regius':1,'as':1,'release':1,'imagined':1,'experimental':1,'darwinism':1},'endless':{'nooks':1,'disturbances':1},'three-hundredth':{'of':1},'gutenberg:':{'1.e.1':1},'processes':{'on':1,'that':1,'of':6,'into':1,'.':1,'to':1,'are':2,'which':1,'such':1},'automatic.':{'upper':1},'gutenberg.org':{'license':1},'trucks':{'.':1},'imperious':{'for':1},'introductions':{'to':1,'like':2,'too--the':1},'she':{'flies':2,'often':1,'soon':1,'at':1,'picked':1,'reached':1,'would':1,'had':2,'handed':1,'does':2,'got':2,'has':1,'was':4,'secures':1,'gave':1,'then':1,'never':1,'very':1,'brushes':1,'flew':1,'wanted':1,'succeeded':1,'presented':1,'did':2,'ever':1,'applies':1},'contain':{'a':1,'wheat':1,'within':1,'electrons':1,'defects':1,'more':2},'amphibia':{'senses':1},'embryonic':{'gill-clefts':1,'food-canal':1,'reptiles':1},'spotted':{'and':1,'leopard':1,'.':1},'multiplying':{'usually':1,'the':2,'by':2,'but':1},'burying':{'them':1},'34.7':{'smaller':1},'cuts':{'both':1,'the':1,'off':2,'it':1},'canine':{'tooth':2,'teeth':1},'inkling':{'of':1,'that':1},'breathe':{'dry':5,'on':1,'depend':1,'oxygen':1},'photosphere--is':{'of':1},'legacy':{'of':4,';':1},'powder':{'to':1,'which':1},'frog-like':{'mouth':1},'humane':{'sentiments':1},'surmised':{'about':1},'unconscious':{'elimination':1,'co-operation':2},'apes--the':{'gorilla':2,'gibbon':1},'southward':{'migration':1},'tend':{'to':15,'toward':1},'state':{'of':23,'visit':1,'applicable':1,'.':3,'to':1,'as':1,'in':1,'growing':1,'such':1,'s':1,'law':1,'the':2},'mind.':{'and':1,'there':1,'other':1,'sec':1,'viii':1,'another':1,'in':1},'carapace':{'of':1,'is':1,'or':1},'allotted':{'to':1},'tens':{'of':2},'neither':{'atmosphere':1,'stores':1,'very':1,'agreement':1,'aspect':1,'in':1},'kidneys':{'are':1,'the':1,'at':2,'.':1},'generations.':{'this':1,'to':1},'comparable':{'on':1,'in':2,'to':4},'attention':{'saving':1,'they':1,'may':1,'of':2,'to':1,'at':1,'decide':1,';':1},'renamed.':{'creating':1},'constituted':{'of':2},'importance':{'and':1,'on':1,'though':1,'becomes':1,'is':1,'were':1,'when':1,'namely':1,'to':1,'as':1,'of':6,'too':1,'in':1,'was':1,'than':1},'hurrying':{'streams':1},'edge-on':{'to':1,'44':1,'notice':1,'of':1},'8.--the':{'sun':1},'efficiency':{'and':1,'of':1,'is':1,'.':1,'in':1},'key':{'to':2,'after':1,'from':1,'opening':1,'.':1},'group':{'and':1,'always':2,'of':6,'only.':1,'the':1,'or':1},'precious':{'and':1,'to':1,'animal':1,'contents':1},'distribution':{'and':1,'underwent':1,'of':6,'.':1,'must':1},'secchi':{'the':1},'hits':{'the':1},'sediments':{'were':1},'limits':{'of':7,'the':1,'in':1,'that':1},'mongol':{'australian':1},'minds':{'of':2,'the':1},'preyed':{'upon':2},'strains':{'of':1,'differing':1,'that':1},'admit':{'a':1,'of':3,'the':1,'that':1,'to':1},'manifestations':{'and':1,'of':1,'in':1},'joy.':{'finally':1},'plankton':{'and':1,'is':1,'as':1,'.':1},'estimation':{'.':1},'torn':{'off':1},'studying.':{'some':1},'886.0':{'29.46':1},'colonisation':{'of':1,'was':1},'habitual':{'surroundings':1,'intelligent':1},'penetrating':{'deeply':1,'consequences':1,'opaque':1},'kin-sympathy':{'and':1},'distinguish':{'the':1,'six':1,'several':1,'different':1},'preparedness':{'until':1},'together.':{'except':1},'sea-cucumber':{'119':1,'it':1},'sense.':{'bibliography':1},'tread':{'of':1},'gregarious.':{'the':1},'addition':{'to':5,'that':1,'it':1,'of':1},'disintegrate':{'much':1,'under':1},'own.':{'the':1,'contents':1,'illustration':1},'cent':{'of':1,'selection':1,'.':3},'immense':{'extent':1,'distance':1,'stretches':1,'darkness':1,'distances':1,'column':1,'void':1,'fossilized':1,'amount':1,'importance':1,'rate':1,'mass':1,'monotony':1,'sea':1,'outbursts':2,'velocity':1,'electrical':1,'accumulation':1,'upward':1},'slowly':{'and':1,'on':1,'about':1,'dying':1,'creeping':1,'into':1,'changed':1,'it':1,'back':1,'down':1,'dissolved':1,'dissolve':1,'changing':1,'worked':1,'.':1,'taking':1},'flinders':{'petrie':1},'dead.':{'illustration':1},'shoulders':{';':1},'senses':{'and':2,'do':1,'recognise':1,'of':4,'.':1,'besides':1,'to':1,'which':1,'in':1,'touch':1,'interpret':1},'diversity':{'and':1,'in':1},'digged':{'and':1},'releasing':{'electrons':1},'four-toed':{'horse':2},'176-177':{'side':1},'expenditure':{'possible.':1},'1769-1832':{'86':1,'one':1},'mail':{'.':1},'mammals--with':{'their':1},'novel':{'and':1,'situation':1,'restlessness.':1,'way':1},'unsegmented':{'worms':1},'domestication':{'illustrate':1},'asexual':{'reproduction':4},'air-tubes':{'blood-channels':1,'takes':1,'or':1},'16.--the':{'moon':1},'chalk':{'cliffs':1},'ten-millionth':{'of':1},'owns':{'a':2},'comets':{'and':2,'is':1,'or':1,'we':1,'.':1},'ago--a':{'few':1},'tide.':{'arctic':1},'inhabits':{'british':2},'surface':{'and':8,'among':1,'often':1,'is':4,'it':1,'an':1,'through':2,'are':1,'in':2,'trailing':1,'millions':1,'from':1,'.':19,'to':3,'does':1,'therefore':1,'which':2,';':2,'was':1,'waters':2,'resembles':1,'but':2,'water':1,'by':4,'must':2,'of':27,'receives':1,'were':1,'the':2,'or':1,'bodies':1,'view':2},'examined':{'to':1,'must':1,'.':1},'lambs':{'and':1,'.':1},'conical':{'projection':1,'teeth':1},'inference--or':{'reason':1},'capture':{'small':1,'and':1,'especially':1,'air.':1},'shooting':{'star':1,'outwards':1,'stars':1,'out':1},'zoophytes':{'corals':1,'and':1},'above.':{'illustration':1},'began':{'on':1,'their':2,'long':1,'.':2,'to':25,'as':1,'in':3,'the':3,'with':2},'views':{'and':1,'we':1,'with':1,'.':1},'parts':{'and':1,'about':1,'to':1,'of':13,'company':1,'was':1,'.':1,'sufficiently':1,'only':1,'take':1,'which':1,'in':2,'ebbs':1,';':1,'save':1,'fluctuate':1,'are':3},'ante-natal':{'life':4,'sleep':1,'period':1,'hood':1},'underground':{'world':2},'party':{'distributing':1},'chlamydosaurus':{'of':1},'tapped':{'supplies':1},'capelle':{'in':1},'experimented':{'on':1,'with':1},'formations.':{'illustration':2},'appearances':{'may':2},'effect':{'and':1,'on':3,'would':1,'may':1,'of':5,'when':1,'.':1,'owing':1,'which':3,'movement':1,'measured':1,'than':1,'before':1},'clouds--some':{'with':1},'compared':{'to':4,'with':8},'surroundings.':{'the':1},'colouring':{'this':1,'remains':1,'the':1,'was':1,'of':1},'prophesied':{'for':1},'fierce':{'and':2,'flood':1},'frequently':{'transfer':1,'spread':1,'recurrent':2,'doubled':1},'destruction':{'of':1,'the':1},'poultry':{'are':2},'scarcely':{'taken':1},'reflection':{'of':1,'.':1},'cliff-loving':{'bird':1},'i':{'am':1,'had':1,'.':4,'came':1,'have':1,'the':1,'was':1,'present':1},'obstacles':{'.':1},'well':{'and':4,'named':1,'says':1,'developed':6,'illustrated':1,'known':2,'as':8,'dried':1,'have':1,'in':2,'shown':1,'able':1,'.':2,'to':1,'be':2,'afford':1,'concealed':1,'suited':3,'alone':1,'advanced':1,'placed':1,'protected':1,'accustomed':1,'mixed':1,'adapted':3},'shell--there':{'is':1},'nebulous':{'matter':2},'rife':{';':1,'in':1},'mccabe':{'a':1,'joseph':1},'years--but':{'in':1},'deadly':{'trypanosome':1},'glowed':{'under':1},'neutralised':{'and':1},'45':{'photo':1},'enormously':{'great':1,'slow':1,'greater':1,'.':2,'high':1,'enlarged':1,'denser':1,'distended.':1,'elongated':3,'increased':1},'increasingly':{'a':1},'accurate':{'analytical':1,'to':1,'measurements':1,'student':1},'mistaken':{'.':1},'leisure-time':{'observations':1},'radium--the':{'discovery':1},'sources':{'of':2},'ermine':{'is':1,'has':1,'mainly':1},'mistakes':{'often':1,'like':1,'that':1},'distant':{'planet':1,'aquatic':1,'star':1,'planets':1,'from':2,'ages':1,'past':1,'shores':1,'blaze':2,'stars':2,'date':1,'world':1},'skill':{'and':1,'.':1,'as':1,'without':1,'they':1,'in':2,'the':1},'jackal':{'and':1},'recapitulated':{'by':1},'grappling':{'and':1,'tentacles':1},'1.f.1':{'.':1},'1.f.6':{'.':1},'ovum':{'and':1,'introducing':1,'from':1,'is':1,'or':1,'with':1,'divides':1},'1.f.4':{'.':1},'density':{'heat':1,'stretching':1,';':1},'deposits':{'of':1,'which':3,'would':1,'were':1},'lured':{'upwards':1},'extends':{'not':2,'from':1,'at':1},'maintaining':{'tax':1},'recapitulates':{'at':1},'size.':{'illustration':1},'warrant':{'for':2},'clouded':{'that':1},'fate':{'of':2,'with':1,'by':1},'disappearance':{'of':2,'as':1},'devised':{'by':1},'utah':{'.':1},'propelled':{'themselves':1},'fats':{'and':1},'262':{'electrons':1,'from':1},'historic':{'interest':1},'267':{'arrangements':1,'disintegration':1},'contingents':{'from':1},'burden':{'and':1},'propeller':{'.':1},'immediately':{'preceding':1,'has':1,'lying':1,'for':1,'.':1},'crusher':{'is':1},'prominent':{'eyebrow':2},'loss':{'of':6,'there':1,'in':1},'fleas':{'and':1},'necessary':{'mathematical':1,'for':1,'that':1,'may':1,'it':1,'.':2,'to':9,'in':1,'apprenticeship':1},'lost':{'and':1,'faunas':1,'is':1,'some':1,'three':2,'races':1,'so':1,'or':1},'sizes':{'of':5,'according':1,'which':1},'ctenophores':{';':1,'or':1},'exhausted':{'by':1,'are':1},'payments':{'and':1,'must':1,'should':1},'lose':{'all':1,'one-millionth':1},'page':{'34.':1,'.':2,'also':1,'are':1,'280':1,'the':1,'92':1,'at':2},'likes':{'to':1},'therein':{'lays':1},'shed':{'germ-cells':1,'in':1,'.':1},'glare':{'of':2,'out':1},'offshore.':{'conditions':1},'arrows':{'tycho':1},'belonged':{'.':1},'phenomena':{'and':1,'then':1,'may':1,'of':3,'studied':1,'near':1,'.':1,'as':1,'cannot':1,'including':1,'are':3,'in':2,'not':1,'mean':1},'library':{'very':1,'of':2,'.':3},'husk':{'.':1},'warmer':{'water':1},'home':{'for':4,'of':1,'university':3,'.':5,'in':5,'anger':1,'was':1,'or':1},'peter':{'perhaps':1,'could':1,'was':1,'which':1},'planetesimal':{'dust':1},'scales':{'and':1,'to':1,'of':1,'shows':1},'before.':{'illustration':1},'projection':{'of':2},'broad':{'flat':1,'massive':1,'way':1,'outlines':2,'fact':2,'saucers':1},'kettle':{'on':2,'over':1,'containing':1},'cabbages':{'such':1},'injects':{'the':1},'appreciative':{'awareness':1},'tadpole':{'becomes':1,'has':1,'with':1,'mouth':1},'fountain':{'of':4},'mutation':{'and':1,'is':1},'demonstrated':{';':1},'limitations':{'are':1,'.':1},'incandescence':{'and':1},'inaccurate':{'or':1},'butterfish':{'or':1},'reaching':{'a':1,'to':1,'the':1,'which':1,'project':1},'millions.':{'the':1},'expansion':{'of':3},'imperfectly':{'known':1,'finished':1,'warm-blooded':1},'instinct':{'and':3,'may':1,'is':2,'by':2,'to':1,'as':1,'cannot':1,'in':1,';':1,'with':1,'professor':1},'stows':{'this':1},'sways':{'from':1},'macpherson.':{'illustration':1},'embryos':{'of':4,'an':1,'that':1},'freedom':{'and':1,'of':3,'understanding':1,'in':1},'interlinked':{'system':1,'in':1},'discovered.':{'primitive':1,'illustration':1},'chance':{'on':1,'as':1,'.':1},'flesh-and-blood':{'natural':1},'dominion':{'astrophysical':1},'tongue':{'a':1,'on':1,'and':1,'of':2,'upon':1,'ending':1,'can':1,'which':2},'liberating':{'the':1,'egg-cells':1},'equally':{'spaced':1,'illumined':1,'well':1,'large':1,'stimulated':1,'important':1,'unwise':1,'by':1},'contending':{'theories':1},'cell-wall':{'of':1},'crossland':{'observed':1},'previously':{'unknown':1,'in':1},'primal':{'mud':1},'washington':{':':1},'due':{'to':28,'as':1},'scharff':{'r':1},'times.':{'there':1,'b-c.':1,'illustration':1,'one':1,'c-f.':1,'the':1},'additions':{'or':1},'properties--ready':{'to':1},'endeavours':{'which':1},'utility':{'the':1,'for':1},'doubtless':{'a':1,'this':1,'discover':1,'as':1,'in':1,'gets':1,'present':1},'mississippi':{'and':1},'additional':{'distance':1,'cost':1,'terms':2,'weight':1,'contact':1},'zoologist':{'in':1,'means':1},'museum':{'and':1,'natural':14,'of':3,'57':1,'after':2,'it':1},'phrases':{'as':1},'associates.':{'in':1},'noticed':{'that':4,'already':1,'in':1,'by':1,'.':1},'night--relieved':{'only':1},'daniell':{'alfred':1},'inner':{'upper':1,'life':3,'aspects':1,'stream':1,'one':1,'aspect':1,'ear':1,'or':1},'cell.':{'this':1},'reiteration':{'of':1},'crushing':{'seeds':1},'north':{'and':1,'europe':3,'from':1,'scandinavia':4,'e.g':1,'when':1,'pole':2,'pacific':1,'an':1,'to':1,'1500':1,'sea':2,'in':1,'227':1,'american':1,'america':4,'or':2},'gluten':{'albumin':1},'make-up':{'which':1},'triangular':{'piece':1},'fountains':{'of':1},'gait':{'is':1,'human':1,'but':1},'gain':{'of':1,'leisure':1,'an':1},'sprinkling':{'of':1},'highest':{'level':1,'of':2,'up':1,'reaches':1,'brilliancy':1,'octave':1,'authorities':1,'line':1,'animals--birds':1},'eat':{'it':1,'in':1},'he':{'replied':1,'discovered':1,'ceased':1,'differs':1,'had':7,'destroyed':1,'belongs':1,'constitutes':1,'has':16,'then':2,'means':1,'produced':1,'did':2,'revolutionised':1,'found':4,'went':1,'traces':1,'reduced':1,'says':3,'often':1,'declines':1,'estimated':1,'thinks':1,'puts':1,'learns':1,'wondered':1,'induces':1,'laid':1,'does':2,'got':3,'shows':1,'measures':1,'chose':1,'reacts':1,'maintains':1,'disappeared':1,'approaches':1,'interposed':1,'asks':1,'poured':1,'could':1,'became':1,'confronted':1,'asked':1,'first':2,'one':1,'likes':1,'cultivated':1,'considers':1,'passes':1,'would':2,'jerks':1,'much':1,'wrapped':1,'was':8,'knows':2,'took':3,'repeatedly':2,'worked':1,'must':1,'plants':1,'made':1,'showed':1,'believes':1,'will':1,'arranges':1,'can':5,'of':1,'plunges':1,'called':2,'and':1,'is':7,'walks':1,'thus':1,'buried':1,'allowed':1,'claimed':1,'tells':1,'said.':1,'drained':1,'began':1,'also':2,'speaks':1,'tapped':1,'concedes':1,'used':1,'may':1,'who':1,'drives':1,'accurately':1,'tries':1,'said':1,'likes--and':1,'so':1,'lays':1,'fitted':1,'once':1},'volplaning':{'of':1,'parachutists':1},'cells':{'and':2,'on':2,'kept':1,'boxed':1,'that':1,'of':4,'showing':1,'no':1,'together':1,'.':5,'marked':1,'but':1,'have':1,'which':2,';':2,'whereas':1,'are':3},'two-spined':{'sticklebacks':1},'exerts':{'a':1},'stories':{'of':1,'if':1},'pumped':{'although':1,'out':1},'eyes.':{'furthermore':1},'piece':{'of':29,'became':1},'display':{'perform':1,'of':3,'.':1,'in':1},'neanderthalensis':{'first':1},'cheek-bones':{'and':1},'universal':{'inevitableness':1,'commodity':1,'freedom':1,'acceptance':1,'or':1,'attraction':1,'carrier':1,'open':1,'ether':3},'penny':{'you':1,'in':3},'climax.':{'the':1},'lobes':{'ps':1,'l':1},'crystals':{'and':1,'of':1,'the':1,'or':1,'in':1},'education':{'and':1,'of':3,'included':1,'she':1},'draco':{'volans':2},'heat--forms':{'of':1},'forest.':{'there':1},'functions':{'of':1,'alike':1,'.':1},'apple-trees':{'of':1},'vibrations.':{'the':1},'offensive':{'persons':1},'vacuole':{'cv':1,'fv':1},'onwards':{'it':1,'.':1},'meteor':{'reached':1,'shattering':1},'chemist':{'use':1,'john':1,'was':1,'but':1},'disposing':{'of':1},'over':{'and':8,'all':3,'fifty':2,'diverse':1,'80':1,'functioning':1,'their':1,'again':5,'space':1,'two':4,'.':1,'to':4,'2':1,'8':1,'200':1,'life':1,'hundreds':1,'five':2,'a':6,'new':1,'100':1,'one':1,'11':1,'31':1,'30':1,'taut':1,'the':23,'800':1,'its':2},'star':{'and':2,'distances':1,'appeared':1,'had':3,'is':4,'corresponds':1,'cluster':1,'as':1,'registers':1,'at':2,'in':2,'sinks':1,'whose':1,'for':2,'perhaps':1,'seems':1,'due':1,'.':6,'to':2,'goes':1,'clusters':1,'which':1,'light-years':1,'means':1,'may':1,'but':1,'it':1,'revealed':1,'crosses':1,'clouds':1,'of':1,'against':1,'near':1,'following':1,'algol':1,'makes':1,'or':2},'scrutinising':{'these':1},'living':{'and':1,'flesh':1,'tissues':1,'mainly':1,'an':1,'at':2,'creatures--the':1,'images':1,'ape':1,'organisms':1,'things':2,'representatives':3,'.':2,'creatures':32,'creature':8,'body':1,'a':1,'we':1,'adaptations':1,'form':1,'fire':1,'in':5,'material':1,'hand':3,'burden':1,'to-day':1,'to-day.':1,'man':1,'plants':1,'on':4,'fossils':1,'for':1,'creatures.':1,'items':1,'microcosm':1,'anthropologists':1,'matter':9,'materials':1,'organism':1},'vega':{'34.7':1},'gradations':{'of':1,'from':1},'stag':{'and':1},'pathways':{'marked':1},'out.':{'if':1},'drainpipes':{'to':1},'dewey':{'that':1},'persistent':{'nevertheless':1,'patience':1,'experiment':1,'death-feigning':1,'grasp':1,'tendency':1},'eighties.':{'it':1},'inset':{'circle':1},'15-20':{'feet':1},'determination':{'to':1},'skimming':{'on':1},'indirectly':{'into':1,'from':1,'the':1,'hastened':1},'disruptive':{'chemical':1},'secondly':{'it':1},'saturating':{'outside':1},'psycho-analyst':{'must':1},'is--but':{'it':1},'mackerel':{'and':1},'better.':{'now':1},'dynamic':{'.':1,'systema':1},'unfurl':{'more':1},'straws':{'he':1,'were':1,'she':1,'.':2},'rampart':{'is':1},'shrinkages':{'which':1},'up.':{'the':1},'whose':{'distance':1,'luminescence':1,'skull':3,'origins':1,'point':1,'fine':1,'warm-bloodedness':1,'stinging':1,'atoms':1,'instrumental':1,'motions':1,'webbed':1,'movements':1,'type':1,'gravitational':1,'mental':1},'gamut':{'between':1},'calculate':{'how':1,'the':1,'your':1,'that':1},'swam':{'close':1,'instinctively':1},'auk':{'were':1},'berridge':{'f.z.s.':8},'bragg':{'247':1,'one':1,'says':1,'that':1},'miall':{'l':1},'presents':{'a':1,'the':1},'fine-grained':{'lithographic':1},'investigation':{'shows':1,'.':1},'vocabulary--he':{'has':1},'teaching':{'very':1},'bird--too':{'far':1},'descendant--the':{'modern':1},'updated':{'editions':1},'hind-limb':{'of':1},'counted.':{'but':1,'in':1},'void':{'the':1,'.':1},'cockchafers':{'are':1},'vase':{'which':1},'thinopus':{'the':1},'smack':{'of':2,'their':1},'asia.':{'man':1},'nourished':{'from':1},'govern':{'what':1},'radio-active':{'substance':1,'substances':3,'.':1,'matter':1,'elements':4,'or':1,'bodies':2},'affect':{'a':2,'our':1,'the':5,'your':1},'vast':{'and':1,'stores':2,'reservoir':1,'disturbances':1,'process':1,'energy':1,'as':1,'numbers':1,'crowd':1,'masses':1,'regions':1,'majority':1,'figures':1,'structures':1,'vegetation':1,'whirlpool':1,'medium':1,'that':2,'new':1,'population':1,'streams':1,'changes':1},'transformed.':{'before':1},'kataleptic':{'state':1},'baking':{'qualities':1},'naturalist':{'louis':1,'of':1},'crops':{'with':1},'conductor--six':{'times':1},'present.':{'the':1},'herbert':{'spencer':1},'indefinitely':{'.':1,'in':1},'danger-signal':{'sounds':1},'1859.':{'heritable':1},'greenish':{'plants':1,'warty':1,'phosphorescence':1},'employees':{'expend':1,'are':1},'breast-bone':{';':1,'has':1,'it':1,'.':1},'clothes':{'it':1},'favoured':{'the':1,'speculation':1},'carnivore':{'by':1},'force':{'and':2,'them':1,'proceed':1,'developed':1,'between':1,'due':1,'but':1,'equal':1,'at':1,'which':1,'of':3,'.':2},'senescence':{'but':1},'concise':{'view':1},'dome-like':{'and':1},'japanese':{'deep-sea':2,'variety':1},'current--the':{'dynamo--magnetism--ether':1},'intelligible.':{'sec':1},'hundredfold':{'in':1},'cactus':{'and':1},'even':{'thinner':1,'learning':1,'ten':2,'less':1,'it':1,'an':1,'as':1,'planetoids':1,'through':1,'at':5,'picked':1,'in':9,'before':1,'cut':1,'wholesome':1,'for':1,'make':1,'when':7,'gases':1,'by':1,'to':4,'then':1,'routine':1,'if':6,'more':6,'picture':1,'his':1,'greater':1,'though':1,'after':1,'suffused':1,'rise':1,'although':1,'suck':1,'with':2,'than':1,'conspicuous':1,'hints':1,'a':8,'on':1,'several':1,'liquid':1,'these':2,'of':4,'proud':1,'against':1,'this':1,'without':1,'vaster':1,'the':17,'calculates':1},'unborn':{'young.':1,'reptile':1,'child':1,'offspring':1,'.':1},'asia':{'and':2,'that':1,'is':1,'africa':1,'.':2,'in':1,'was':1,'minor':1},'liberated':{'and':2,'on':1,'from':3,'eggs':1,'when':1,'were':1},'haze':{'and':1},'rest.':{'illustration':1},'reverently':{'and':1},'dr.':{'schoetensack':1,'cyril':1,'romanes':1},'new':{'corner':1,'ebooks.':1,'knowledge':4,'forms':1,'surroundings':1,'physics--the':1,'world.':1,'associations':1,'views':1,'food':1,'revelations':1,'ones':1,'world':2,'devices.':1,'worlds':1,'corners':1,'freedom.':1,'parasite':1,'possibilities':1,'microscope':1,'habits':2,'view':5,'body':1,'domain':1,'methods':1,'habitat':1,'generation':2,'parasites':1,'individualities':1,'home':1,'ebooks':1,'psychology':1,'habits--experiments':1,'competitions':1,'method':1,'discovery':1,'rhodesian':1,'theory':1,'leg':1,'joy':1,'objects':1,'york':11,'linkage':1,'computers':1,'haunts':1,'kingdoms':1,'72-inch':1,'factor.':1,'kinds':1,'or':1,'departures':10,'one':2,'use':1,'nebulae':1,'area':1,'.':2,'territories':1,'card':1,'interest':1,'suit':1,'shell':1,'clue':1,'zealand.':1,'lives':2,'kind':1,'conception':3,'star.':1,'variations':2,'devices':2,'state--':1,'cards':1,'property':2,'and':2,'permutations':1,'discoveries.':1,'sense':1,'flora.':1,'rays':1,'variety':2,'views--the':1,'feature':1,'inquiry':1,'gateways':1,'doors':1,'development':1,'elements':1,'star':1,'opportunity':1,'zealand':2,'modes':1,'light':2,'departure':2,'element':1,'materials':1,'physics':1},'net':{'detaches':1,'result':1},'ever':{'because':1,'tap':1,'show':1,'within':1,'discover':1,'in':1,'seen':2,'matures':1,'imminent':1,'been':1,'.':2,'take':1,'be':1,'life':1,'lived':1,'devised':1,'thrown':1,'perceived':1,'made':1,'rescued':1,'resolving':1,'rose':1,'passing':1,'arising':1,'could':1,'comes':1,'realised':1},'evolving':{'and':1,'brain':1,'set':1,'system':1,'on':1},'muzzle':{'region':1},'seventh':{'printing':1},'never':{'even':1,'nearer':1,'absent':1,'like':1,'ceases':1,'less':1,'becomes':2,'getting':1,'see':1,'been':1,'germinates':1,'completely':1,'understand':1,'showed':1,'mixing':1,'learned':1,'more':1,'focussed':1,'at':1},'drew':{'this':1,'the':1},'anthropology':{'will':1,'home':1,'and':1,'.':1},'met':{'the':1,'with':2,'by':1,'in':2},'108':{'600':1},'active':{'development':1,'and':1,'life':1,'links':2,'for':1,'cuttles':1,'protozoa':1,'strenuous':1,'cooperative':1,'in':1,'deep-sea':1,'the':1,'swimmers':1,'nor':1},'100':{'tons.':1,'miles':1,'000':9,'after':1},'cardboard':{'and':1,'we':1,'were':1},'interpret':{'as':1,'except':1},'contraction':{'process':1,'of':1,'is':1,'and':1},'dry':{'land':27,'land--the':1,'season':1,'work':1,'air':10,'land.':2,'branch':1,'pasture':1,'ground':3,'was':1,'air--by':1,'after':1},'plates':{'hanging':1,'form':1,'exposed':1},'-reptile':{'embryo':1},'buckled':{'up':1},'rests':{'and':1,'on':2},'light.':{'we':1,'no':1,'all':1,'illustration':1,'it':1,'now':1},'credit':{'of':3,'the':3,'amphibians':1,'card':1,'man':1},'permit':{'of':1,'all':1},'california':{'is':1,'has':1,'.':1},'adopting':{'this':1},'suitable':{'site':1},'fell':{'on':1,'near':2},'eyebrows':{'of':1},'growth.':{'under':1},'mobility':{'very':1},'mail.':{'the':1},'war.':{'the':1,'illustration':1},'peahen':{'stag':1},'god-like':{'intellect':2},'protozoa.':{'the':1},'counts':{'we':1,'rarely':1,'for':1},'lung.':{'it':1},'circumvent':{'the':1},'tertiary':{'strata':1,'times.':1,'era':1},'head-on':{'fashion':1},'is--substitutes':{'for':1},'duck-billed':{'platypus':3},'wingless.':{'it':1},'invaders':{'of':1},'dog-toothed':{'cynodonts':1},'duesseldorf.':{'according':1},'stinging-cells':{'the':1},'overhead':{'at':1,'means':1},'calm':{'and':1,'of':1,'unbroken':1},'cassowary':{'201':1,'its':1},'water-spider':{'argyroneta':1,'the':1,'conquering':1},'right.':{'illustration':1},'type':{'is':1,'reaches':1,'say':1,'have':1,'in':2,'should':1,'relatively':1,'from':1,'for':1,'.':2,'intermediate':1,'rich':1,'has':2,'was':1,'we':1,'but':1,'marked':1,'known':1,'such':1,'with':1,'must':1,'off':1,'like':1,'of':9,'equal':1,'makes':1,'finds':1},'tell':{'all':1,'for':1,'us':6,'at':1,'the':4,'where':1},'gorilla.':{'activity':1},'peeping':{'above':1,'out':1},'lungs':{'a':2,'as':1,'where':1,'but':1,'.':1},'wary':{'trout':1},'oscar':{'riddle':1},'expose':{'the':1},'under':{'a':2,'stones':1,'different':1,'his':1,'her':2,'this':3,'surface':2,'side':1,'water':2,'parts':1,'stimulation--giving':1,'our':2,'the':15,'its':1},'dogma':{'of':1},'warm':{'countries':1,'moist':1,'volcanic':1,'shallows':1},'bipedal':{'dinosaur':1,'progression--always':1,'erect':1},'spawning-pond':{'from':1},'ward':{'f.e.s.':20,'.':1},'latent':{'indefinitely':1,'life':1,'state':1},'flora':{'and':1,';':1,'as':1,'which':1},'room':{'and':1,'we':1,'for':1,'in':1},'civilisations':{'and':1,'of':1},'suggestive':{'fact':2},'guise':{'of':1,'would':1},'root':{'and':2},'humerus':{'or':1},'allantois':{'is':1,'persist':1},'squirting':{'jets':1},'give':{'and':1,'just':1,'certain':1,'modern':1,'it':2,'an':1,'in':1,'out':1,'her':3,'six':1,'definite':1,'to':1,'way':1,'you':1,'more':1,'notice':1,'very':1,'rise':8,'them':1,'such':1,'a':4,'off':2,'prominence':1,'up':2,'us':3,'way.':1,'the':7,'utterance':1},'climax':{'and':1,'among':1,'of':3,'in':5},'involve':{'any':1},'fizzing':{'about':1},'down-stream.':{'1':1},'advancing':{'slope':1,'dog':1,'troop':1},'masterly':{'skill':1,'book':1},'halobatidae':{'wingless':1},'january':{'30':1,'21':1,'22':1,'6':1},'shell-shock':{'is':1},'coral-snakes':{'cobras':1},'faults':{'he':1},'amazing':{'particles':1,'quantities':1},'messrs':{'.':3},'answer':{'even':2,'and':1,'them':1,'forecloses':1,'that':1,'follows':1,'is':7,'back':2,'.':1,'to':4,'first':1,'opens':1,'must':2},'willing--has':{'come':1},'blanket':{'of':2},'minority':{'have':1,'give':1},'undergoing':{'disintegration':2,'disintegration--and':1,'radical':1},'reconciled':{'.':1},'abdomen':{'beneath':1},'food.':{'illustration':1},'long-continued':{'structure':1},'curiosity':{'and':1,'are':1,'its':1},'mud-minnows':{'did':1},'amoeboid':{'cells':4,'line':1},'overtaken':{'.':1},'still;':{'but':1},'descends':{'again':1},'think':{'to':1,'for':1,'that':12,'of':19,'less':1,'.':2,'also':1,'they':2,'clearly':1},'still.':{'and':1},'maintain':{'a':1,'the':1,'that':2},'frequent':{'meals.':1,'paddling':1,'changefulness':1,'occurrence':1,'exhibition':1},'1872':{'charles':1},'carbonic':{'acid':2},'inhabitant':{'of':1},'overtakes':{'it':1},'operations':{'on':1},'fife':{'started':1,'which':1,'in':1},'enter':{'suddenly':1,'our':1,'into':2,'the':2,'deeply':1},'sheltering':{'blanket':1,'is':1},'co-operating':{'with':2},'murray':{'sir':2,'called':1,'.':2},'helena':{'the':1},'hibernation':{'.':1},'down.':{'some':1,'however':1,'illustration':1},'budding':{'or':1,'.':2},'copyright':{'status':1,'royalties':1,'notice':1,'agreement':1,'research':1,'1922':1,'in':2,'holder':4,'or':1,'laws':2},'partisans':{'at':1},'famille':{'lieu':1},'before':{'the':13,'they':5,'it':4,'an':1,'birth.':1,'betraying':1,'our':3,'birds':1,'that.':1,'proceeding':1,'matter':1,'with':1,'there':7,'.':3,'anyone':1,'their':1,'reptiles':1,'you':2,'man':1,'was':1,'we':2,'downloading':1,'reaching':1,'mammals':1,'birth':3,'amphibians':1,'water':1,'heat':1,'them':1,'but':1,'hatching':2,'true':1,'him':1,'he':1,'anything':1,'i':1,'this':1,'she':1,'passing':2,'or':3},'10.5':{'regulus':1},'gyges':{'ring':1},'crew':{'of':1},'better':{'case':1,'by':1,'still;':1,'brains':2,'is':1,'than':1,'forms':1,'to':2,'brain':1,'insertion':2,'teeth':1,'method':1,'or':1,'heel':1},'differently':{'from':1},'persist':{'not':1,'there':1,'when':1},'weeks':{'old':2,'perhaps':1,'removing':1,'when':1,'of':1,'or':1},'overcome':{'the':3,'in':1},'donors':{'in':1},'23.--star':{'cluster':1},'disintegration--and':{'the':1},'swim-bladder':{'of':1,'into':1,'which':1},'combination':{'of':3,'which':1},'within.':{'but':1},'strangest':{'of':1},'caterpillar':{'and':1,'on':1,'.':1},'weaponless':{'animal':1},'indulge':{'for':1},'bluish':{'colour':1},'secured.':{'there':1},'bony':{'fish':3,'collar':1,'flat-fishes':1},'meat':{'and':1,'darted':1},'brightness':{'in':1},'indivisible.':{'the':1},'fogs':{'were':1},'arrested':{'defective':1,'.':1},'proofreading':{'team':2},'mounts':{'guard':3},'went':{'before':1,'on':4,'towards':2,'through':1,'out':1},'meal':{'.':1},'bone':{'and':1,'for':2,'of':1,'u':1,'which':1,'in':1,'the':1,'muscle':1},'mean':{'and':1,'distance':1,'great':1,'save':1,'that':7,'stagnation':1,'one':1,'1':1,'to':1,'so':1,'not':1,'the':1,'.':1,'by':3},'telescope.':{'illustration:':1,'but':1},'afforded':{'the':1,'much':1,'by':3},'problems.':{'sec':1},'successively':{'worked':1},'suspended':{'particles':2,'at':1,'for':1,'in':1},'conifer':{'and':1},'principles':{'employed':1,'of':2},'hive-bees':{'italians':1},'taught':{'to':2,'two':1,'us':1,'that':2},'wave-lengths':{'.':3,'that':1},'first-class':{'sensory':1,'cereal':1},'extract':{'from':1},'conspicuous.':{'at':1},'conjectures':{'which':1},'superposing':{'a':1},'restricted':{'to':2,'that':1,'.':1},'content':{'even':1,'to':2,'ourselves':1,'for':1},'sparkle':{'in':1},'cave-man':{'may':1},'is.':{'energy':1,'let':1},'reader':{'a':1,'who':1,'may':1,'imagines':1,'an':1,'will':1,'to':1},'surprise':{'none':1},'sluggish':{'fishes':1,'turtle':1,'the':1,'animals':1,'creatures':1},'langur':{'monkeys':1},'turning':{'upon':1,'off':1,'the':1,'every':1,'up':1},'meridian.':{'the':1},'hangers-on':{'and':1},'wave-length.':{'deep-red':1},'ascending':{'the':1},'skin.':{'but':1},'246':{'photo':2},'240':{'white':1},'243':{'the':1},'telescopes':{'begins':1,'and':1,'smaller':1,'for':1,'of':2,'.':1,'at':1},'shaggy':{'hair':1},'began.':{'archaeozoic':1,'ordovician':1},'starts':{'as':1,'.':1},'messages':{'from':1,'.':3},'thus':{'diverts':1,'set':1,'just':1,'produces':1,'certain':1,'some':1,'it':4,'separated':1,'as':2,'at':2,'sir':1,'from':2,'appear':1,'securing':2,'no':2,'began':1,'there':5,'uranium':2,'two':1,'been':1,'to':1,'helps':1,'molecules':1,'volvox':1,'we':12,'arises':1,'form':1,'again':1,'becomes':1,'formed':1,'possible':1,'completely':1,'although':1,'fishes':1,'flowers':1,'producing':2,'a':1,'animals':1,'driving':1,'this':1,'professor':2,'shunted':1,'ascertain':1,'the':12,'spiders':1},'isn':{'t':1},'survive--although':{'they':1},'arrived':{'at':3},'cave-lion':{'and':1,'cave-hyaena':1},'loud':{'noises':1},'user':{'provide':1,'to':1,'who':1},'untutored':{'bird':1},'features':{'and':1,'of':3,'there':1,'but':1,'so':1,'which':1,'such':1,';':1},'grade':{'bring':1},'unlit':{'lamp':1},'peculiarity':{'of':1},'disappearing':{'a':1},'enumerate':{'the':1},'radiate':{'away':1,'long':1,'out':1},'immensely':{'large':1,'larger':1,'greater':1,'faster':1},'ditch':{'or':1,'.':1},'hood':{'is':1,'spread':1,'called':1,'or':1},'monotonous':{'world':1,'green':1},'anyone':{'providing':1,'may':1,'.':1,'anywhere':2,'can':2,'in':1,'else':1},'pelagic':{'plants':1,'life':1,'bird':2,'haunt':1,'area':1},'84116':{'801':1},'shiver':{'.':1},'periwinkle':{'or':1},'witnessing':{'the':1},'dwell':{'too':1},'growth':{'and':1,'of':6},'fiery':{'tongues':1,'vapour.':1,'fate':1,'journey':1,'eruptions':1,'outbreak':1},'radiation':{'and':1,'from':2,'of':2,'.':1,'cannot':1,'in':1},'ages--the':{'procession':1},'feathers':{'of':2,'proving':1,'.':1,'are':2,'have':1,'91':1,'the':1,'or':1},'pre-material':{'world':1},'floor.':{'jasper':1},'digs':{'away':1},'glumes':{'or':1},'somewhat':{'like':2,'suddenly':1,'of':1,'as':1,'higher':1,'in':1,'simpler':1,'difficult':2},'feature.':{'some':1},'conger-eels':{'and':1},'brazil.':{'the':1},'peculiar':{'and':1,'people':2,'physiological':1,'characteristics':1,'interest':2,'bones':1,'cases':1,'circumstances':1},'begins':{'on':1,'his':1,'.':1,'to':2,'as':1,'at':1,'in':1},'distance':{'a':1,'and':3,'towards':1,'from':8,'that':1,'of':13,'is':2,'in':2,'thus':1,'period':1,'.':5,'varies':1,'between':1,'it':2,'plays':1,'the':3,'once':1,'was':1,'away':1,'more':1},'creatures.':{'we':1,'the':1,'illustration':2},'dredge':{'has':1},'structures':{'and':5,'reveal':1,'inherited':1,'are':1,'tend':1},'regularised':{'and':1},'sea-serpents':{'terrestrial':1},'preparation':{'for':2},'matter':{'and':16,'chlorophyll':1,'says':1,'exists':1,'is':14,'it':1,'four':1,'as':2,'itself':1,'exist':1,'are':7,'have':3,'in':7,'consists':2,'throughout':1,'ether':2,'254':1,'if':1,'cannot':1,'from':2,'there':2,'.':18,'contained':1,'therefore':1,'which':7,'flowing':1,';':1,'really':1,'was':3,'into':2,'passed':1,'energy':1,'that':4,'may':1,'than':1,'of':10,'however':2,'but':2,'quite':1,'were':2,'cutting':1,'moving':1,'here':1,'itself.':3,'not':1,'end':1,'along':3,'by':1,'a':1,'on':1,':':2,'this':1,'ever':1,'attracts':1,'required':1,'up':1,'agoing.':1,'or':2,'trillions':1,'so':1,'can':1,'contain':1,'through':1,'the':2,'out':1,'reduced':1},'messengers':{'regulate':1,'from':1,'are':1,'which':2,'more':1},'silly':{'ants':1},'shore-waters':{'to':1},'hailstones':{'on':1},'enables':{'the':2,'them':1,'us':3,'it':1},'extracting':{'the':1},'chrysalis':{'probably':1},'recommence':{'when':1},'membranes':{'the':1,'vocal':1},'modern':{'mathematical':1,'researches':1,'mammals':1,'brain...':1,'times.':1,'comparative':1,'times':2,'birds':2,'size':1,'horse':4,'representatives':1,'philosopher':1,'spectroscopist':1,'astronomers':1,'investigation':1,'physicists':1,'instruments':1,'flowering':1,'type':5,'divers':1,'tree-shrews':1,'civilisation--coal':1,'life':1,'theory':2,'brains':1,'line':1,'giant':1,'direct-reading':2,'physicist':1,'binoculars':1,'world':1,'estimate':1,'astronomy':6,'telescopes':1,'man':10,'advance':1,'observatory':1,'language':1,'species.':1,'science':8,'industry':1,'science.':1,'diffraction':1,'british':1,'theories':1,'bird':3,'man.':1,'dynamo':1,'representation':1,'history':1,'physics':1,'view':1},'mind':{'and':3,'among':1,'is':3,'at':1,'in':6,'seemed':1,'from':1,'for':1,'.':12,'which':1,'has':4,'we':4,'205':1,'that':3,'cannot':1,'let':1,'the':2,'a':1,':':1,'of':15,'craves':1,'can':1,'entirely':1,'out':1},'eyes':{'and':4,'the':1,'of':5,'could':1,'.':5,'to':1,'are':3,'become':1,'protrude':1,';':1,'themselves':1,'having':1},'rigorous':{'boundary':1},'seed':{'being':1,'was':1,'for':1},'nervures':{'on':1},'seen':{'among':1,'emerging':1,'sometimes':1,'gripping':1,'just':1,'is':2,'an':1,'as':1,'full':1,'through':1,'at':4,'another':1,'in':15,'shooting':1,'its':1,'even':1,'what':2,'from':1,'for':2,'to':5,'giving':1,'when':2,'.':5,'how':1,'enough':1,'under':1,'energy':1,'we':1,'towards':1,'that':5,'edge-on':2,'but':1,'quite':1,'boys':1,'every':1,'entangled':1,'by':2,'a':1,'on':5,'washing':1,'driving':1,'of':1,'later':1,'making':1,'the':3,'or':1,'are':1},'seem':{'strangely':1,'do':1,'we':1,'for':1,'always':1,'bound':1,'early':1,'to':18,'bad':1,'does':1,'in':1},'grind':{'a':1},'seek':{'to':1,'any':1,'out':1},'tells':{'and':1,'of':2,'its':1,'us':6},'starfish':{'is':1,'sea-lilies':1,'acorn-shell':1,'which':2,'with':1,'called':1,'asterias':2},'point.':{'and':1},'chest':{'and':1,'.':1},'chess':{'with':1},'blotched':{'by':1},'permian':{'light':1,'period':3,'ice':2,'.':1,'reptiles':1,'the':1,'was':1},'established':{'on':1,'all':1,'may':1,'is':1,'between':1,'an':1,'.':2,'in':3,'themselves':1,'one':1,'by':2,'fact':1},'changefulness':{'and':1,'of':2,'rather':1},'vermiform':{'appendix':2},'regular':{'flux':1,'relation':1,'orbit':1,'movement':1},'meaning':{'of':10,'the':2,'.':1,'an':1},'see.':{'as':1,'that':1},'promising.':{'illustration':1},'refractor':{'and':1,'is':3,'measures':1,'the':1,'48':1},'zealand':{'is':1,'which':1},'broadcast':{'in':1},'observation':{'and':1,'on':1,'by':1,'that':1,'.':1,'or':1},'consumed':{'and':1},'deliberate':{'introductions':1},'m':{'and':1,'.':1},'dog':{'scouring':1,'and':4,'shown':1,'turning':1,'that':2,'of':2,'professor':1,'or':2,'as':1,'carrying':1,'at':1,'a':1,'in':1,'van':1,'the':1,'has':3,';':1},'breathes':{'dry':1,'by':1},'definitely':{'formulated':1,'proved':1,'begun':1,'that':2,'free':1,'guiding':1,'the':1},'principle':{'we':1,'of':2,'is':1,'can':1,'which':2,'applies':1,';':1},'molluscs':{'and':1,'.':1,'are':1,'ascidians':1,'in':1},'dover':{'and':1},'planetary':{'system.':1,'families':2,'nucleus':1},'aquatic':{'ancestors':1,'animals':1,'insects':1,'surinam':1,'ancestry':2,'locomotion':2},'rayleigh':{'stated':1},'visitor':{'gave':1},'probe':{'for':1},'skin-wing':{'a':1},'ending':{'in':1},'brilliancy':{'.':1},'attempts':{'to':4,'made':1,'at':1,'have':1},'fungas':{'spots':1},'counteractive':{'measures':1},'creature--far':{'from':1},'ear.':{'illustration':2},'representing':{'nude':1,'one':1},'explain':{'what':1,'presently':1,'for':1,'this':3,'how':1,'the':6,'why':1},'folded':{'in':1},'sugar':{'fats':1,'.':1},'judged':{'as':1,'from':1,'by':1},'above':{'and':1,'distances':1,'all':1,'is':1,'seven':2,'our':1,'scale':1,'shrinkage':1,'six':1,'them':1,'illustration':2,'it':1,'diagram':1,'five':1,'with':1,'boiling-point':1,'sea-level':1,'a':1,'illustration.':1,'these':1,'pictorial':1,'them.':1,'the':12},'compounded':{'of':2,'so':1},'indicus':{'--are':1},'morsel':{'of':1},'chromosphere':{'great':1,'extends':1,'are':1,'.':1},'stop':{'and':1,'vii':1,'when':1,'but':1,'at':1,'the':2},'perceive':{'a':1,'their':1},'coast':{'of':1},'12':{'is':1,'000':2,'what':1},'energy--what':{'a':1,'heat':1},'21.--typical':{'spectra':1},'ignoble':{'creatures':1},'comply':{'with':5,'either':1},'bat':{'the':1,'flying':1,'s':1,'shares':1},'bar':{'of':1,'.':1},'17':{'origin':1,'1905':2},'room--pour':{'molecules':1},'fields':{'.':1},'bay':{'and':1,'of':1},'bag':{'of':1,'containing':1},'microscope':{'behaving':1,'these':1,'which':1},'discs':{'of':1,'that':1,'.':1},'troop':{'of':1,'masked':1},'18':{'photo':1,'solar':1},'fertility':{'and':1,'in':1},'upwards':{'and':3,'of':2,'from':1,'that':1},'ears':{'and':2,'of':2,'.':1},'ethical':{'face':1},'head-brains':{'the':1},'reference':{'to':1,'has':1,'in':1},'testing':{'probing':1,'all':2},'alterations':{'would':1,'in':1},'tag--but':{'larger':1},'zones':{'of':1,'each':1},'decided':{'to':1,'that':1},'interruptions':{'of':1},'subject':{'and':1,'we':1,'of':2,'is':2,'here':1,'to':4,'as':1,'deeply':1},'pebbles':{'gripped':1,'.':1},'voyage':{'found':1,'darwin':1},'said':{'and':1,'is':1,'some':1,'in':1,'what':2,'for':2,'there':2,'long':1,'.':1,'to':9,'enough':1,':':1,'that':19,'but':1,'a':1,'about':1,'like':1,'of':2,'later':1,'so':1,'the':4,'consisted':1},'scrap':{'from':1},'sail':{'or':1,'in':1},'artificial':{'floor':1,'light':2,'fogs':1,'light.':1,'surroundings':1,'item':1,'transmutation':1},'pets':{'of':1},'simplest':{'forms':2,'animals':1,'form':2,'of':2,'possible':1,'multicellular':1,'bacteria':1,'creatures':1},'unsolved.':{'the':1},'sorts':{'and':1,'of':4,'occupations':1,'out':2},'polygamous':{'.':1},'lethargic':{'state':1},'profitable':{'to':3,'movements':1,'habit':2,'one':1},'cleverer':{'mammals':1,'animals':1,'than':1},'venture':{'out':1},'mountain-top-like':{'cusps':1},'physicist':{'and':1,'set':1,'brings':1,'.':1,'to':1,'has':1},'harvard':{'college':4},'386':{'times':1},'cousin':{'to':1},'motto':{'in':1},'suggested':{'genealogical':2,'this':1,'that':6,'however':1,'.':1,'to':1,'at':1,'another':1,'in':2,'by':2},'air--a':{'globule':1},'sperm-producer':{'and':2},'canines':{'and':1},'against':{'a':5,'downward-projecting':1,'branches':1,'her':1,'instability':1,'these':1,'certain':1,'it':1,'evaporation':1,'their':1,'intensities':1,'of':1,'accepting':1,'the':17,'one':2},'feathering':{'of':1},'puffin':{'s':2},'1.--diagrams':{'of':1},'distinction':{'of':1,'has':1,'so':1},'confronted':{'his':1},'simplified.':{'we':1},'fore-leg':{'of':1,'has':1},'appeared':{'suddenly':1,'upon':1,'related':1,'.':2,'to':1,'in':1,'inconceivable':1,'or':1},'repertory':{'of':5},'buries':{'itself':1},'incessant':{'colliding':1,'movement':2},'inquisitive':{'insects':1,'adults':1,'interest':1},'purling':{'brook':1},'lick':{'observatory.':4},'initiative':{';':1,'so':1},'lowly':{'forms':1,'origin.':2},'ether':{'and':11,'because':1,'exists':1,'disturbances':1,'is':2,'surrounding':1,'as':1,'are':1,'carry':1,'if':1,'permeates':1,'what':1,'disturbance':4,'.':8,'2':1,'which':1,'flowing':1,';':3,'has':2,'was':2,'then':1,'may':1,'but':2,'waves':2,'he':1,'by':2,'must':1,'of':2,'carries':1,'light':1,'or':1},'now.':{'the':1},'recognises':{'the':1},'puts':{'a':1,'the':1,'his':1,'forth':1,'it':2},'basis':{'of':5,'for':5,'but':1},'ramifying':{'system':1},'three':{'and':3,'cautions':1,'letters':1,'reasons':1,'arms':2,'feet':2,'in':2,'females':1,'species':1,'centuries':1,'different':1,'or':3,'dimensions':3,'distinct':2,'fingers':1,'to':3,'wonderful':1,'weeks':3,'hundred':3,'conditions':1,'lowest':1,'aspects':1,'complete':1,'inches':2,'thousand':3,'great':4,'atoms':1,'hours':1,'semicircular':1,'pairs':1,'months':2,'times':5,'chief':1,'miles':1,'fundamental':1,'quarter':1,'other':1},'erect':{'posture':1,'after':1,'lines':1,'attitude':2,'the':1,'he':1,'consisted':1},'milieu':{'.':1},'chrysanthemum':{'of':1},'trigger':{'of':4,'is':1,'which':1,'.':1},'interest':{'and':2,':':1,'for':3,'that':2,'of':2,'is':1,'us':1,'.':4,'to':3,'are':1,'in':5,'increasing':1,'was':1,'or':1},'entered':{'our':1,'into':2,'upon':1,'so':1,'on':1},'chaffinch':{'disguise':1},'threw':{'in':1},'light-year':{'is':1},'deeper':{'down':1,'and':1,'waters':1,'hollows':1},'quantities':{'not':1,'of':2,'pour':1,'destined':1},'sunshine':{'then':1,'of':1},'cold--an':{'eternal':1},'meadow-grass':{'before':1},'locations':{'where':1,'.':1},'168':{'profile':1},'164':{'suggested':1,'the':1},'165':{'the':1},'166':{'photo':2},'167':{'photo':1},'160':{'professor':1,'000':1,'tons':1},'161':{'photo':1,'after':1},'encyclopaedia':{'giving':1},'ether.':{'waves':1},'exception':{'and':1,'of':1},'were--the':{'working':1},'tank':{'of':1},'winding':{'in':1},'originate':{'and':1,'is':1},'spontaneously':{'and':1,'become':1,'or':1,'liberated':1,'becomes':1},'horse-power':{'in':1},'near':{'them':1,'that':2,'scarborough':2,'duesseldorf.':1,'victoria':1,'relative':1,'its':1,'shore':1,'at':2,'enough':2,'the':18,'with':1,'heidelberg':3,'as':2},'neat':{'way':1},'aeroplane':{'s':1,'in':1},'balance':{'of':1,';':1,'used':1,'between':1,'.':2},'study':{'and':1,'rabbits':1,'in':1,'of':12,'under':1,'mammals':1,'.':1,'which':1,'leading':1},'twenty-four':{'hours':2},'spawn':{'and':1,'only':1,'in':4,'.':3},'longer.':{'illustrations':1},'seven':{'hours':2,'different':1,'rays':1,'neck':1,'inches':1,'months':1,'two':1,'colours':5,'other':1,'planets':1,'stages':2},'thought.':{'sec':1,'yet':1},'mexico':{'to':1,'by':1},'diaphragm':{'came':1},'is':{'all':4,'evidence':5,'believed':3,'caused':2,'comparatively':2,'four':1,'remarkably':1,'abundant':2,'looking':1,'certainly':5,'inverse':1,'electricity':2,'concerned':2,'young':2,'to':52,'thinnest':1,'preserved':1,'inconspicuous':1,'worth':2,'tethered':1,'worse':1,'outside':1,'very':48,'indubitable':1,'radio-active':1,'vastly':1,'continued':1,'illustrated':1,'asexual':1,'probably':7,'woven':1,'familiarly':1,'smaller':1,'insignificant':1,'overlying--the':1,'past':1,'likely':1,'utter':1,'estimated':1,'situated':2,'shining':1,'even':2,'established':1,'what':7,'necessary.':1,'comparable':1,'beaten':1,'contributed':1,'expressed':1,'liberated':1,'above':1,'shared':2,'falling':1,'ever':1,'melancholy':1,'never':5,'leaping':1,'desired':1,'learnedly':1,'represented':5,'obtained':1,'great':5,'commonly':1,'descended':1,'usually':3,'conveniently':1,'composed':6,'love':1,'suddenly':1,'merely':1,'explained':2,'apt':3,'highly':10,'brought':4,'rarely':2,'from':4,'would':1,'superficially':1,'two':1,'doubt':1,'therefore':1,'taken':1,'unthinkable':1,'lessened':2,'more':23,'rich':1,'started':1,'pursuing':1,'one-sided':1,'suffused':1,'varying':1,'known':11,'given':4,'carried':2,'locked':1,'room':1,'this':6,'moulted':1,'itself':1,'obvious':1,'can':1,'growing':1,'making':2,'stimulating':1,'proof':2,'nearest':2,'bent':1,'pushed':2,'something':2,'wonderful':2,'struck.':1,'huge':1,'rather':4,'divided':1,'breaking':1,'fortunate':1,'1':1,'located':2,'instead':1,'left--to':1,'maternal':1,'intended':1,'inconceivably':1,'derived':2,'movable':1,'disgusted':1,'eighty-eight':1,'coming':1,'such':4,'horizontal':1,'inconceivable':1,'revealed':1,'a':196,'short':1,'natural':3,'effective':1,'yielding':1,'fortunately':1,'so':21,'pulled':4,'secured':1,'justifiable':2,'unpalatable':1,'indeed':1,'mainly':3,'discharging':1,'produced':3,'held':1,'through':3,'committed':1,'still':9,'its':5,'admirably':1,'superior':1,'26':1,'how':2,'susceptible':1,'interesting':14,'actually':1,'better':2,'covered':1,'travelling':2,'admirable':1,'easier':3,'then':4,'popularly':1,'affected':1,'greater':2,'thereby':1,'food':1,'safe':4,'wise':1,'not':79,'now':18,'always':7,'reasonably':1,'tenanted':1,'arrested':1,'establishing':1,'transmitted':1,'reasonable':1,'radial':1,'found':6,'entirely':4,'physiologically':1,'afforded':3,'doing':1,'there':10,'crushing':1,'related':2,'our':3,'beyond':5,'thick':2,'really':4,'living':1,'shown':5,'surrounded':3,'content':1,'contained':1,'denoted':1,'revolving':1,'twenty-five':1,'borne':2,'disputed':2,'built.':1,'incalculable':1,'quite':10,'reason':3,'surely':2,'struggle':2,'intensely':1,'thrown':1,'enormous':1,'organic':1,'keen':2,'disturbed':2,'moving':5,'assuredly':1,'most...':1,'first':1,'complete.':1,'constantly':4,'blown':1,'synonymous':1,'reflected':6,'one':23,'well-known':1,'done':1,'sunlight':1,'another':13,'impossible':8,'immensely':1,'discharged':1,'bitten':1,'little':3,'necessarily':2,'needed':1,'unknown':2,'their':2,'2':1,'too':3,'passed':1,'molecular':1,'vigorous':1,'that':76,'relieved':2,'continuous':2,'wisdom':1,'wasted':2,'prodigious':1,'undoubtedly':2,'flightless':1,'16':1,'divisible':1,'double':1,'enabled':2,'slowed':1,'866':1,'matter':2,'supposed':5,'historical':1,'accessed':1,'and':2,'unrestricted.':1,'gathering':2,'lightly':1,'turned':2,'vitally':1,'unlikely':2,'cleaned':1,'imperfect':2,'obviously':3,'apparently':1,'any':3,'relatively':1,'forced':1,'built':2,'efficient':1,'thoroughly':1,'able':5,'snow':1,'also':18,'trying--the':1,'absorbed':2,'embryological':1,'sure':1,'diminishing':1,'-273':1,'most':5,'connected':1,'printed':1,'nothing':7,'alpha':1,'measured':1,'conspicuous':2,'considered':1,'calculated':1,'sometimes':8,'repeated':1,'dissolved':1,'accounted':1,'normally':1,'lying':1,'precise':1,'particularly':2,'supported':1,'scattered':1,'discovered':2,'scarce':2,'enormously':2,'nearer':1,'founded.':1,'shuffling':1,'with':2,'excessively':1,'enough':6,'unhappy':1,'only':19,'going':7,'touched':1,'molecules':1,'regrowing':2,'adequate':1,'evinced':1,'meant':5,'compounded':2,'exceptional':1,'dependent':1,'familiar':2,'famous':3,'unimportant':1,'123':1,'nearly':1,'closely':5,'drawn':2,'instinctive':2,'dr':1,'justified':1,'beset':1,'evolution':2,'instructive':2,'influenced':1,'common':2,'rung':1,'characteristic':3,'fixed':2,'steam':1,'strengthened':1,'swept':1,'physically':1,'condensed':1,'observed':1,'are':1,'enhanced':1,'tender':1,'close':1,'luminous':1,'forthcoming':1,'best':1,'subject':2,'said':5,'probable':4,'distinctive':1,'missing':1,'continually':1,'written':1,'between':2,'conceptual':2,'progress':2,'neither':1,'available':1,'we':1,'reproduced':1,'nature':2,'tending':1,'however':5,'efficiency':1,'386':1,'suggested':4,'both':1,'essentially':2,'reported':2,'freely':1,'ill':1,'thickly':1,'against':1,'called':21,'sensitive':1,'passing':1,'among':2,'volcanic':1,'simple':1,'acted':1,'maintained':1,'simply':4,'learning':3,'associated':2,'pouring':1,'described':1,'capable':1,'scented':1,'due':5,'.':3,'recognised':1,'hardly':6,'resting':1,'life':2,'partly':5,'sufficient':5,'formed':2,'an':40,'diverted':1,'applied':3,'these':3,'plain':6,'eclipsed':1,'intimately':1,'reflex':1,'64-6221541':1,'flooding':1,'taking':1,'owed':1,'almost':8,'endowed':1,'thus':4,'it':7,'according':1,'helped':1,'good':2,'clinging':1,'in':33,'ready':1,'if':2,'tumbled':1,'perhaps':3,'occupied':1,'limited--there':1,'clearly':1,'solidary':1,'capped':1,'split':2,'finite':1,'difficult':6,'independent':1,'used':7,'wisest':1,'running':2,'arrived':1,'climbing':1,'circumvented':1,'centred':1,'lower':2,'largely':2,'paralysed':1,'humanly':1,'well':10,'magnified':1,'rife':1,'without':1,'the':158,'left':3,'departed':1,'just':5,'less':4,'being':3,'profoundly':1,'disguise':1,'stored':1,'atomic':1,'rocked':1,'behind':1,'useful':1,'renewed':1,'corroborated':1,'possible.':1,'passive':1,'spread':1,'transformed':1,'easy':2,'born':1,'struck':1,'increased':1,'loss':1,'showing':1,'decomposed':1,'possible':15,'marked':2,'advanced':1,'acute':1,'sorting':1,'necessary':7,'like':11,'lost':2,'shaped':1,'cooler':1,'admittedly':1,'62':1,'lapsed':1,'fully':1,'soft':1,'essential':1,'towards':2,'right':1,'often':22,'some':4,'somehow':1,'urgent':1,'added':2,'jupiter':1,'52':1,'perfected':1,'irresistible':1,'provided':1,'gradually':3,'condensed--who':1,'for':4,'unlocked':1,'recorded':1,'critical':1,'masked':2,'conquering':1,'good.':1,'freed':1,'indestructible':2,'peculiarly':2,'continuing':1,'broken':4,'worthy':1,'by':3,'on':6,'about':8,'mingled':3,'anything':1,'getting':1,'of':16,'mutually':1,'steadily':2,'introduced':1,'consequently':1,'swimming':1,'diversely':1,'equally':1,'within':1,'bound':1,'because':2,'lively':1,'primarily':1,'einstein':1,'nowadays':1,'doubtless':2,'seen':18,'indispensable':1,'flying':1,'long':1,'much':12,'infected':1,'low':1,':':4,'considerably':1,'complete':1,'secreted':1,'abundantly':1,'constituted':1,'heat':1,'true':20,'considerable':3,'posted':3,'absent':1,'made':10,'arranged':1,'evident':1,'obscure.':2,'whether':2,'dangerous':1,'placed':3,'converted':1,'emotional':1,'clear':7,'hotter':2,'certain':9,'slowing':1,'general':1,'transfused':2,'as':9,'at':11,'effected':2,'again':1,'raised':1,'inborn':2,'no':60,'unaccustomed':1,'out':1,'poor':1,'white-hot':1,'convincing':1,'ultimately':1,'generated':1,'important':2,'suited':3,'included':1,'aware':1,'promising.':1,'to-day':1,'happening':1,'practically':6,'cohesion':1,'ascertained':1,'implied':1,'time':1,'far':5},'it':{'holds':1,'illustrates':2,'scooped':1,'over':1,'fall':1,'splitting':1,'leads':1,'boils':1,'through':2,'looks':8,'cuts':1,'consists':2,'facilitates':1,'agrees':1,'causes':1,'crashing':1,'sprang':1,'sinks':1,'burns':1,'betokens':1,'furnished':1,'seems':23,'should':3,'forms':4,'to':18,'only':2,'spread':1,'firmly':1,'positively':1,'easy':1,'under':2,'8':1,'hammers':2,'has':82,'might':6,'sent':1,'gave':1,'meant':3,'then':1,'his':1,'wished':1,'goes':3,'listeth':1,'means':7,'contracts':2,'breaks':1,'continues':1,'stop':1,'possible':8,'flew':1,'engulfs':2,'matters':1,'cannot':5,'they':1,'altogether':2,'not':2,'meets.':1,'now':3,'neither':1,'discovered':1,'necessary':1,'went':2,'lies':1,'did':3,'always':2,'fixes':1,'serves':1,'loses':2,'herald':1,'off':1,'expels':1,'turns':1,'found':2,'feeds':2,'works':1,'mean':1,'reveals':1,'often':5,'exists':1,'sends':1,'folds':1,'acquires':1,'back':1,'alive':1,'differs':1,'used':1,'swims':3,'are':1,'picked':1,'reached':2,'collects':1,'out':1,'ascends.':1,'what':1,'probable':1,'for':4,'profit':1,'away':2,'revolves':1,'stops':1,'climbs':1,'misses':1,'does':14,'provides':2,'without':2,'got':1,';':1,'seemed':1,'ever':1,'occurs':4,'shows':2,'be':5,'we':1,'give':2,'led':2,'chose':1,'passes':3,'pours':1,'jumps':1,'works--the':1,'disintegrates':1,'works.':1,'surely':1,'put':1,'refers':1,'emits':1,'change':1,'takes':6,'on':6,'dates':1,'hunts':1,'consisted':1,'limits':1,'rests':1,'could':2,'settles':2,'approaches':1,'against':2,'must':20,'suggests':1,'became':5,'greatly':1,'usually':1,'leaps':1,'makes':2,'finds':1,'comes':4,'being':1,'own':1,'afterwards':1,'weighs':1,'had':17,'into':6,'were.':1,'corresponds':1,'reaches':1,'one':1,'running':1,'skips':1,'casts':1,'likes.':1,'impossible':3,'.':31,'doubtless':1,'utters':1,'rises':3,'from':3,'collides':1,'would':23,'remains':4,'expands':1,'there':1,'chooses':1,'vibrate':1,'by':2,'fully':1,'belongs':1,'appears':3,'recognised':1,'furnishes':2,'tells':1,'grew':1,'hardly':1,'until':1,'perishes':1,'slips':1,'that':3,'becomes':2,'contains':3,'convinces':1,'took':1,'strikes':1,'gently':1,'implied':1,'lives':3,'stiffens':1,'probably':1,'with':2,'than':1,'present':1,'he':1,'begins':1,'save':1,'were':18,'builds':1,'looks.':1,'was':98,'originate':1,'bids':1,'up':3,'promotes':1,'will':20,'exerts':1,'can':19,'applies':1,'about':1,'happened':1,'leaves':1,'breeds':1,'and':12,'buries':1,'changed':1,'go':1,'jettisons':1,'escapes':2,'almost':1,'is':473,'occupies':2,'thus':1,'naturally':1,'or':1,'an':1,'as':7,'at':1,'in':13,'need':4,'follows':4,'made':1,'proceeds':1,'if':1,'gives':2,'again':4,'needs':1,'shuts':1,'thereby':1,'amounts':1,'began':4,'acts':1,'when':3,'aside':1,'intelligently':1,'also':1,'parts':1,'which':1,'brings':1,'you':1,'gets':2,'pecked':1,'pursues':1,'practicable':1,'effected':1,'looked.':1,'wrongly':1,'radiates':1,'may':59,'fails':1,'occurred':1,'develops':1,'grows':2,'uses':1,'thrills':1,'contain':1,'concentrating':1,'died':1,'glow':1,'a':2,'implies':1,'advantageous':1,'records':1,'behaves':1,'clear':2,'sometimes':4,'flow':1,'breathes':1,'obviously':1,'more':1,'points':1,'so':2,'fitted':1,'harks':1,'the':4,'once':2,'requires':1,'possesses':1,'came':2,'repeatedly':1},'iv':{'the':1,'.':3},'ii':{'the':1,'.':3},'clinging':{'to':1},'in':{'limited':2,'all':20,'evidence':1,'skeleton':1,'particular':2,'four':2,'sleep':1,'canes':1,'hunting':1,'reptiles':1,'those':3,'masculine':1,'very':4,'indubitable':1,'duck-ponds':1,'every':5,'asia.':1,'hibernating':1,'monkeys':3,'minute':1,'archaeopteryx':1,'apprehension':1,'succession':2,'relation':1,'sedentary':1,'pterodactyl':1,'revolution':1,'ten':4,'dealing':2,'rivers':2,'cost':1,'nests':1,'what':2,'constitution':1,'nature.':2,'favour':1,'asia':2,'uniform':1,'new':3,'nails':1,'contrast':1,'movement':2,'body':1,'degree':2,'ninety-nine':1,'atoms':1,'water':2,'others':1,'directions':1,'fifteen':2,'great':7,'bygone':1,'northern':2,'healthy':1,'compliance':2,'miniature':1,'amount':2,'action':2,'locomotion':2,'mistake':2,'amphibians;':1,'diameter':14,'egypt':1,'africa':3,'gristly':2,'1907':2,'1900':2,'1901':1,'attendance':2,'from':2,'two':3,'cretaceous':1,'france':3,'comparing':1,'doubt':1,'black':1,'fossiliferous':1,'more':2,'horses':1,'pencil':1,'bodily':1,'glass':1,'warm':2,'virtue':3,'varying':1,'andalusia':1,'keeping':1,'animals':3,'this':48,'facilitating':1,'paragraph':6,'nine':1,'stature':2,'following':1,'making':4,'nurture':1,'control':1,'figure':1,'process':5,'persuading':1,'india':1,'pieces':1,'autumn':1,'orion':2,'times':2,'spite':6,'winter':5,'destroying':1,'six':1,'machine':1,'buns':1,'vital':1,'animal':2,'elephant':1,'ordinary':1,'civilisation':1,'edinburgh':1,'southern':1,'orbits':1,'unawares':1,'mankind':4,'waves':1,'1887':1,'such':8,'response':1,'trinil':1,'man':19,'a':188,'short':3,'natural':2,'outline':1,'so':1,'order':7,'typical':1,'imagining':1,'reproduced':1,'breaking':1,'september':1,'hand.':2,'years':1,'radio-active':3,'pascal':1,'existence':1,'cold':1,'its':36,'apes':1,'interesting':1,'amazing':1,'writing':3,'forms':1,'fig':1,'travelling':1,'admirable':1,'them':3,'good':1,'greater':2,'similar':1,'practice':1,'underneath':1,'overpowering':1,'not':1,'courtship':1,'sea-urchins':1,'respiration.':1,'all.':1,'truth':1,'each':3,'pools':2,'liberating':1,'doing':1,'year':1,'our':16,'operation':1,'1898.':1,'special':1,'canada':1,'living':2,'space':4,'safety':2,'kent':3,'millions':1,'turning':1,'monkeys--activity':1,'others--which':1,'little':1,'reason':1,'fastening':1,'organic':4,'e.g':1,'determining':1,'cosmic':1,'british':1,'behaviour.':1,'motion':1,'turn':4,'length':7,'place':1,'consequence':2,'locating':1,'south':1,'flying':1,'faculty':1,'number':6,'one':14,'dominating':1,'another':11,'precisely':1,'quality':1,'sockets':1,'size':11,'horse':1,'obedience':1,'their':35,'sumatra':1,'intermediate':1,'fiery':1,'reign.':1,'white':1,'store':1,'exploring':1,'that':5,'relieved':1,'kangaroo-like':1,'1918':1,'part':6,'western':1,'conger-eels':1,'1912':2,'1917':1,'kind':3,'accordance':3,'isolation':1,'matter':1,'supposed':1,'gigantic':2,'photosynthesis':1,'and':7,'modern':8,'mind':5,'locations':1,'interruptions':1,'any':19,'domestication':1,'relatively':2,'strength':1,'studying':1,'suddenness':1,'scotland':3,'isolated':1,'moist':1,'perigord':1,'internal':1,'which':43,'forming':2,'green':1,'circles':3,'inky':1,'play':1,'permian':1,'opposite':2,'scotland.':1,'most':15,'nothing':1,'difficulties.':1,'whalebone':1,'professor':1,'perceiving':1,'section':2,'fact':5,'quantity':1,'saying':2,'walking':1,'insects':2,'brief':1,'multicellular':1,'manchester':1,'prodigious':1,'changeful':1,'subtle':1,'thickness':3,'fine':1,'gilded':1,'knowledge':1,'stormy':1,'situations':1,'proportion':2,'considerable':1,'surroundings':1,'flood.':1,'darwin':1,'abeyance.':1,'photographs':1,'his':23,'exceptional':2,'expectation':2,'trees':2,'nearly':1,'words':1,'conjunction':1,'areas':1,'evolution':12,'luminosity':1,'violent':2,'flight.':1,'insectivorous':1,'miles':1,'croatia':1,'common':1,'activity':1,'view':1,'unison':1,'multiplying':1,'reference':1,'habit':1,'electrons--and':1,'intelligence':3,'radium':1,'silurian':1,'relative':1,'1921':5,'migration':1,'andromeda':2,'creating':1,'combustion':1,'ways':1,'opening':1,'birds--intelligence':1,'birds':14,'3':1,'various':4,'crookes':1,'europe':5,'we':1,'terms':4,'august':1,'parental':1,'ignorance':1,'queensland':1,'coma':2,'cities':1,'both':6,'many':26,'connection':8,'whole':1,'experimental':2,'point':1,'simple':1,'sweet':1,'vain':1,'ants':3,'height':1,'concluding':1,'adaptation':3,'scottish':1,'majestic':1,'extinct':1,'ether':5,'adults':1,'considering':2,'late':1,'unusual':1,'java':3,'addition':6,'damp':1,'three':6,'.':1,'tropical':2,'interest':2,'bewildering':1,'empty':1,'life':4,'sufficient':1,'search':1,'amphibians':1,'1864':1,'1869':1,'1868':1,'general':2,'captivity':2,'respiration':1,'plants':1,'sixes':1,'prehistoric':1,'these':10,'britain':4,'air':1,'lesser':1,'formats':1,'wild':3,'picturing':1,'girth':1,'albatros':1,'almost':1,'is':1,'it':7,'bipedal':1,'itself':2,'1895':2,'different':4,'locomotion;':1,'estuaries':1,'several':1,'crevices':1,'higher':1,'development':1,'safe':1,'leopard':1,'cleaning':1,'recent':1,'lower':1,'colour':6,'contact':2,'regulating':1,'biology.':1,'the':800,'chemistry':1,'summer':3,'less':2,'being':4,'ideas':1,'front':3,'shape':1,'hercules':3,'distant':1,'human':5,'succeeding':2,'rapid':3,'gentleness':1,'evolution.':1,'thinking':1,'alternate':1,'wet':1,'showing':2,'sussex':2,'early':2,'vacuum':1,'belgium':1,'cape':1,'hollow':1,'dreams':1,'ponds':1,'backboned':1,'brain-development':1,'lightning':1,'true':1,'either':2,'popular':1,'65':1,'methods':1,'some':52,'choosing':1,'sight':1,'illumination':1,'proper':2,'ourselves':3,'preparing':1,'dense':1,'dimensions':1,'for':2,'broad':1,'normal':1,'fluids':1,'1856':1,'tertiary':1,'cuttlefishes':1,'intimate':1,'miles.':1,'of':1,'agreement':1,'illustration':1,'constructive':1,'broken':2,'by':2,'comparison':3,'about':1,'central':3,'getting':3,'freedom':1,'hot':1,'gentler':1,'despair':1,'ox':1,'vogue':1,'or':1,'swimming':1,'1859.':1,'gearing':1,'fishes':3,'bats':1,'lieu':2,'your':2,'ontario':1,'her':5,'shells':1,'support':1,'sargasso':2,'question':1,'war':1,'north':6,'form':1,'mammals':4,'regard':15,'gait':1,'wireless':1,'1871--a':1,'thickness.':1,'with':1,'themselves':2,'partially':1,'blanketing':1,'places':3,'dordogne':1,'iron-mines':1,'diameter.':1,'laplace':1,'nature':8,'constant':1,'mesozoic':1,'certain':5,'paragraphs':1,'an':21,'as':2,'1894':1,'kind.':1,'1896':1,'work':1,'mutual':1,'inborn':1,'no':2,'overcoming':1,'peace':1,'erecting':1,'reality':1,'other':21,'electrical':2,'themselves.':1,'thickness--a':1,'conclusion':2,'gaining':1,'explaining':1,'star':1,'scrutinising':1,'sal-ammoniac':1,'shore-pools':1,'william':1,'scores':1,'variable':1,'astronomy':2,'structure':5,'building':2,'remote':1,'ancestral':1,'holes':1,'2001':1,'thames':1,'time':4,'fresh':7,'starting':1,'having':5},'unbranched':{'radial':1},'mouse':{'as':1,'is':1,'which':1,'chose':1},'boom':{'of':1},'disappear':{'for':1,'in':1},'if':{'unimpeded':1,'all':5,'it':25,'one':5,'nothing':3,'as':2,'at':1,'in':2,'our':2,'hydrogen':1,'any':5,'no':1,'there':8,'to':1,'going':1,'instead':1,'white':1,'ever':1,'division':1,'we':39,'that':2,'painted':2,'after':1,'every':1,'they':15,'progress':1,'not':1,'an':6,'you':17,'he':1,'a':11,'substances':1,'this':2,'light':1,'asexual':1,'she':3,'the':49},'grown':{'to':1,'now':1},'them--or':{'great':1},'belle':{'vue':1},'make':{'aerial':1,'mental':1,'some':1,'it':11,'society':1,'itself':1,'its':1,'galls':1,'for':4,'no':1,'any':2,'their':1,'new':1,'instinctively':1,'more':2,'to':1,'nothing':1,'themselves':1,'a':11,'up':8,'fewer':1,'mistakes':1,'donations':1,'the':9,'shows':1},'respectively.':{'the':1},'solidary':{'with':1},'concavity':{'.':1},'belly':{'very':1},'mixtures':{'of':1},'vegetable':{'mould':1,'matter':1,'kingdom.':1},'colonies':{'communities':1,'inside':1},'grows':{'hotter':1,'larger.':1,'hotter.':1,'to':1,'broader.':1,'old':1,'until':1,'out':1},'bells':{'drove':1},'evolve':{'such':1,'in':1,'.':1},'dissolution':{'must':1},'differing':{'for':1},'delight':{'in':1},'renaissance':{'of':1},'waterfall':{'is':1,'or':1},'sea-water':{';':1,'with':1,'back':1},'kin':{'by':1,'at':1},'supposing':{'our':1,'the':1,'that':3},'opportunity':{'and':1,'for':2,'of':1,'to':2,'during':1,'was':1},'butter':{'in':1},'bell.':{'copper':1},'changes':{'and':1,'again':1,'from':1,'e.g':1,'very':1,'of':7,'that':2,'.':3,'to':1,'as':1,'are':1,'which':1,'in':9,'occurring':1,'involved':1,'with':1,'wrought':2,'endless':1},'stimuli':{'and':1,'to':1,'from':1},'neptune':{'and':1,'2971.6':1,'quite':1,'s':1,'.':1,'by':1},'sea-anemone-like':{'polyps':2},'skull-cap':{'a':1,'indicates':1,'thigh-bone':1,'157':1},'809':{'north':1},'materials':{'nearer':1,'deeper':1,'for':1,'that':1,'this':1,'of':2,'are':1,'have':1,'such':2,'or':1},'impure.':{'the':1},'qualities':{'not':1,'of':1,'with':2,'sir':1,'.':2},'bootlace':{'and':1},'claims':{'of':1},'801':{'596-1887':1},'800':{'illustrations':1,'trillion':1},'left':{'and':4,'wall':1,'is':1,'it':2,'high':1,'alone':2,'at':1,'in':1,'only':1,'out':1,'isolated':1,'their':1,'behind':3,'his':1,'showing':1,'free':1,'else':1,'not':1,'hand':1,'a':1,'severely':1,'of':1,'having':1,'the':2,'side':1},'just':{'one':1,'as':28,'examined':1,'mentioned':3,'seen':1,'before':1,'detect':1,'two':1,'been':2,'foam-bells':1,'liberated':1,'peeping':1,'means':1,'outlined':1,'said':1,'mentioned.':1,'a':1,'on':1,'like':3,'this':1,'leaving':1,'dealt':1,'the':1},'sentence':{':':1,'set':1,'with':1},'ignorabimus.':{'a':1},'sporting':{'jellyfish':1,'or':1,'stock':1},'presume':{'that':1},'longish':{'hair':1},'fife--a':{'first-class':1},'identify':{'do':1},'salivary':{'juice':1},'fullness':{'freedom':1},'facts':{'and':3,'appear':1,'that':1,'of':2,'is':2,'there':1,'favour':1,'.':2,'to':2,'are':2,'point':1,'suggest':1,'not':1,'with':1,'recall':1},'yes':{'card':1},'yet':{'there':1,'just':1,'it':6,'discovered':1,'as':1,'at':1,'another':1,'in':1,'its':1,'even':1,'again':1,'would':1,'flash':1,'admit':1,'been':1,'to':1,'without':1,'passed':1,'stable':1,'we':2,'greater':1,'that':1,'here':1,'discover':1,'met':1,'they':1,'not':1,'now':1,'the':8,'man':1,'a':2,'steadfastly':1,'this':1,'many':1,'possessed':1,'studied':1,'these':1,'remain':1,'definitely':1,'she':1,'though':1,'found':1,'unborn':1},'infinitely':{'small':1,'long':2,'minute':1},'agile':{'hunters':1,'clever':1},'regarded':{'as':13,'the':2},'royal':{'astronomical':2,'observatory':6,'college':2},'long-lost':{'heir':1},'save':{'them':1,'that':1,'in':1,'it':1,'itself':1,'blood':1,'time':1,'fun':1,'the':1,'its':1,'man':1},'resting-place':{';':1},'ago.':{'when':1,'illustration':2},'nightjar':{'with':1,'.':1},'seventy-five':{'inches':1},'loose-limbed':{'fellow':1},'roadside':{'we':1},'forester':{'or':1},'gyrating':{'with':1},'background':{'and':1,'of':2,'professor':1,'parallax':1,'.':1},'destroy':{'a':1,'energy':1,'all':2},'hibernating':{'mammals':1},'dreamt':{'much':1},'grape-sugar':{'.':1},'dreams':{'mixed':1},'shoulder':{'.':1},'ascent.':{'illustration':1},'post-glacial':{'pleistocene':2},'nude':{'female':1},'autumn.':{'we':1},'manual':{'of':1},'unnecessary':{'display':1},'x-rays.':{'below':1},'admittedly':{'provisional.':1},'signal':{'noli':1,'illustration':1,'for':1},'greenland':{'whale':2},'deal':{'about':1,'of':5,'is':1,'.':1,'in':1,'further':1,'the':1,':':1,'with':8,'more':1},'sound--':{'five':1},'deaf':{'for':1},'somehow':{'condensed;':1,'associated':1,'breaking':1,'been':1,'underneath':1,'connected':1,'or':1},'dead':{'plants':1,'star':4,'stars':1,'forests':1,'cuticle':1,'.':1,'matter':1,'reverently':1,'fishes':1,'world':3,'animals.':1,'herring':1,'or':1,'before':1},'jupiter':{'and':3,'shine':1,'saturn':1,'from':1,'23':1,'is':3,'however':1,'.':2,'s':1,'which':1,'in':1,'the':1,'483.3':1,'as':1},'paragraphs':{'1.e.1':2,'1.e.8':1},'chromosomes':{'represented':1,'nuclear':1,'2':1,'lie':1},'disadvantage--a':{'broiling':1},'shapes':{'of':1,'282':1,'.':1,'in':1,'wave-motions':1},'dense':{'by':1,'waters':1,'forests':1,'or':1,'moisture':1,'region':1,'masses':1},'stations.':{'what':1},'normal':{'development':1,'number':1,'routine':1,'baby':1,'path':1,'condition':1,'circumstances':1},'distrust':{'which':1,'for':1},'nerve-cord.':{'4':1},'flounder':{'is':2},'conquering':{'them':1,'time':1,'the':2,'two':1,'space':1},'scotland.':{'what':1},'bold':{'enough':1},'novelties':{'may':1,'.':1,'or':1,'that':1},'burn':{'itself':1},'34':{'000':1},'translated':{'the':1,'mind.':1,'into':1},'bolt':{'escaped':1,'their':1},'tartan':{';':1},'flinty-shelled':{'radiolarians':1},'invertebrate':{'stocks':1,'animals':1},'bury':{'their':1},'air--by':{'means':1},'skin-twitching':{'muscle':1},'flourished':{'probably':1,'in':1},'conceal':{'.':1},'acceptation':{'of':1},'ribs':{'and':1,'of':1,';':1,'are':1,'.':1},'azure':{'blue':1},'islands':{'and':1,'off':1,'of':1,'but':1,'.':3,'in':1},'plesiosaurs':{'dinosaurs':1},'little-changed':{'descendant':1},'automatically':{'to':1,'adjusts':1},'ores':{'of':1},'nerve':{'to':1,'for':1,'man':1},'thinner':{'and':1,'as':1,'than':3},'for.':{'information':1},'formerly':{'had':1},'intellectual':{'keys':1,'tool':1,'property':2,'adventure':1,'coin':1},'chooses':{'for':1},'down':{'and':7,'into':1,'it':1,'as':1,'sec':1,'at':1,'in':2,'before':1,'even':1,'again':1,'from':2,'their':1,'when':1,'.':4,'to':9,'behind':1,';':2,'more':1,'towards':1,'unless':1,'upon':1,'losing':1,'with':1,'by':4,'a':1,'on':5,'branches':1,'these':1,'of':5,'taking':1,'without':1,'many':1,'the':20},'lies':{'in':1,'safe':1,'.':2,'at':1,'between':1,'the':1},'doctrine':{'of':2},'lieu':{'of':2,'travail':1},'refined':{'methods':1},'crab-apple':{'of':1},'ring-formations':{'on':1},'weathered':{'by':1},'amazingly':{'.':1},'initial':{'picture.':1},'jealousy':{'and':1},'approximate':{'and':1,'way':1},'saucerful':{'.':1},'fraction':{'1':1,'of':3,'about':1},'marten':{'for':1},'form':{'and':2,'accessible':1,'is':2,'some':1,'an':2,'as':1,'including':1,'are':1,'any':1,'what':1,'no':2,'.':5,'molecules':2,'we':2,'that':1,'atoms':1,'water':1,'part':2,'reappears':1,'a':16,'fossils':1,'this':1,'of':20,'centres':1,'the':9,'or':1,'once':1},'pinna':{'a':1},'analyse':{'it':1},'feminine':{'structures':1,'characters':1,'.':1},'powerfully':{'along':1},'snow-caps':{'in':1},'magellanic':{'cloud':1},'minuteness':{'of':2},'221':{'photo':1},'evinced':{'and':1},'manatees':{'and':1},'builds':{'up':1},'understood':{'before.':1,'unless':1,'that':1,'when':1,'to':1,'as':1},'harmony':{'and':2},'attached':{'to':3,'full':1},'bounds':{'of':1,'until':1},'pistil':{'thus':1},'centipede':{'s':1},'bird-dropping':{'perhaps':1,'on':2,'spider':1},'egg-eating':{'african':1},'cosmos':{'more':1},'attaches':{'to':1},'temper':{'rather':1,'the':1,'but':1,'.':1},'fractions':{'showing':1},'strengthening':{'of':1},'sticks':{'to':1},'discovery.':{'certain':1,'2':1},'seeds--and':{'resolving':1},'covers':{'them':1,'the':1},'sticky':{'club':1},'gland':{'of':1,'.':1},'mediocre':{'stock':1},'marking':{'the':1},'profit.':{'illustration':1},'discriminate':{'infallibly':1,'differences':1,'sifting':1,'between':1,'cards':1,'the':1},'x-rays--the':{'discovery':1},'font-de-gaume':{'on':2,'cavern':2},'generally':{'described':1,'burst':1,'correspond':1,'deep':1,'as':1,'accepted':1,'adopted.':1},'handed':{'a':1,'on':1,'over':3},'carnivorous':{'confined':1,'turtles':1},'mediaeval':{'and':1},'delivered':{'up':1},'dies':{'to':1},'felt':{'thought':1,'.':1,'than':1,'that':1},'diet':{'mainly':1,'in':1},'genealogical':{'tree':6},'journey':{';':1,'through':1,'round':1,'.':3},'routine--not':{'that':1},'authorities':{'on':1,'neanderthal':1,'recently':1,'referring':1,'is':1,'there':1,'regard':1,'who':1,'have':1,'the':1,'include':1,'think':1},'died':{'away':1,'when':1,'suffered':1,'.':1},'billion':{'is':1,'the':1},'immemorial':{'and':1,'spawning':1},'happening':{'to':1,'is':1},'potato':{'and':1},'assume':{'different':1,'its':1,'that':1},'blushing':{'but':1},'microcosm':{'only':1},'daily':{'.':1,'paper':1,'mail':1,'i.e':1,'mail.':1,'round':1},'jacket':{'and':1},'gorilla':{'g':1,'inhabiting':2,'.':1,'brain':1,'s':1,'164':1,'the':2,'man':3},'almanac':{'and':1,'.':1},'teeth':{'and':3,'on':2,'that':1,'of':1,'.':5,'obeying':1,'till':1,'without':1,'so':1,'are':3,'which':2,'in':3,'fixed':1},'skull-cap.':{'illustration':1},'restored':{'.':2,'it':1,'by':1},'milt':{'and':1},'managed':{'to':1},'limbless':{'lizard':1,'larva':1},'woodwork':{'knew':1},'relieve':{'the':1},'vestiges':{'have':1},'pierces':{'with':1},'hind-legs':{'and':5,'about':1},'manages':{'to':1},'skin':{'and':5,'able':1,'is':1,'pushed':1,'as':1,'are':1,'when':1,'responds':1,'.':2,'to':1,'was':1,'extended':1,'becomes':1,'during':1,'with':1,'minute':1,'begins':1,'on':1,'of':2,'involved':1,'the':1,'or':1},'leche':{'of':2},'shot':{'out':4,'in':1,'humming-bird':1},'mill':{'in':1,'.':1},'abundant':{'modern':1,'from':1,'material':1,'evidence':1,'flux':1,'near':1,'representation':2,'oxygenation':1},'milk':{'.':2},'resourceful':{'of':1},'retention':{'of':2},'anticipation':{'of':1},'depend':{'on':4},'disorders':{'are':1},'educable':{'and':1,'loquacious':1,'creature':1,'.':1},'pouch':{'and':2,'83':1,'the':1,'on':1},'father':{'secchi':1,'of':1,'sea-horse':1,'s':1,'lumpsucker':1,';':1,'stickleback':1,'was':1,'sea-spider':1},'travel.':{'but':1},'answered':{'that':1},'finally':{'and':1,'we':1,'marquis':1,'becomes':1,'there':1,'it':2,'discover':1,'to':1,'words':1,'resulted':1,'become':1,'the':1},'appendicitis':{'.':1},'reptiles':{'and':7,'appeared':1,'some':1,'are':1,'in':4,'birds':2,'before':2,'suggest':1,'when':1,'.':1,'finding':1,';':1,'burrowing':1,'but':2,'such':2,'with':1,'on':1,'e.g':1,'did':1,'of':1,'the':1,'or':1},'swoop':{'from':1},'marks':{'on':1,'most':1,'with':1,'an':1},'vegetation.':{'the':1,'illustration':1,'they':1},'suffered':{'and':1,'from':1},'must':{'often':1,'give':1,'describe':1,'influence':1,'it':1,'one':1,'recall':1,'exist':1,'at':1,'have':17,'go':1,'still':1,'open':1,'find':1,'use':1,'necessarily':1,'appear':1,'suffice':2,'point':1,'also':4,'live':1,'therefore':1,'include':1,'be':59,'draw':1,'move':1,'return':1,'extend':1,'rise':1,'gradually':1,'however':2,'surely':1,'struggle':1,'recognise':4,'imagine':1,'not':11,'affect':1,'come':1,'comply':2,'look':2,'convert':1,'remember':3,'of':1,'require':1,'leave':1,'admit':3,'always':4,'cease':1,'first':3,'obtain':1,'think':3,'sink':1},'fancied':{'there':1},'abundance':{'of':5,'so':1,'at':1},'mud-turtle':{'or':1},'string':{'of':1,'beads':1},'einstein--the':{'tides--origin':1},'theme.':{'when':1},'soapy':{'water':1,'froth':1,'film':1},'figment':{'of':1},'first-known':{'bird':1},'merit':{'of':1},'word':{'development':1,'obviously':1,'about':1,'now':1,'like':1,'for':1,'pencilled':1,'may':1,'processing':1,'atom.':1,'surface':1,'atoms':1,'specificity':1,'.':1,'s':1,'learn':1,'need':1,'has':1,'history':1},'dim':{'and':1,'luminous':1,'at':1},'banished':{'from':1},'did':{'fly':1,'naturally':1,'great':1,'good':1,'service':1,'this':1,'all':1,'long':1,'it':1,'to':1,'much':1,'exist':1,'at':1,'they':1,'not':14,'.':1,'really':1},'die':{';':1,'after':1,'or':1,'.':2},'cavendish':{'professor':1,'physical':1},'travels':{'from':1,'straight':1,'down':2,'at':3,'in':2,'along':2,'by':2},'item':{'in':1},'excellence':{'and':1,'that':1},'perceptual':{'inference.':1,'inference':5,'influence.':1},'round':{'and':3,'it':7,'at':1,'planets':1,'in':3,'its':2,'rapidly':1,'would':1,'.':1,'which':1,'mars':1,'hers.':1,'them':2,'his':1,'that':2,'each':1,'a':5,'on':2,'about':1,'this':2,'smooth':1,'these':1,'centres':1,'the':38},'attracting':{'other':1,'or':1},'talked':{'of':1},'dealing':{'with':4,'from':1},'radium.':{'the':1},'run':{'to':1,'leap':1,'on':2},'langmuir':{'has':1},'bipeds':{'and':1},'adds':{'to':1},'1910.':{'illustration':1},'heaviest':{'and':1,'uranium':1,'.':1},'favour':{'of':1,'the':2,'in':1},'rub':{'it':1},'international':{'donations':1},'filled':{'with':1},'dwarf':{'a':1},'fibre':{'.':1},'mr':{'.':11},'appetites':{'of':1},'french':{'mathematician':1,'copper':1,'authority':1},'tangent':{'is':1,'.':1},'congestion':{'and':1},'four-chambered':{'mammalian':1},'nooks':{'of':1},'wait':{'for':2},'box':{'and':3,'of':1,'containing':1,'green':1,'.':1},'boy':{'a':1,'or':1},'cranial':{'cavity':2,'walls':1,'capacity':1},'1924':{'the':1,'made':1},'shift':{'of':2,'against':1},'intelligence.':{'illustration':1},'works.':{'sec':1,'1.e.9':1,'professor':1,'-':1},'animals--the':{'most':1,'flying':1},'smoke-like':{'haze':1},'exploitation':{'is':1},'simultaneous':{'discharge':1},'atoms.':{'molecules':1,'illustration':1},'conveniently':{'divided':2},'hither':{'and':2},'adjustable':{'in':1},'elect':{'to':1,'were':1},'merely':{'passes':1,'striking':1,'of':1,'that':1,'approximate':1,'air':1,'as':1,'have':1,'represented':1,'finger-posts':1,'means':1,'the':3},'reef-building':{'coral':2},'everybody':{'knows':1,'.':1},'coaxing':{'he':1},'wealth':{'of':1},'sake':{'of':1,'professor':1,'there':1},'hundred-thousandth':{'part':1},'uncritical':{'generosity':1},'--are':{'related':1},'trilobites.':{'looking':1},'ways.':{'iii':1},'flaunting':{'conspicuousness':1},'100-inch':{'telescope':2,'reflector':1},'phosphorescent--they':{'become':1},'cooperated':{'with':1},'lessened':{';':1,'by':1},'alpines':{'and':1},'fish-eating':{'turtles':1},'sharing':{'project':1},'labyrinth':{'if':1},'malay':{'and':1,'to':1,'islands':1},'rigid':{'during':1},'knowledge--the':{'senses':1},'effort':{'to':2,'good':1,'.':1,'much':1},'robe':{'of':1},'capturing':{'a':2,'the':1},'bushels':{'of':1,';':1},'fly':{'off':4,'for':1,'far':3,'into':2,'spreads':1,'.':1,'which':2,'in':1,'flicking':1,'once':1},'flagellum':{'by':1},'avoiding':{'death':1,'enemies':1},'sum-total':{'of':1},'amarus':{'a':1,'124':1},'reappear':{'perhaps':1,'at':1},'growing':{'on':1,'point':1,'over':1,'moulting':1,'stronger':1,'period':1,'to':1,'under':1,'thicker':1,'out':1},'making':{'a':5,'great':1,'towards':1,'daring':1,'these':1,'of':7,'cache':1,'life':1,'what':1,'it':1,'antagonistic':1,'more':1,'experiments':1,'them':1,'sentences':1,'the':10,'.':1,'intelligent':1,'animate':1,'tentatives--new':1},'thicknesses':{'of':1},'sea-spider':{'carries':1,'or':1},'claim':{'a':1},'portals':{'were':1},'bullhead':{'and':1},'predict':{'the':1},'596-1887':{'email':1},'permutations':{'and':1},'agent':{'or':1,'.':1},'sample':{'sent':1,'david':1},'stroke.':{'illustration':1},'1.f.':{'1.f.1':1},'above--that':{'is':1},'redness':{'.':1},'pages.':{'illustration':1},'rays':{'streamed':1,'visible':1,'see':1,'are':5,'have':1,'in':1,'carry':1,'out':1,'from':2,'their':1,'had':2,'except':2,'.':5,'to':3,'poured':1,'which':1,'was':1,'crookes':1,'passed':1,'that':2,'becomes':1,'emitted':1,'but':1,'263':1,'impinged':1,'carrying':1,'post':1,'must':1,'shoot':1,'diverging':1,'of':4,'as':2,'will':1,'were':2,'at':1,'the':2,'consisted':1},'comb-bearers':{'or':1},'get':{'crumbs':1,'into':3,'mind':1,'an':2,'at':3,'another':1,'in':3,'out':3,'even':1,'little':1,'from':1,'two':1,'much':1,'white':1,'more':1,'good':1,'some':2,'free':1,'correspondingly':1,'plenty':2,'a':8,'both':1,'about':1,'this':1,'the':3,'farther':1},'mongols':{'include':1,'curly-or':1},'till':{'a':1,'we':1,'daybreak':1,'there':1,'all':2,'dawn.':1,'only':1,'the':5,'he':1},'orang-utan':{'a':1,'3':1,'4':1,'232':1,'233':2},'1.e.9':{'.':1},'1.e.8':{'or':2,'.':1},'pure':{'radium':1},'skates':{'and':1},'1.e.5':{'.':1},'1.e.4':{'.':1},'1.e.7':{'and':1,'or':1,'.':1},'1.e.6':{'.':1},'1.e.1':{'through':2,'with':1,'.':1},'1.e.3':{'.':1},'1.e.2':{'.':1},'146':{'the':1,'protective':1},'147':{'cuckoo-spit':1,'photo':2},'144':{'dead-leaf':1,'another':1},'142':{'photo':1,'000':1},'swayed':{'their':1},'140':{'photo':1,'photos':1},'141':{'protective':1},'strokes':{'and':1,'of':2},'max':{'schultze':2},'accessory':{'factors':1},'mankind':{'given':1,'evolution':1,'though':1,'migrations':1,'.':3,'so':1,'at':1,'the':1,'or':1},'gill-plates.':{'illustration':1},'grow':{'down':1,'for':1,'older':1,'it':1,'large':1,'in':1,'out':1},'jellyfish':{'easily':1,'starfish':1,'is':1,'there':1,'it':1,'aurelia':1,'has':1,'with':1},'scrambling':{'on':1},'aimless':{'wandering':1},'neck':{'and':1,'passes':1,'of':1,'.':1,'vertebrae':1,'or':1},'johnson':{'and':2},'duckmole':{'and':2,'or':3},'tale':{'.':1},'idea--of':{'taking':1},'sun--measuring':{'the':1},'rarified':{'form':1},'deposit':{'on':1,'in':1,'their':1},'african':{'representative':1,'mudfish':1,'race':1,'snake':1,'the':1,'ape':1},'basket':{'a':1,'of':1,'euplectella':2,'on':1},'mottlings':{'especially':1},'proposal':{'.':1},'development.':{'continental':1},'shield':{':':1,'.':1},'cathedral':{'would':1,'each':1},'civilisation.':{'pleistocene':1,'before':1},'pointed':{'ear':1,'out':2},'wishing':{'to':1},'entity':{'just':1,'that':1,'.':1,'to':2,'which':2,'providing':1},'stability':{'and':1},'globe-fishes':{'which':1},'rings.':{'illustration':1},'planetesimals':{'into':1,'formed':1,'which':1},'pitch':{'.':1},'differs':{'from':3,'greatly':1},'tropisms':{'a':1,'obligatory':1,'play':1,'.':1},'mind--mind':{'in':1},'rhinoceros':{'had':1,'the':1,'bison':1,'irish':1},'ice-fields':{'of':1,'cleared':1},'police':{'dog':1},'monitor':{'varanus':2},'interesting':{'and':1,'because':1,'saving':1,'give':1,'is':1,'sidelight':1,'questions':1,'in':2,'birds':1,'subject':1,'information':1,'glimpse':1,'ways':1,'point':3,'to':16,'way':2,'living':1,'minor':1,'case':1,'that':1,'gradations':1,'archaic':1,'than':1,'condition':1,'recent':1,'chapter':1,'picture':1,'outcome':1,'consequences':1,'study':2,'work':1,'circumstance':1,'race':1,'greenish':1,'problem':1,'works':1,'discoveries':1,'fact':5},'yorkshire':{'stream':1},'consequential':{'punitive':1},'ours':{'would':1,'does':1,'judged':1,'but':1,'are':1},'main':{'layers':2,'use':1,'force':1,'methods':1,'primate':1,'motive-force':1,'lines':2,'processes--':1,'stem':2,'seat':1,'trends':1,'mass':2,'pg':1,'groups':1,'stems':1,'chapters--the':1,'line':14,'one':1,'types':1,'scientific':1},'captivated':{'the':1},'fire-mist':{'that':1},'sooner':{'or':2},'gregariousness':{'and':1},'begun.':{'splitting':1},'markings':{'and':1,'on':1},'leopards':{'238':1,'trained':1},'killed':{'on':1,'by':1,'in':1},'possess':{'a':2,'what':1,'well-developed':1,'.':1,'in':1,'the':3,'an':1},'stock--common':{'to':1},'obviates':{'any':1},'meets.':{'these':1},'thymus':{'gland':1},'careless':{'statement':1},'rock':{'formations.':1,'to':1,'of':1,'kangaroo':2,'record':5,'whence':1,'many':1,'dove':1,'or':1},'vogue':{'but':1},'sheep-ranches':{'were':1},'eyelid':{'is':1,'used':1,'in':1},'elephants':{'and':1,'what':1,'the':1,'is':1,'.':1},'water-bird':{'such':1},'treacherous':{'internal':1,'ooze':2},'tobogganing':{'on':1},'richly':{'endowed':1},'unlock':{'locks':1},'glaciation':{'had':1},'sifted':{'and':1,'again':1,'.':3,'for':1,'out':1},'telescoped':{'manner':1},'description':{'aeschylus':1,'from':1,'.':1},'canada':{'and':1,'about':1},'emerges':{'the':1,'from':1},'afghans':{'alpines':1},'greeks':{'applied':1,'of':1,'said':1,'thought':1},'interference':{'as':1,'with':1},'miles':{'and':1,'into':1,'deep':2,'an':1,'winding':1,'distant':1,'per':4,'in':13,'odd':1,'out':1,'away.':1,'from':5,'would':1,'away':9,'long':1,'.':9,'to':1,'above':3,';':1,'was':1,'across':1,'though':1,'coloured':1,'driven':1,'satellites':1,'a':17,'wide':1,'getting':1,'of':8,'the':2,'or':1,'at':1},'emerged':{'a':1,'on':1,'about':1,'rich':1,'in':1},'dioxide':{'and':1},'correct':{'path':1,'the':1},'assurance':{'the':1},'behaving':{'to':1},'earlier':{'a':1,'chapter':1,'form':1,'generation':1,'organisation':1,'page':1,'stages':1,'or':1},'telegraphy':{'and':1},'sideways':{'towards':1,'scooping':2},'atomism.':{'an':1},'electrically':{'and':1},'imaginable':{'.':1},'paralysing':{'effect':1},'surface-atoms':{'of':1},'existed.':{'even':1},'sunlight.':{'saturn':1},'cough':{'or':2},'orb':{'on':1},'advance':{'and':1,'towards':1,'of':3,'is':1,'in':2,'has':2},'grist':{'to':1},'derivation':{'from':1},'language':{'and':1,'logos':1,'of':1,'there':1,'to':1,'as':1,':':1},'thing':{'and':1,'we':1,'works':1,'to':3,'may':1,'is':1,'.':2,'did':1,'as':3,'existed.':1,'has':1,'yet':1,'happened':1},'invalidity':{'or':1},'2971.6':{'164.78':1},'alevin':{'encumbered':1},'assuredly':{'much':1},'waited':{'on':1,'in':1},'first':{'and':3,'discovered.':1,'telescope':1,'bird--was':1,'beholding':1,'animals':5,'preparation':1,'crop':1,'dynasty':1,'observed':1,'known':6,'animals--beginnings':2,'view':1,'sight':3,'such':1,'alternative':1,'amphibians.':1,'vital':1,'creatures':1,'terrestrial':1,'living':4,'plants--the':2,'one-toed':1,'organisms':1,'make':1,'there':3,'question':1,'three':2,'.':1,'to':3,'prism':1,'became':1,'reptiles':1,'finger':2,'time':6,'learned':1,'if':1,'was':1,'bird':2,'body':1,'be':2,'men':1,'wheat':1,'that':1,'mammal':1,'becomes':2,'voice--surely':1,'divergence':1,'use':1,'but':1,'step':2,'part':1,'sir':1,'amphibians':2,'atom':1,'fishes':1,'invasion':1,'printing':1,'one':1,'come':1,'bronze':1,'a':2,'great':5,'backboned':1,'impressive':1,'showed':1,'gale':1,'successes':1,'of':2,'books.':1,'formed':1,'discoveries':1,'thought':1,'plants':1,'definitely':1,'place':2,'evolved':1,'error':1,'fishes.':1,'found':1,'the':2,'quarter':1,'called':1,'two':1,'know':1},'dwelling':{'on':1},'americana':{'with':2},'discharges':{'at':1},'miocene':{'and':2,'n':1,'was':1,'or':1,'others':1},'arrhenius':{'svante':1},'amidst':{'the':1},'violet-light':{'waves':1},'specificity':{'which':1},'carry':{'them':1,'his':1,'many':1,'messages':1,'it':2,'us':1,'an':1,'their':2,'out':1},'sounds':{'and':2,'on':1,'become':1,'were':1,'except':1,'two':1,'are':1,'in':1,'such':1,'the':1,'.':1},'fiji':{'.':1},'rome':{'observed':1,'were':1},'discharged':{'by':2,'.':1},'interchange':{'of':2},'little':{'reptile':2,'secure':1,'family':1,'taste':1,'of':1,'is':2,'mud-turtle':1,'colony':2,'primitive':1,'evidence':1,'likely':1,'books':1,'creatures.':1,'in':3,'conical':1,'species':1,'lid':1,'glimpse':1,'books--an':1,'monkey':1,'plankton':1,'detail':1,'chemical':1,'lower':1,'doubt':4,'finger':1,'colony.':1,'units':1,'bubble':1,'over':1,'store':1,'more':1,'plate':1,'ball':1,'garden':1,'fish':1,'that':1,'structure':1,'mammals':1,'wax':1,'use':1,'glass':1,'ferment':1,'resemblance':1,'dull':1,'pool':1,'room':1,'building':1,'about':1,'freshwater':1,'like':1,'grains':1,'uneasy':1,'whether':1,'scraping':1,'patch':1,'green':1,'ten-miles-wide':1,'pockets':2,'pinch':1,'the':1,'piece':2,'book':1},'man--the':{'culmination':1,'fountain':1,'metal':1},'unduly':{'obscure':1},'parallel':{'to':2,'wires':1},'1a':{'fore-limb':1},'plains':{'and':3,'to':1,'were':1},'pockets.':{'in':1},'alfred':{'a':1,'russel':1},'speaking':{'of':2},'mining':{'no':1},'dived':{'and':1,'appropriately.':1,'disappeared':1},'american.':{'professor':1},'continuous':{'and':3,'natural':1,'relationship':1,'since':1,'gradations':1,'.':1,'current':1,'accretion':1,'night':1,'raft':1},'accurately':{'the':1,'measured':1},'crevice':{'of':1},'ridges.':{'illustration':1},'undoubtedly':{'great':1,'radio-active--then':1,'an':1},'splendid':{'failures':2},'11':{'feet':1,'the':1,'magnetism':1},'10':{'what':1,'ft':1,'photo':2,'professor':1,'.':1,'feet':1,'000':3,'uranus':1,'1910.':1},'13':{'is':1,'substitutes':1},'cracks':{'of':1},'15':{'matter':1,'from':1},'14':{'dissipation':1,'photo':1,'the':1,'you':1},'sailing':{'of':1,'round':1},'16':{'rise':1,'minutes':1,'until':1},'19':{'1911':2,'photo':2,'consists':1},'scraping':{'of':1},'coco-palm':{'for':1},'victorian':{'.':1},'protected':{'and':1,'as':1,'e.g':1},'fertilisation':{'may':1,'of':1,'it':1},'centigrade':{'below':1},'were':{'all':3,'shot':1,'being':2,'soon':1,'forests':1,'discovered':1,'introductions':1,'through':1,'handed':1,'jointed-footed':1,'still':2,'birds':1,'waiting':1,'teeming':1,'destroyed':3,'to':1,'microscopic':1,'dead.':1,'employed':1,'hidden':1,'surprised':1,'presently':1,'very':3,'wiser':1,'not':5,'hunted':1,'like':1,'presented':2,'always':2,'porous':1,'intrigued':1,'found':4,'entirely':1,'prompted':1,'somehow':1,'born':1,'sifted':1,'borne':1,'even':1,'established':2,'opened':1,'for':1,'wrought':1,'laid':3,'dominated':1,'probably':4,'neither':1,'involved':3,'fed':1,'free':1,'quite':1,'met':1,'experimenting':1,'imperfectly':1,'represented':1,'atoms':1,'beginning':1,'gained':1,'on':1,'about':1,'feeling':1,'evolved--destined':1,'indivisible':1,'broken':1,'many':2,'substituted':1,'streams':1,'usually':1,'symmetrical':1,'first':2,'composed':1,'raised':2,'afterwards':1,'slipped':1,'suddenly':1,'within':1,'marked':2,'due':1,'brought':2,'done':1,'suspended':1,'often':1,'ichthyosaurs':1,'given':1,'ancient':1,'from':1,'hunters':1,'three':1,'approximately':1,'.':1,'few':1,'much':1,'too':1,'fish-lizards':1,'taken':1,'reptiles':1,'minor':1,'composed.':1,'separated':1,'formed':4,'amphibians':2,'it':1,'overcrowded':1,'trying':1,'true':2,'expounded':1,'electrified':1,'made':6,'these':1,'originally':1,'created':1,'extraordinarily':1,'replaced':3,'evolved':2,'of':4,'prematurely':1,'more':1,'buried':1,'crowning':1,'almost':1,'composed--':1,'an':2,'entombed':1,'as':1,'at':2,'in':5,'bones':1,'sharp':1,'no':1,'breaking':1,'able':4,'continually':1,'eagerly':1,'also':4,'prospecting':1,'accumulating':1,'several':1,'rediscovered':1,'gaining':1,'living':2,'immersed':1,'after':1,'most':1,'connected':1,'rejected':1,'eaten':1,'fishes':2,'such':1,'twenty-nine':1,'a':2,'succeeded':1,'largely':1,'later':1,'magnified':1,'so':3,'the':11,'left':3,'once':3},'gigantic':{'flywheel':1,'eye':1,'streamers':1,'orbits.':1,'sun':1,'orbits':1,'.':1,'magnet':1,'glowing':1,'shreds':1,'bubbles':1,'intellect':1,'as':1,'size':2},'proofread':{'public':1},'1.':{'illustration':1},'awns':{'or':1},'coconut':{'palm':1,'from':1},'conjectural':{'.':1},'mundane':{'goal':1},'occupies':{'only':1,'more':2,'an':1},'lice':{'have':1},'entombed':{'in':1},'kurtus':{'carries':1},'metcalf':{'outline':1},'spectacle':{'again':1,'197':1,'is':1},'occupied':{'the':1,'by':2},'euclid':{'or':1},'hitherto':{'known':1,'unknown':1,'shut':1,'we':1,'the':1},'intruder.':{'when':1},'bavaria':{'and':1},'efficient':{'to':1,'answers':1,'they':1},'isolate':{'it':1},'potential':{'energy':3,'.':1},'interior':{'of':4,'is':1,'yet':1,'energy':1,'periodically':1},'performance':{'of':1,'was':1,'hundreds':1},'inveterate':{'enemies':1},'volplanes':{'in':1},'jungle':{'fowl':1,'of':1,'ends':1,'folk':1,'tribes':1},'201':{'photo':2},'200':{'well-marked':1,'cassowary':1},'203':{'jackdaw':1},'202':{'a':1,'the':1},'205':{'a':1},'norman':{'lockyer':2,'inorganic':1},'trace':{'of':5,'the':1,'some':1,'any':1},'206':{'.':1},'arguing':{'whether':1},'208':{'photo':1,'from':1},'correlation':{'of':1},'paid':{'a':1,'for':3,'within':1,'toll':1,'the':1,'by':1},'blackest':{'ignorance':1},'beta':{'and':2,'rays':3,'electrons':1},'sheets':{'of':1},'tract':{'of':2},'contrasts':{'as':1,'in':1,'between':1},'conspicuous':{'and':3,'on':1,'is':1,'material':1,'canines':1,'against':1,'60':1,'black':1,'during':1},'especially':{'among':1,'from':1,'for':1,'prominent.':1,'on':1,'of':1,'when':3,'as':1,'commercial':1,'in':4,'those':2,'look':1},'surprising':{'power':1,'that':2,'when':1,'as':1,'effects':1,'fact':1},'fills':{'the':1},'bustard':{'the':1},'hedgehog':{'mole':1},'alone.':{'the':1},'precise':{'origin':1,'needs':1,'unless':1,'scientific':1,'form-resemblance':1,'object':1,'mechanism':1,'anthropology':1,'time':1,'studies':1,'answers.':1,'vision':1},'grouselike':{'above':1},'show':{'intelligence':1,'evidence':1,'even':1,'gill-clefts--':1,'what':2,'no':2,'interesting':1,'definite':1,'.':1,'to':1,';':1,'that':9,'notable':1,'how':2,'not':1,'man':1,'a':4,'on':1,'great':2,'this':1,'arrested':1,'us':1,'face':1,'without':1,'artistic':1,'teeth':1,'the':6},'gill-cover.':{'the':1},'forbidding':{'by':1},'drawings':{'and':1,'over':1,'by':2},'uranus':{'and':1,'neptune':1,'is':1,'1781.9':1,'.':1},'saying':{'nothing':2,'.':1,'merely':1,':':2,'that':4},'threshold':{'of':1},'corner':{'and':1,'of':5,'near':1,'at':1},'gaseous.':{'now':1},'directions--an':{'alternating':1},'fend':{'for':1},'stormy':{'weather':1},'plume':{'or':1},'treasure':{'at':1},'storms':{'on':1,'.':1,'to':1,'manifest':1},'enough':{'even':1,'has':2,'for':2,'of':2,'when':1,'however':1,'.':1,'to':17,'in':1,'the':1,'air':1},'either':{'case':1,'solitary':1,'of':2,'packet':1,'plants':1,'in':1,'the':1,'with':1,'before':1},'black':{'and':2,'body':1,'quills':1,'tip':1,'spots':2,'.':2,'surroundings':1,'stuff':2,'marks':1,'tips':1,'patch':1,'or':1},'germs':{'of':1},'down-rushing':{'water':1},'pegged':{'down':1},'abeyance.':{'disappearance':1},'awareness':{'and':2,'of':2,'.':1},'single-chambered':{'shell':1},'bittern':{'and':2,'begin':2,'is':1},'contracts':{'and':1,'under':1},'persisting':{'in':1},'midriff':{'or':1},'unimportant':{'and':1,'elements':1,'bladder':1},'nearly':{'a':2,'all':5,'every':1,'thirty':1,'everything':1,'twenty':1,'three':1,'related':2,'up':1,'twice':1,'so':3,'4':1,'9':1,'186':1,'the':2,'any':1,'two':1},'distinctly':{'later':1},'conjunction':{'with':1},'secondary':{'bodies':1},'pollen-nucleus':{'of':1},'bearings':{'cannot':1},'median':{'section':2},'yield':{'us':1},'morning':{'and':1,'coat':1,'especially':1,'to':1},'stupid':{'as':1,'bird':1},'photographically':{'reduced':1},'kernel':{'of':1,'is':1,'divides':1},'declared':{'that':1},'milling':{'and':1},'seas':{'and':2,'many':1,'had':1,'.':1,'to':1,'became':1,'are':1,'were':1,'went':1,':':1,'phosphorescent':1},'seat':{'of':4},'relative':{'distances':2,'sizes':2,'peace':1,'to':1,'absence':1,'in':1,'fixity':1,'shortness':1,'beginning':1},'j.':{'thomson':2},'mud-nests':{'or':1},'mcgregor.':{'profile':2,'a':1,'photograph':1,'sand-pit':1,'piltdown':3,'restoration':1,'the':3},'unaltered':{'.':1},'sameness':{'and':1},'permeates':{'all':1},'steadfast':{'sign':1},'eoliths':{'.':1},'habits--experiments':{'in':1},'behind':{'and':1,'both':1,'them':1,'it--a':2,'it':2,'us':1,'.':2,'while':1,'the':5},'chimpanzees':{'photos':1,'233':1,'but':1,'in':1},'radiated':{'away':2,'by':1,'in':1},'accustomed':{'to':2},'reading':{'of':1,'the':1,'ourselves':1,'anything':1,'or':1},'across':{'a':3,'space':3,'it':2,'the':11,'its':1,'empty':1},'roentgen':{'discovered':2,'s':1},'deletions':{'to':1},'august':{'1922':1,'1924':1},'parent':{'on':1,'of':5,'colony':1,'s':2,'has':1,'until':1},'parental':{'care.':1,'call':1,'care':17},'ascribed':{'the':1},'sea.':{'the':3,'2':2,'conquest':1,'proterozoic':1,'land':1},'tree-lizards':{'tree-kangaroos':1},'killing':{'and':2,'out':1},'dates':{'we':1,'from':3,'except':1,'varying':1},'vaporous':{'matter':1},'feelers':{'whereas':1},'diameter.':{'the':1,'innumerable':1},'diamond.':{'as':1},'according':{'to':24},'disappointment':{'when':1},'among':{'strongly':1,'all':1,'aquatic':1,'simple':1,'domestic':1,'them':1,'spiders':1,'domesticated':1,'birds':1,'cuttlefishes':1,'terrestrial':1,'lizards':1,'animals--by':1,'other':1,'which':2,'plant':1,'mammals':1,'mammals.':1,'dissimilars':1,'animals':4,'monkeys':1,'plants':3,'backboned':1,'this':1,'cosmic':1,'sand':1,'kindred':2,'the':21},'stretches':{'of':3,'from':1},'mound-birds':{'of':1,'young':1},'terse':{'and':1},'function--we':{'may':1},'flower-vase':{'well':1},'parachutists':{'and':1,'climbers':1},'maintained':{'this':1,'that':2,'by':1,'in':1},'stretched':{'in':1},'spans':{'the':1},'associated':{'a':1,'files':1,'his':1,'is':1,'enlargement':1,'reduction':1,'in':3,'the':2,'with':17},'reason--lays':{'her':1},'technicalities':{'.':1,'in':1},'considering':{'the':3},'sensible':{'things':1},'millimetre':{'and':1,'is':1},'caricature':{'of':1},'capable':{'of':3},'one-celled':{'plants--paint':1,'marine':2,'organism':1,'animal':1,'animalcules':1},'conditions.':{'illustration':2},'wilkinson.':{'jackdaw':1,'two':1},'mark':{'races':1,'individuals':1,'.':1},'attaching':{'too':1},'marked.':{'it':1},'mars':{'and':7,'is':3,'it':1,'maintained':1,'jupiter':1,'at':1,'141.5':1,'in':1,'there':1,'29':1,'.':2,'to':1,'going':1,';':1,'showing':1,'on':1,'october':1,'as':1,'were':1,'--jupiter':1,'the':1,'makes':1,'are':1},'tree-shrews':{'tupaia':1,'tree-mice':1,'hedgehog':1},'fiftieth':{'trip':1},'educated':{'who':1},'nautilus.':{'keen':1},'offered':{'some':1,'by':2,'for':1},'suns.':{'our':1},'dangerous':{'and':1,'to':1,'motto':1,'days':1,'maladies':1},'gripped':{'and':1,'in':1},'hippolyte':{'of':1,'which':1},'cod-banks':{'is':1},'dramatic':{'discoveries':1},'wake':{'of':1},'it.':{'the':1,'there':1,'whereupon':1,'other':1,'sun-spots':1},'captivity':{'has':1,'.':1},'sound':{'and':1,'conception':1,'though':1,'of':3,'.':3,'travels':1,'cannot':1,'another':1,'consists':1,'has':1,'judgment':1,'or':1},'turtles':{'and':3,'lay':1,'have':1,'which':1},'cannonade':{'of':1},'humming-bird':{'moths':1},'promising':{'wild':1,'a':1,'as':1,'.':1},'awakened':{'from':1},'margin':{'of':3,'are':1,'interlock':1},'luidia':{'which':1},'eventually':{'there':1,'like':1,'formed':1,'it':1,'to':3,'succeed':1,'they':1,'the':1,'creep':1,'after':1},'characteristics':{'of':2,'which':1,'e.g':1},'sleeping':{'prawns':1,'sickness':5},'strain':{'and':1},'sudden':{'and':2,'protrusion':1,'throwing':1,'irruption':1,'irritation':1,'withdrawal':1,'beginning':1,'acquisition':1,'movement':1},'tse-tse':{'fly':3},'dangerously':{'.':1},'ferns':{'conifers':1},'jackdaw':{'is':1,'balancing':2},'everyday':{'functions':1,'life':1,'intellectual':1,'bodily':1,'routine':1,'conditions':1},'movements':{'and':7,'on':1,'by':2,'that':3,'of':7,'is':1,'should':1,'how':1,'as':1,'implied':1,'are':2,'which':2,'in':1,'.':1,'until':1},'bags':{'of':1},'different':{'and':1,'set':1,'physiological':1,'methods':1,'instruments':1,'wave-lengths':2,'ages':1,'metals':1,'fellow':1,'rate':1,'manner':1,'times.':1,'in':3,'kinds':9,'as':1,'colours':5,'functions':1,'rays':1,'from':7,'ways':3,'relations':1,'.':3,'forms':1,'parts':1,'rates':1,'sedimentary':1,'105':1,'degrees':2,'main':1,'sections':1,'temperature.':1,'tacks':2,'idea--of':1,'aspects':1,'substances':4,'solution':1,'lines.':1,'groups':1,'fishes':1,'world':2,'rivers':1,'types':3,'areas':1,'lengths':2,'sizes':1,'this':1,'habitat-zones':1,'countries':2,'lines':2,'haunts':1,'thicknesses':1,'patterns':1,'length':1,'levels':2,'velocities':1,'latitudes':1,'terms':1},'paw':{'and':1,'to':1,'in':1},'pay':{'a':1,'out':1,'no':1},'oven':{'at':1},'same':{'and':1,'impression':1,'macaque':1,'facility':1,'appearance':1,'is':7,'table':1,'primary':2,'general':1,'attitude':2,'mistakes':1,'in':1,'bones':1,'corner':1,'face':3,'speed':1,'disadvantage--a':1,'as':3,'size':1,'story':1,'rays':1,'temperature':2,'opaque':1,'interesting':1,'nature':1,'proportion':1,'.':2,'state':1,'experiment':1,'way':9,'must':1,'conditions':1,'side':2,'foundation':1,'sex':1,'animal':1,'power':1,'format':1,'nest':1,'material':1,'gas':2,'effect':1,'period':1,'moment':1,'everywhere':1,'waves':1,'stem':1,'distance.':1,'day':1,'change':1,'stage':1,'kind':3,'type':1,'lines':1,'shape':1,'element':1,'magnet':1,'thing':1,'place':1,'principle':1,'fundamental':1,'time':8,'species':1,'applies':1,'table.':1,'essential':1},'eggs--up':{'towards':1},'thinning':{'of':1},'speech':{'.':1},'arguments':{'on':1,'.':1},'--all':{'the':1},'played--for':{'better':1},'intermediary':{'associative':1},'movement.':{'under':1},'extended':{'on':1,'tail':1,'from':1,'the':1,'their':1},'73000':{'10':1},'prominences':{'22':1,'these':1,'of':1,'which':3,'seen':2,'shooting':1,'ever':1},'assist':{'in':1},'companion':{'and':1},'running':{'on':2,'from':1,'no':1,'birds':1,'water':1,'leap':1,'leaps':1,'down.':2,'across':1,'down':2},'dynamo.':{'by':1,'illustration':1},'driven':{'outward':1,'by':2},'is--should':{'evolve':1},'waves.':{'the':1},'ripening':{'hard':1},'break':{'out':1,'up':2,'one':1},'largely':{'a':2,'feed':1,'based':1,'due':2,'with':1,'by':1},'roughly':{'group':1},'spoonful':{'of':1},'objection':{'there':1},'frontispiece':{'laplace':1,'.':1},'bottle':{'containing':1,'upside':1},'repulsive':{'or':1},'consisted':{'of':5,'only':2,'in':1},'generalisation':{'that':1},'money':{'paid':2,'if':1},'adjustments':{'which':1},'egg-cell':{'a':1,'certain':1,'within':1,'.':3,'fertilised':1,'in':1,'with':2,'divides':1},'down-drifting':{'food':1},'aspect':{'of':5,'can':1},'multiples':{'of':1},'sprang':{'the':1,'from':4,'but':1},'pinkish':{'eggs':1},'beagle':{'voyage':1},'crocodiles':{'and':1,'a':1,'there':1,'bury':1},'dipper':{'and':1,'or':1},'4':{'and':4,'another':1,'our':1,'living':1,'depict':1,'from':1,'tentative':1,'there':1,'.':11,'1':1,'500':1,'chromosomes':3,'information':1,'forming':1,'000':1,'external':1,'by':2,'a':2,'likeness':1,'this':1,'neptune':1,'the':6,'drawing':1},'grating':{'instead':1,'is':1},'pupa':{'stage':1},'extensive':{'repertory.':1},'heavier':{'to':1,'the':1,'materials':2,'more':1,'atoms':1},'pill':{'fizzing':1},'grip':{'and':1,'the':3},'1914.':{'baby':1,'4':1,'nos':1},'bitterling':{'cannot':1,'rhodeus':2},'tenses':{'.':1},'dissected':{'out':1},'tissues':{'and':1,'no':1,'of':1,'.':1,'to':1,'are':1,'or':1},'sight.':{'the':1},'water-measurers':{'in':1},'long-haired':{'angoras':1},'disadvantageous':{'dints':1},'aiming':{'at':1},'blankets':{'otherwise':1},'thames':{'gravels':1},'vertically':{'through':1},'dingo':{'or':2},'identifying':{'a':1,'different':1,'substances':1},'brain-development':{';':1},'serves':{'as':5},'lightning':{'278':1,'of':1,'in':1,'.':1},'facing':{'towards':1,'page':1},'chamber':{'only':1,'that':1},'behaviour-variations':{'which':1},'nose':{'that':1},'spinthariscope':{'making':1},'ascends':{'to':1,'into':1},'hunterian':{'professor':1},'mimicry.':{'colour':1},'flattely':{'and':1},'reveals':{'to':1,'the':2,'about':1},'alternately':{'and':1},'titan':{'a':1},'ascend':{'to':1,'the':2},'second.':{'their':1,'the':2,'sir':1},'specified':{'in':2},'images':{'of':1,';':1},'pasture':{'.':2},'ascent':{'of':7,'.':2,'not':1,'the':1,'by':1,'170':1},'gross':{'profits':1},'entities':{'of':1,'really':1,'.':1,'in':1},'apprenticeship--an':{'apprenticeship':1},'bubbles.':{'illustration':1},'footing':{'on':1},'fluids':{'and':1,'.':1},'considers':{'is':1},'pioneer':{'scorpion':1,'backboned':1,'animal':1},'critical':{'scientific':1,'discussion':1,'to':1,'time':1,'velocity':1,'spirit':1,'testings':1},'lunar':{'dawn':1,'apennines':1},'expressing':{'themselves':1,'or':1,'judgments':1,'feelings':1},'pipes':{'from':1,'by':1},'aboriginal':{'races':1},'rooks':{'and':1,'nests':1,'deal':1},'measuring':{'the':1,'does':1,'from':1,'it':2},'prerogative.':{'the':1},'buckling':{'up':1},'seconds':{';':1,'later':1,'takes':1,'.':2},'manufactured':{'by':1},'each':{'and':1,'other.':2,'foot':1,'pole':1,'constituent':1,'limb':1,'subject':1,'standing':1,'variety':1,'distinct':1,'incipient':1,'flash':1,'spiral':1,'.':2,'cell':2,'to':1,'prism':1,'other':9,'brick':1,'is':2,'foot.':1,'body':1,'star':1,'sinks':1,'molecule':1,'kind':2,'electrified':1,'electron':1,'descending':1,'atom':2,'date':1,'article':1,'with':3,'case':1,'independently':1,'substance':1,'particle':2,'of':11,'age':1,'tenanted':1,'metal':1,'element':2,'wave-length':1,'shade':2,'about':3,'side':1,'limb.':1},'notable':{'differences':1,'was':1,'feature':3,'power':1},'unusual':{'circumstances':1},'notably':{'the':3,'to-day':1,'planarians':1,'those':1},'trials':{'was':1},'arithmetical':{'question':1},'refers':{'to':1,'in':1},'stock--some':{'of':1},'psychical':{'level.':1,'research':1},'staff.':{'please':1},'stations':{'.':1},'instantaneously':{'into':1,'.':1,'he':1},'fringe':{'round':1},'insect':{'living':1,'lived':1,'flight':1,'larvae':3,'may':1,'is':1,'.':1,'visitors':3,'s':6,'lighting':1,'are':1,'pierces':1,'has':1,'with':1},'mixes':{'with':1},'practical':{'proposal':1,'judgments':1,'interest':1,'disappearance':1},'pockets':{'on':2},'west':{'of':1,'indian':1,'salt':1,'at':1,'coast':1},'corals':{'and':1,'worms':1,'which':1},'lasting':{'power':1},'provisional':{'picture':1},'road':{'home':1},'cautions':{'to':1},'lands':{'and':1,'in':1},'fertile':{'soil':1,'land':1,'meadows':1},'sea-grass':{'a':1,'area.':1,'red':1},'spreading':{'over':1,'meadows':1},'bountiful':{'and':1},'mills.':{'sir':1,'professor':1},'haddon':{'a':2},'gambiense':{'very':1,'69':1},'einstein':{'s':1,'has':1,'the':1,'who':1},'shortening':{'of':2,'the':1},'bon':{'has':1},'shells':{'of':1,'keeping':1,'are':3,'like':1},'camouflaging':{'giving':2,'and':1,'but':1},'brute':{'associates.':1,'man':1},'appears':{'on':1,'melancholy':1,'that':2,'to':1,'therefore':1,'the':1,'or':1},'caterpillars':{'and':2,'of':1,'to':1,'through':1,'they':1,'fasten':1},'laboriously':{'manufacture':1,'taught':1},'deepened':{'interest':1},'granules':{'and':1,'are':2},'unsettled':{'parts':1},'strikes':{'these':1,'the':1,'it':1},'white.':{'and':1,'banded':1},'trouble--an':{'instance':1},'land.':{'ages':1,'illustration':1,'getting':1},'spice':{'of':1},'arranged':{'his':1,'in':5},'romantic':{'and':1},'reflex':{'arc':2,'actions':8,'.':1,'action.':1,'action':4,'response':1,'chains':1,'than':1},'vice':{'versa':1},'dordogne':{'galley':1},'arranges':{'the':1},'pre-cambrian':{'eras':1},'blackbird':{'a':1},'shell.':{'the':1,'sec':1},'mimicked.':{'the':1},'moles':{'freshwater':1,'are':1},'affection':{'for':1,'.':1},'celestial':{'objects':1},'deliberation':{'and':1},'travailing':{'becomes':1,';':1,'of':1},'fanwise':{'to':1},'deer':{'of':1,'rabbit':1},'body-making':{'is':1},'deep':{'and':1,'water':2,'cups':1,'retreat.':1,'waters':3,'isolated':1,'waters.':1,'dark':1,'reason':1,'so':1,'sea':6,'in':2,'sea--the':1,'borings':1,'cold':1,'difference':1,'lake':1,'lying':1},'general':{'and':1,'impression':1,'outlook':1,'glare':1,'features':1,'symmetry':1,'trend':1,'life':1,'statements':1,'information':1,'question':1,'ideas':7,'relations':1,'statement':1,'significance':1,'public':2,'conclusion':1,'direction':1,'terms':3,'way':5,'very':1,'reader':1,'agreement':1,'flattened':1,'astronomy':1,'outlines':1,'we':1,'colour':2,'lines':1,'rule':1,'method':1,'aim':1,'agreement.':1,'succession':1,'opinion':1,'fact':1},'imagination':{'to':1,'.':1,'of':2},'examine':{'one':1},'planets':{'and':5,'they':1,'back':1,'spinning':1,'including':1,'are':2,'in':1,'seem':1,'what':1,'from':1,'would':3,'.':4,'to':1,'drawn':2,'life':1,'showing':1,'but':1,'five':1,'besides':1,'put':3,'of':3,'together':1,'or':1,'venus':1,'round':1},'lifetime':{'will':1,'namely':1,'by':1,'.':1},'cables':{'but':1},'film':{'and':1,'of':3,'is':1,'cling':1,'on':1},'fill':{'every':3},'tedious':{'time':1},'again':{'and':6,'as':3,'are':1,'in':5,'from':1,'knowledge':1,'would':1,'there':3,'.':1,'to':2,'does':1,'recaptures':1,'meant':1,'be':1,'we':3,'after':1,'led':1,'elsewhere':1,'that':1,'becomes':1,'never':1,'but':1,'with':1,'for':1,'many':1,'the':5,'having':1},'gbnewby':{'pglaf.org':1},'retiring':{'disposition':1},'field':{'and':3,'around':1,'of':6,'is':2,'it':1,'.':2,'as':2,'book':1,'240':1,'seen':2},'prism':{'and':1,'we':2,'produces':1,'into':1,'.':3,'entering':1,'separates':1,'is':1},'unaccustomed':{'and':1},'salamanders':{'of':1},'carapaces':{'form':1},'lafayette':{'alsatian':1},'coughing':{'or':1},'shelter':{'and':1,'of':2,'with':1,'for':1},'planet.':{'so':1,'if':1},'deriving':{'their':1},'important':{'stones':1,'and':2,'because':1,'is':5,'idea':1,'general':1,'phase':1,'as':1,'in':2,'mill':1,'activity--that':1,'for':2,'to':6,'role':1,'parting':1,'was':1,'however':1,'part':4,'food-plants':1,'parasites':1,'than':1,'linkage':1,'acquisitions':1,'advance':1,'acquisition':1,'the':1,'fact':6},'itself.':{'forms':1,'of':1,'but':1,'in':1},'tackle':{'the':1},'rainbow-colour':{'.':1},'revolve':{'the':1,'round':2},'sun--a':{'kind':1},'sneeze':{'on':1,'.':1},'hoofed':{'mammals':2},'remote':{'aquatic':1,'star':1,'age':1,'antiquity':1,'future':1,'ancestors.':1,'the':1},'recapitulation':{'of':3},'casts':{'off':1},'innocent-looking':{'little':1},'burrow':{'becomes':1,'which':1,'in':1},'u':{'of':1,'the':1},'resembles':{'a':1},'ovary':{'.':1},'once':{'and':3,'adjusted':1,'useful':1,'one':1,'rotating':1,'understood':1,'in':8,'said':1,'.':1,'attained':1,'got':1,';':1,':':1,'was':2,'tell':1,'more':4,'dominant':1,'that':1,'very':2,'eight':1,'they':1,'represented':1,'a':2,'on':1,'made':1,'effective':1,'larger':1,'rule':1,'every':1,'pulled':1,'or':1},'starting':{'a':1,'new':2,'point':1,'of':1},'represent':{'the':1,'stars':1,'tentative':1},'pheasant':{'and':1,'for':1},'forget':{'the':1},'founder':{'of':1},'suns':{'many':2,'.':1,'in':1},'invariable':{'.':1},'worms':{'and':2,'like':1,'that':1,'sea-cucumbers':1,'of':1,'began':1,'but':1,'.':1,'notably':1,'to':3,'2':1,'starfishes':1,'were':1,'requires':1},'founded':{'on':1},'sunk':{'very':1,'into':1,'in':1},'cooperative':{'relations':1},'expressions':{'of':3,'have':1},'plodding':{'methods':1},'shattered':{'to':1},'red-hot':{'ball':1,'gas':2,'.':1},'brain-box':{'and':1},'inexhaustible':{'fountain':1,'floating':1,'stores':1},'former':{'.':1},'bushmen':{'.':1},'those':{'upper':1,'pieces':1,'produced':1,'excessively':1,'farther':1,'in':1,'fine':1,'whose':1,'two':1,'regions':1,'immense':1,'contained':1,'other':1,'which':3,'between':1,'open-sea':1,'we':2,'kinds':2,'elsewhere':1,'that':13,'mammals':1,'offered':1,'who':3,'problems':1,'provided':1,'now':1,'with':1,'sensational':1,'great':1,'made':1,'of':15,'days':1,'glittering':1,'called':1,'bodies':1,'at':1},'hideous':{'and':1},'turnips':{'devouring':1},'distorting':{'effect':1},'straightforward':{'.':1},'sitting':{'a':1,'among':1,'figure':1,'for':1,'156':1,'the':1},'worm.':{'the':1},'interglacial':{'period.':1,'period':1,'times':1,'times.':1,'.':1,'or':1},'sun.':{'a':1,'look':1,'this':1,'it':1,'illustration':1,'one':1,'to':1,'sec':1,'but':1,'our':1,'the':2,'laplace':1},'fall':{'a':1,'on':4,'casting':1,'is':2,'upon':2,'suggested':1,'together':1,'down':1,'without':1,'from':1,'into':4},'difference':{'and':2,'is':1,'between':4,'to':1,'saturates':1,'does':1,'in':2},'expulsive':{'force':1},'mild':{'current':1,'moist':1,'electric':1,'temperatures':1,'of':1},'forking':{'of':2},'washing':{'the':1},'benevolent':{'visitors':1},'skeletal':{'rod':1},'applicable':{'to':1,'state':1,'taxes':1},'grubs':{'and':1},'camouflaged.':{'the':1},'hollowed-out':{'cotton-reel':1},'inorganic':{'world':1,'evolution':7,'groaning':1},'economically':{';':1},'pterodactyl':{'and':1,'or':2,'wing':1},'range.':{'the':1},'selected.':{'illustration':1},'aristocrat':{'apple-trees':1},'zero':{'of':2},'perception':{'and':1,'of':1,'rapidity':1},'further':{'and':3,'slowing':1,'down':1,'books':1,'human':1,'out':1,'knowledge':1,'for':2,'opportunities':1,'experiment':1,'until':1,'revision':1,'advantage':1,'complicated':1,'with':1,'contraction':1,'inland':1,'heightened':1,'ahead':1,'found':1,'the':1,'discovery':1,'changes':1},'double-slide':{'plate':1,'plate-holder':1},'creatures':{'and':4,'appeared':1,'it':1,'sec':1,'are':3,'have':3,'in':2,'if':1,'living':1,'from':1,'varied':1,'to':1,'began':1,'there':1,'.':6,'superficially':1,'which':3,'return':1,'that':1,'may':2,'act':2,'upon':2,'but':1,'let':1,'penetrate':1,'not':1,'such':1,'with':3,'by':1,'a':1,'on':1,'like':3,'of':4,'make':2,'turn':1,'were':1,'dance':1,'the':2,'round':1},'cilia':{'shown':1,'when':1},'stood':{'in':1,'at':1,'round':1},'short-lived':{'fishes':1,'relic':1},'swamps':{'and':1,'low':1},'storks':{'and':1,'pelicans':1},'associate':{'certain':1,'the':1,'particular':1},'caffeine':{'and':1},'everlasting':{'hills.':1},'schoetensack':{'.':1},'movement':{'and':6,'all':1,'is':4,'at':1,'in':2,'251':1,'if':1,'from':1,'for':1,'recalling':1,'.':1,'which':1,';':1,'was':1,'but':1,'a':1,'on':1,'of':6,'creates':1,'can':1,'the':1,'or':1},'outgoing':{'tide':1},'malaria':{'rife':1,'respectively.':1,'from':1,'organism':2},'martians':{'draw':1},'compilation':{'of':1,'copyright':1},'calculates':{'that':1},'component':{'cells':1},'ranges':{'and':2},'favourable':{'for':1},'cylindrical':{'.':2},'operating':{'on':1},'capacities--limited':{'when':1},'standard':{'of':2,';':1},'advance--the':{'central':1},'search':{'of':1,'after':1,'for':1,'facility:':1,'.':2},'tortoise':{'and':1,'of':1,':':1,'in':1,'has':1},'ichneumon':{'grubs':1},'cock':{'with':1},'stretching':{'as':1,'from':1,'for':1},'gleams':{'of':2},'milky':{'way':15},'formation':{'of':7,'due':1,'ten':1,'in':1},'narrow':{'and':1,'core':2,'like':1,'zone':1,'crowded':1,'sheaf':1,'passage':2,'marshes':1},'beak-like':{'jaws':1},'pathological':{'variation':1},'splashes':{'in':1},'24.--the':{'great':1},'transit':{'instruments':1,'is':1,'no':1},'mastering':{'the':1},'africa':{'a':1,'and':1,'india':1,'but':1,'coloured':1,'to':1,'asia':2,';':1,'where':1},'fastening':{'them':1,'pieces':1},'most--control':{'freedom':1},'empties':{'are':1},'extinction':{'of':1,'in':1},'establish':{'themselves':2,'race':1},'readily':{'separated':1,'lifted':1,'because':1,'heard':1,'swamped':1,'classified':1,'utilised.':1,'evaporate':1,'.':1,'understood':1,'see':1,'seen':1,'captured':1},'eye':{'and':3,'sees':1,'is':1,'are':1,'in':1,'.':6,'birds':1,'there':1,'next':1,'to':1,'which':2,';':2,'has':1,'that':1,'may':1,'fell':1,'continued':1,'by':1,'these':1,'of':1,'can':1,'the':1,'glued':1},'uniformity':{'and':1},'distinct':{'and':2,'individuality':1,'elements':1,'from':2,'species.':1,'sensation':1,'ancestors--a':1,'as':1,'classes':1,'tails':1,'sparks':1,'species':1},'hillock':{'of':1},'wiped':{'out':1},'destination':{'and':1},'two':{'years':1,'straws':2,'fore-limbs':1,'fine':1,'feather-stars':1,'forms':1,'molecules':1,'main':2,'photographs':2,'moorhens':1,'doors':1,'very':1,'minute':1,'feet':3,'positions':1,'spiny':1,'humps':2,'lashes':1,'phenomena':1,'back':1,'elements':1,'magnets':1,'creatures':1,'fingers':2,'halves':1,'chimpanzees':1,'new':1,'revolved':1,'ends':2,'electricities':1,'answers':1,'atoms':2,'hours':3,'wave-motions':1,'terminals':1,'groups':4,'others':1,'quite':2,'come':1,'days':1,'opossums':2,'of':4,'months':2,'haunts':1,'extremes':1,'streams':1,'or':11,'comes':1,'reflected':1,'screens':1,'skeletons':1,'millions':1,'working':1,'spiral':1,'long':1,'.':3,'macaques':1,'stars':2,'which':1,'hundred':7,'fractions':1,'eyes':1,'inches':4,'painted':1,'thousand':3,'exactly':1,'races':1,'cases':2,'cells':1,'shelves':1,'classes':1,'minutes':1,'and':8,'suggestions':1,'metals':1,'pieces':2,'periods':1,'have':1,'in':1,'paths':1,'different':5,'perhaps':1,'things':1,'widely':1,'lithium':1,'centrosomes':1,'facts.':1,'wires':1,'kinds':6,'opposite':1,'eggs':1,'teeth':1,'sides':3,'types':3,'together':3,'chief':1,'points':3,'sets':2,'serious':1,'the':1,'bodies':2,'foetal':1},'comparing':{'these':1,'notes':1,'reptiles':1},'cultivation':{'of':1},'endowed':{'with':4,'monkeys':1},'raft':{'across':1},'ovules':{'within':1,'in':1},'lapland':{'.':1},'leisure.':{'along':1},'unlink':{'or':1},'ahead.':{'the':1},'diamond':{'the':1,'point':1,'267':1,'.':1},'staggering':{'.':1},'views--the':{'nature':1},'chimpanzee':{'and':3,'illustrating':2,'157':1,'sitting':2,'is':1,'there':1,'.':1,'gorilla':2,'s':2,'2':2,'238':1,'at':1,'the':1,'an':1,'called':1,'233':1},'magpies':{'coral-snakes':1},'controlling':{'his':1,'nerve-centres':1},'particular':{'they':1,'some':1,'paper':1,'substance.':1,'sounds':1,'things':2,'emotions':1,'colours':1,'instance':1,'state':1,'difficulties':1,'interest':1,'conditions':1,'crab':1,'combination':1,'men':1,'atoms':1,'words':1,'circumstances':1,'case':1,'kind':4,'spawning-pond':1,'items':1,'moorhen':1,'place':1,'piece':1,'order':1},'straight-haired':{'mongols':2},'it--radium.':{'that':1},'none':{'being':1,'of':6,'the':1,'knew':1,'.':1},'hour':{'passes':1,'later':1,'would':1,'radium':1,'after':1,'.':1,'at':1},'middle':{'and':1,'zone':1,'of':2,'pleistocene':1,'ages':1,'oligocene':1,'.':1,'eocene':1},'recall':{'the':3},'sucks':{'in':1,'its':1,'milk':1},'cochroaches':{'and':1},'guards':{'them':2,'the':1},'remain':{'true.':1,'to-day':1,'inert':1,'just':1,'very':1,'freely':1,'together':1,'quite':2,'coherent':1,'in':2,'latent':1,'ether':1,'glorious':1,'apart':1},'pressing':{'a':1},'taut':{';':1,'or':1,'membranes':1},'pink-flush':{'on':1},'nothing.':{'evolution':1,'it':1},'specialized':{'in':2},'marble':{'for':1},'deg':{'.':6},'stubborn':{'as':1},'compare':{'with':2,'the':1,'jupiter':1},'gravels':{'in':1},'share':{'of':2,'it':1,'appreciatively':1,'in':1},'shard':{'the':1},'sphere':{'of':1},'minimum':{'the':1,'without':1},'numbers':{'and':2,'go':1,'above':1,'of':4},'hours.':{'at':1},'sharp':{'mountain-top-like':1,'prickle':1,'mouth-parts':1,'teeth':1,'nip':1,'conical':1,'points':1},'robinson':{'showed':1},'needs':{'to':2,'with':1,'occurring':1},'awkward':{'situation':1,'alacrity':1,'feint':1},'receptacle':{'for':1},'1873-6':{'gave':1},'acts':{'on':1,'as':4,'upon':1,'in':1},'responsibilities':{'.':1},'procellaria':{'pelagica':2},'sacred':{'river-tortoises':1},'profiting':{'by':2},'stir':{'water':1},'ensemble':{'of':1},'indian':{'and':2,'islands':1,'macaque':1,'ocean':1},'advice':{'to':1},'genius.':{'illustration':1},'narrow-beaked':{'crab':1},'tangere':{'leave':1},'blood':{'and':1,'corpuscles':2,'from':1,'relationship':1,'of':5,'is':1,'never':1,'it':1,'throughout':1,'.':4,'to':1,'as':1,'goes':2,'injected':1,'the':1,'has':1,'bringing':1,'or':3},'polynesian':{'mariners':1},'coming':{'and':1,'from':1,'down':2,'to':1,'with':1,'by':1,'out':1},'bloom':{'with':1},'response':{'to':1,'the':1,'from':1},'alps':{'at':1},'reappeared':{'his':1},'crowded':{'meteors':1,'when':1,'with':1,'haunt':1,'difficult':1},'coat':{'to':1,'used':1,'helps':1},'eats':{'its':1},'dragon':{'the':1,'flying':1,'draco':1,'94':1},'coal':{'burns':1,'consider':1,'would':1,'supply':1,'derived':1,'deposits':1,'for':1,'which':1,'.':3,'or':1},'skilful':{'artificer':1},'playing':{'mammals':1,'is':1,'period':2,'possum':1,'the':1,'with':2},'covered':{'a':1,'great':1,'over':1,'all':1,'everything':1,'the':3},'chopped':{'earthworm':1},'infant':{'and':1,'s':1,'.':1,'about':1,'three':1},'rounded':{'skull':2},'winged':{'phase':1,'snails':1,'insect.':1},'much-disputed':{'lines':1},'hypertext':{'form':1},'quiet-looking':{'cloud':1},'lumpsucker':{'mounts':1,'guards':1},'through':{'and':2,'it':3,'one':1,'our':1,'any':2,'unthinkably':1,'space':1,'.':1,'which':3,'orange':1,'1.e.7':2,'them':3,'his':1,'trees':1,'estuaries':1,'every':1,'but':1,'denser':1,'contrasts':1,'an':4,'a':19,'stone':1,'glass':1,'these':2,'air':2,'this':2,'the':54,'stages':1,'its':3,'bodies':1},'lava':{'rising':1},'filters':{'and':1},'existence':{'what':1,'135':1,'of':6,'is':3,'it':1,'.':2,'namely':1,'without':1,'are':1,'animal':1,'in':2,';':1,'by':1,'as':1,'if':2},'visceral':{'clefts':2},'bell-like':{'blossoms':1},'soddy':{'has':1,'frederick':1,'have':1,'puts':1,'one':1},'24':{'the':1,'were':1},'25':{'and':1,'of':1,'trillions':1,'000':6},'26':{'and':1,'we':1,'000':2,'tons':1},'27':{'illustration:':1,'000':1},'thrilling':{'a':1,'story':1},'21':{'1914.':1,'.':1},'22':{'from':1,'would':1,'tons.':1,'yerkes':1,'miles':1,'2007':1},'sodium':{'is':1,'lines':1,'iron':2},'rigel':{'466':1},'physophora':{'hydrostatica':2},'28':{'the':1,'deg.-34':1,'mars':1},'29':{'1919':1,'a':1,'drawings':1,'1908':2,'1919.':1},'late':{'polished':1,'professor':3,'years':1,'autumn':1,'as':1,'triassic':1,'.':1},'detected':{'a':1,'anywhere':1},'microscopic':{'cilia':1,'burdens':1,'organisms':1,'food':1,'study':1,'globules':1,'fertilised':1,'animal':3,'each':1,'animals':1,'algae':1},'--and':{'that':1},'bugbear':{'it':1},'sheaves':{'in':1},'triumphantly':{'from':1},'beginnings.':{'our':1},'good':{'and':1,'atmosphere':1,'old':2,'deal':6,'reasons':1,'idea':1,'as':3,'seed':2,'in':1,'insulators':1,'will':1,'touches':1,'.':2,'instance':1,'samples':1,';':2,'conditions':1,'eyes':1,'send-off':2,'illustration':1,'reason':1,'restoration':1,'purpose':1,'pair':1,'many':1,'second':1,'example':2,'practical':1,'conductor--six':1,'temper':1,'heel':1},'seeking':{'rather':1,'automatically':1},'gardens.':{'the':1},'sappers':{'and':1},'noticing':{'the':1,'that':1},'walls':{'and':1,'of':6,'so':1,'are':1,'nor':1},'compound':{'reflex':2},'olcott':{'field':1},'detach':{'or':1},'struggling':{'too':1},'association':{'a':1,'established':1,'and':1,'of':2,'professor':1,'when':1,'to':1,'which':1,'between':1,'meeting':1},'limpet':{'s':1},'mystery':{'of':1,'they':1,'drowned':1,'.':1},'easily':{'tamed':1,'be':1,'acquiesce':1,'blown':1,'supported':1,'washed':1,'selected.':1,'called':1,'as':1,'disturbed':1,'part':1,'seen':1,'get':1,'find':1,'comply':1},'deteriorates':{'.':1},'fish-like':{'characters':1},'evade':{'the':3},'abdomen--for':{'the':1},'ashes':{'of':1},'habits':{'and':5,'all':1,'there':1,'.':2,'while':1,'which':1,';':1},'2a':{'orohippus':1},'repeating':{'the':1},'possession.':{'if':1},'exquisite':{'tactility':1,'refinements':1},'horsetail':{'and':1},'harm':{'in':1},'everyone':{'is':2,'who':2,'recognises':1,'knows':1},'mental':{'activities':1,'life':2,'endeavour':1,'ability':1,'inheritance':1,'pictures':1,'subtlety':1,'life;':1,'equipment':2,'experimenting':1,'health':1,'aspect':1,'activity':1,'images':1,'aspect.':1,'mill':1,'endowment':1,'side':2,'powers':1,'qualities':1},'hundred':{'and':2,'trillion':4,'varieties':1,'strokes':1,'of':1,'thousand':2,'million':4,'years':2,'ways':1,'planetoids':1,'degrees':2,'stars':1,'in':1,'miles':3,'the':1,'times':1,'odd':1,'generations.':1,'millions':1},'hare':{'willow':2,'it':1,'.':1,'may':1,'s':1,'in':2,'the':1,'or':1},'hard':{'and':2,'saying':1,'work':2,'times':1,'substratum':1,'to':4,'in':2,'legs':1,'or':1,'red':2},'idea':{'that':4,'of':13,'is':1,'but':1,'how':1,'has':1,'was':1,'or':1},'foxes':{'and':2,'stoats':1},'macmillan':{'the':2,'.':4},'oil':{'on':2,'from':1,'is':1,'upon':1,'down':1,'must':1},'schuchert':{'again:':1,'s':1},'connect':{'them':1},'ripple':{'of':1},'hart':{'the':1,'is':1},'antarctic':{'circle--which':1,'shore':1},'shoulders.':{'the':1},'flower':{'and':4,'puts':1,'is':1,'.':1,'basket':3,'collects':1},'associations.':{'there':1},'pigeon':{'a':1,'because':1,'212':2,'gliding':1,'is':1,'continues':1,'s':1,'but':1,'brooding':1,'carrier':1,'which':1},'acting':{'on':3,'upon':2},'49.4':{'rigel':1},'flowed':{'along':1},'print':{'editions':1},'three-quarter':{'days':1},'waterholes':{'full':1},'rejuvenescence':{'e.g':1},'circumstance':{'that':1},'dealt':{'with.':1,'with':6},'extraordinary':{'protrusion':1,'strength':1,'proceeding':1,'power':1,'variety':1,'educability':1,'things':2,'results':1,'vigour':1,'therefore':1,'interest':1,'outbursts':1,'properties':1,'adaptability':1},'terminals':{'thus':1,'.':1},'members':{'of':12,'at':1},'backed':{'by':3},'entrancing':{'interest.':1},'beginning':{'again':1,'for':1,'this':1,'of':35,'when':1,'it':1,'.':1,'to':5,'at':1,'in':2,'was':2,'with':2},'poles.':{'our':1,'there':1},'demands.':{'as':1},'snails':{'various':1,'or':1},'omit':{'one':1},'brain...':{'.':1},'audacity':{'to':1},'72-inch':{'reflector':1},'varanus':{'139':1,'the':1},'down--sometimes':{'dangerously':1},'exercising':{'the':1},'reinforced':{'by':1},'copper':{'and':1,'wires':1,'coin--smaller':1,'that':1,'immersed':1,'in':1,'together':1,'.':1,'age.':1,'wire':3,'zinc':2,'were':1,'beech':1,'age':1,'is':5,'came':1},'bullies':{'of':1},'disregarded':{'only':1},'instances':{'of':1,'where':1,'must':1},'7918':{'1':1},'done':{'is':1,'.':1,'to':1,'as':1,'with':1,'by':1},'vibrate':{'about':1,'.':1,'in':1},'climbing':{'grasping':1,'up':1},'cups':{'whereas':1},'island-universes':{'they':1},'family.':{'viviparity':1},'light-gatherer':{'.':1},'construct':{'a':2},'hollows':{'of':1},'obligatory':{'movements':1},'183':{'evolutionary':1},'assumption':{'of':2},'186':{'photograph':1,'nautilus':1,'shoebill':1,'000':7},'187':{'photo':1},'statement':{'will':1,'that':4,'often':1,'in':1},'185':{'000':1},'rates':{'.':1},'compartment':{'a':1,'b':1,'was':1},'too':{'faint':3,'plainly':1,'simple':1,'soon':2,'high':2,'inhospitable':1,'cold':3,'thick':1,'stingy':1,'easygoing':1,'little':1,'deeply':1,'there':1,'long':1,'hot':2,'much':6,'sheltered':1,'was':1,'complete':1,'shallow':1,'generous':1,'complicated':1,'closely':1,'precious':1,'great':1,'short':1,'large':1,'severe':1,'were':2,'small':2,'serious':1,'soft':1},'muscles':{'and':4,'of':2,'to':1,'going':1,'are':1,'which':1,'in':1,'than':1,'at':1},'travail':{'of':1},'lightest':{'hydrogen':1,'atom':2},'needle':{'on':1,'magnified.':1,'.':1},'park':{'in':1},'procession':{'of':3,'or':1},'part':{'the':1,'corresponding':1,'for':1,'vaporised':1,'of':54,'into':1,'in':3,'.':1,'to':3,'at':1,'under':1,'obscure':1,'with':4,'company':1},'parr':{'become':1,'about':1,'which':1},'prodigious':{'expulsive':1,'speed--and':1,'speed.':1,'outpour':1,'quantities':1,'age':1,'.':1,'scale.':1,'rapidity':2},'selenium-cell':{'which':1},'believe':{'that':11,'in':1,'an':1,'to':1,'were':1,'the':1,'by':1},'don.':{'it':1},'jump':{'at':1,'out':1},'supposes':{'that':2},'b':{'c':1,'that':1,'of':1,'showing':1,'there':1,'when':2,'it':1,'.':7,'in':1,'some':1,'alteration':1,'others':1},'parent--little':{'likely':1},'damages':{'even':1,'costs':1,'-':1},'clodd':{'story':1},'866':{'000':1},'recording':{'of':1},'dissection--or':{'screwing':1},'totteringly':{'for':1},'supposed':{'that':4,'dead':1,'to':4,'indication':1,'have':1,'the':1,'he':1},'messrs.':{'macmillan':3},'treated':{'merely':1},'anthropoid':{'embryo':1,'stock--common':1,'apes':7,'apes--the':3,'type.':1,'apes.':1,'ape':4},'rhacophorus':{'that':1},'efface':{'itself':1},'trifles':{'felted':1},'pre-existing':{'organisms':1},'ages':{'and':3,'set':1,'afterwards':1,'is':1,'sec':2,'in':1,'before':1,'living':1,'organisms':1,'there':1,'had':1,'.':4,'to':2,'which':3,';':2,'has':1,'was':1,'be':1,'we':1,'passed':6,'necessity':1,'along':1,'he':1,'ago':2,'many':1,'of':1,'the':3,'or':1},'left-handed':{'vortices':1},'egg.':{'very':1,'8':1,'3':1},'paltry':{'pigmies':1},'agee':{'when':1},'confirms':{'our':1},'fading':{'away':1},'paths':{'a':1,'of':1,'round':1,'pursued':1},'acid':{'and':1,'water':1,'indigo':1,'caffeine':1},'built':{'a':1,'and':1,'elastic':1,'on':1,'of':1,'up':10,'as':1,';':1,'with':1},'depending':{'upon':1},'trip':{'sideways':1,'which':1},'majority':{'of':7,'is':1,'are':1},'lifts':{'a':2,'the':1},'build':{'a':2,'up':5,'but':1},'deepening':{'hold':1},'sea-perches':{'live':1},'facts.':{'sec':1},'unpalatability':{'or':1},'easygoing':{'kind':1,'conditions':2,'the':1,'swimmers--for':1},'capillaries':{'of':1},'sciences.':{'the':1,'it':1},'eggs':{'and':5,'into':1,'are':2,'have':1,'in':7,'close':1,'during':1,'lie':1,'develop':3,'perhaps':1,'two':1,'.':5,'to':1,'only':1,'which':4,';':1,'77':1,'i.e':1,'with':1,'by':2,'a':1,'on':1,'of':2,'inside':2,'attached':1,'were':1,'or':4},'trains':{'lit':1,'of':1,'and':1},'salmon':{'spawn':2,'do':1,'in':1,'of':1,'is':1,'196':1,'surmounting':1,'leaping':2,'.':1,'1':1,'s':1,'keeps':1,'fry':1,'still':1,'was':1,'or':1,'as':2},'tail-feathers':{'braced':1},'took':{'origin':1,'a':1,'his':1,'longer':1,'advantage':2,'no':1,'flying':1,'up':1,'element':1,'as':1,'place':2,'so':1,'the':2},'depths':{'of':4,'showing':1,'119':1,';':1,'whence':1},'most':{'obdurate':1,'beautiful':2,'primitive':4,'debased':2,'remarkable':4,'people':4,'powerful':4,'valuable':1,'far-reaching':1,'multicellular':1,'bones':1,'inconspicuous':1,'diverse':1,'distant':3,'commonly':1,'abstruse':1,'intricate':1,'fishes':1,'birds':2,'resourceful':1,'impressive':2,'living':1,'salient':1,'daring':1,'patent':1,'interesting':2,'favour':1,'chemical':1,'to':1,'complex':1,'attractive':1,'laborious':1,'mammals':2,'mysterious':3,'promise.':1,'important':8,'difficult':1,'we':1,'popularly':1,'general':1,'scientific':1,'spectacular':2,'intimate':1,'successful':1,'familiar':1,'apparent':1,'convincing':1,'significant':1,'notably':1,'eminent':2,'part':1,'enduring':1,'recent':1,'authorities':1,'cases':9,'trying':1,'monkeys':1,'fascinating':2,'puzzling':1,'a':1,'land':1,'animals':2,'playsomest':1,'effective':2,'famous':1,'marvellous':1,'of':16,'signal':1,'countries':1,'metals':1,'enemies.':1,'distinguished':3,'project':1,'solid':2,'severe':1,'dramatic':1,'tempting':1,'distinctive':1,'ancient':3,'astonishing':1,'essential':1,'extraordinary':1},'petromyzon':{'marinus':2},'significant':{'as':1,'periods':1},'fluctuate':{'the':1},'branching':{'air-tubes':1},'transmissibility':{'of':1},'charitable':{'donations':1},'seething':{'foam':1,'mass':1,'vapours':1},'mammoth':{'drawn':2,'tube':1,'woolly':1,'age':1,'the':1},'weigh':{'a':2,'about':1,'only':1,'them':1,'approximately':1},'overcrowding':{'of':2},'organism':{'explores':1,'reproduced':1,'that':1,'may':1,'is':2,'acts':1,'which':1,';':1,'plays':1,'the':2,'its':1},'thomas':{'henry':2},'secrets.':{'the':1},'particularly':{'rich':1,'characteristic':1,'fond':1,'disposed':1,'important':1,'suited':1,'in':1,'memorable':1},'217':{'the':1},'obligations':{'and':1,'has':1},'fins':{'and':1,'on':1,'used':1,'of':1,'as':1,'taut':2},'scattered':{'the':1,'throughout':1,'was':1,'hither':1,'in':1},'converge':{'in':1},'wasted':{'in':1,'.':1},'shore-pool.':{'sec':1},'relation':{'to':3,'between':3},'carefully':{'just':1,'read':1,'there':1,'considered':1,'examine':1,'drawn':2},'212':{'photo':2},'amphibians.':{'as':1,'palaeozoic':1,'in':1},'fine':{'art':1,'crown':1,'results':1,'textbook':1,'powder':1,'suspended':1,'children':1,'creatures':1,'bulbs':1,'inequalities':1,'particles':2,'enough':1,'details':1,'vapour-like':1,'specimens':1,'product':1,'description':1,'brains':1,'time-recording':1,'translucent':1,'cross-striped':1,'photograph':1,'sections':1,'work':1,'balance':1,'example':1},'find':{'all':1,'some':1,'it':2,'in':3,'any':1,'out':4,'no':2,'two':1,'their':2,'enough':1,'much':1,'if':1,'reflex':1,'them':1,'that':11,'they':1,'included':1,'by':2,'a':4,'none':1,'these':2,'solid':1,'the':5},'downward-projecting':{'sharp':1},'giant':{'recently':1,'instruments':1,'spiral':3,'amphibians':1,'planet':1,'amoeba':1,'reptiles':2,'stars':1,'elephant':1,'whirlpools':1,'reptiles.':1},'double.':{'after':1},'depended':{'and':1,'on':1},'dividing':{'the':1,'into':2,'themselves':1,'as':1},'nervous':{'disturbance':1,'restlessness':1,'system.':1,'system':4,'excitement':1,'rhythm.':1},'bird--was':{'about':1},'distributed':{'old-fashioned':1,'project':1,'to':1,'proofreading':2,'in':1,'throughout':1,'by':1},'unhappy':{'over':1},'lockyer':{'sir':1,'detected':1,'pointed':1},'convoluted':{'.':1},'eruptions':{'at':1},'credulous':{'and':1},'8':{'and':1,'with':1,'there':1,'.':2,'in.':1,'other':1,'100':1,'minutes':2},'gills':{'again':1,'except':1,'.':3,'are':1,'which':2,';':3},'stringops':{'and':1},'merged':{'into':1},'indetal':{'is':1},'forreri':{'which':2},'dust':{'and':1,'no':1,'of':4,'.':2,'to':1,'at':1,'although':1,'in':5},'permission':{'and':1,'from':8,'for':1,'of':15,'.':1,'in':1},'express':{'a':2,'and':1,'the':1,'themselves':1,'or':1},'water-vole':{'and':1},'shore-pools':{'and':2,'makes':1,'in':1},'cheaper':{'.':1},'courage':{'and':1},'breast':{'pocket':1},'silk':{'tassel':4,'from':1,'handkerchief':1,'.':2,'threads':1,'across':1},'target':{'on':1},'transitional':{'experience':1,'between':1},'experiments.':{'illustration':1},'freedom.':{'the':1},'doubled':{'straw':1,'their':1,'over':1},'1825-95':{'86':1,'one':1},'common':{'and':1,'among':1,'habit':1,'is':1,'in':1,'at':2,'sense':1,'insectivore':1,'knowledge':1,'to':4,'chameleon':2,'foraminifer':2,'frog':1,'.':1,'hydra':1,'assumption':1,'animal':1,'chaffinch':1,'stock':1,'mud-skipper':1,'starfish':2,'centre':1,'showing':1,'ancestry--are':1,'shore-crab':2,'objects':2,'drone-fly':1,'from':1,'telescopes':1,'otter':2,'accident':1,'basis':1,'eel':3,'ancestry':1},'doubles':{'of':1},'experiments;':{'and':1},'immigrants':{'from':1},'tended':{'to':2},'disc-like':{'collection':1},'lion':{'.':1},'individual':{'is':1,'life':2,'at':1,'in':1,'movements':1,'from':1,'stands':1,'opportunities':1,'to':1,'stars':1,'has':1,'development':6,'variability':1,'plant':1,'hairs':1,'but':1,'atoms':1,'nurture':1,'types':1,'these':1,'work':1,'experience':3,'liberty':1,'project':2,'habits':1,'can':1,'the':1,'works':1,'ears':1},'starfishes':{'is':1,'spend':1,'sea-urchins':1},'medley':{'of':1},'long-fingered':{'pterodactyl':1},'tender':{'plant':1,'all':1},'forthcoming':{'for':1},'hole':{'and':2,'is':2,'before':1,'only':1,'in':1},'rays.':{'illustration':1},'gunnel':{'escape':1},'degree':{'of':12,'an':1,'which':1,'in':1,'not':1,'the':1,'.':1,'than':2},'halved':{'along':1},'please':{'read':1,'visit':1,'check':1},'splendidly':{'active':1},'halves':{'of':1,'the':1},'smallest':{'particle':2,'web-footed':1,'atom.':1,'french':1,'atom':2,'known':1},'planarians':{'and':1},'vascular':{'hood':2,'tufts':1},'to.':{'during':1},'mouthful':{'of':1},'donate':{'royalties':1,'section':1,'please':1},'sexual':{'reproduction':2},'beetling':{'ape-like':1,'eyebrows':1,'brows':1,'eyebrow':2},'historical':{'evolution':1,'succession':1,'or':1,'fact':1,'evidence':1},'masterful':{'more':1},'deliberately':{'selecting':1},'vanishing':{'mammals':1},'half-hour':{'longer':1},'reverse':{'the':1,'.':1},'journeyed':{'three':1},'annual':{'amount':1},'sons.':{'professor':1,'skeletons':1},'foreign':{'elements':1},'quadruped':{'.':1},'protopterus':{'91':1,'it':1},'elliot':{'fry':1},'point':{'and':1,'on':3,'we':1,'to':9,'that':1,'very':1,'of':9,'is':7,'though':1,'it':1,'.':5,'sound':1,'let':1,'the':3,'forty-five':1,'where':1,'out':1},'simple':{'protists':1,'and':2,'calculation':1,'instincts':1,'worms':1,'one':1,'multicellular':1,'as':1,'bibliographies':1,'creatures':3,'living':1,'many-celled':1,'one-celled':1,'there':1,'ideas':1,'process':1,'book':1,'electrical':1,'animal':1,'maze':2,';':1,'reflex':3,'sort':2,'experiment':1,'worm-types.':1,'that':1,'labyrinth':1,'but':2,'wave':1,'consideration':1,'cases':1,'flagellates':1,'outline':1,'tentatives':1,'form':1,'beginnings':1,'problem':1,'piece':1,'predatory':1},'unremitting':{'vibration':1},'smother':{'many':1},'knipe':{'s':6},'newborn':{'earth--the':1,'cuttlefish':1,'pigling':1},'electrons.':{'this':1,'when':1,'sec':1,'it':1,'illustration':1},'simply':{'a':1,'because':1,'that':2,'to':1,'thin':1,'with':1,'told':2},'unsuccessful':{'movements':1},'zeta':{'orionis':2},'throughout':{'and':1,'set':1,'that':1,'to':1,'the':13,'numerous':1,'its':1},'suppressing':{'useless':1},'expensive':{'and':1},'transformations':{'of':1},'meteorite':{'i.e':1,'or':1,'which':3},'create':{'fresh':1,'are':1,'or':2},'vertebrate':{'race':1,'at':1,'characters':1},'screened':{'the':1},'rivals':{'a':1,'in':2},'secret':{'of':6,'under':1,'from':1,'was':1,'phosphorus':1},'dropping':{'on':1},'stoat':{'becomes':1},'experiments--indications':{'of':1},'astonishment':{'a':1},'slips':{'down':1},'doles':{'of':1},'gas':{'and':3,'shot':1,'less':1,'expanding':1,'is':1,'it':1,'four':1,'as':1,'at':1,'in':3,'still':1,'would':1,'no':2,'there':1,'when':1,'.':2,'glowing':1,'which':1,';':1,'was':1,'be':1,'they':1,'absorbs':1,'about':1,'bill':1,'identified':1,'will':1,'were':1,'the':2,'cooled':1},'gap':{'to':1,'between':1},'vane':{'for':1},'waves--the':{'ultra-violet':1},'tupaia':{'began':1},'likened':{'our':1},'top--the':{'falling':1},'grains':{'of':2},'solid':{'body':2,'core':1,'and':1,'or':1,'liquid':1,'gold':1,'body.':1,'of':1,'could':1,'crust':2,'.':1,'substratum':1,'matter':1,'iron':1,'in':1,'earth':5,';':1,'earth--a':1,'the':1,'is':1,'ground':1},'tree-porcupines':{'and':1},'bill':{'and':1,'adapted':12,'where':1,'would':1},'eclipsed':{'when':1},'cluster':{'of':3,'is':1,'in':3},'plovers':{'lie':1},'replaced':{'by':9},'teaspoonful':{'of':1},'rhinoderma':{'of':1},'schultze':{'.':2},'eclipses':{'can':1},'manner':{'of':3,'away':1,'.':1,'born.':1,'at':1,'rarely':1},'youthful':{'stages':1},'adjusts':{'its':1},'debased':{'with':2},'century':{'we':1,'telescope':1,'that':2,'when':1,'.':4,'the':1,'was':1},'violently':{'and':3,'agitated':3},'metazoa':{'.':1},'regius':{'professor':1},'itself':{'and':3,'because':1,'is':3,'back':1,'an':1,'as':2,'registers':1,'through':1,'at':1,'in':5,'out':1,'again':1,'what':1,'for':1,'.':4,'to':6,'which':2,';':1,'millions':1,'until':1,'more':3,'tentatively':1,'that':1,'along':1,'with':3,'by':1,'he':1,'a':1,'on':1,'up':1,'the':2,'or':1},'atom--the':{'new':1},'saline':{'matter':2},'salina':{'that':1},'evading':{'this':1,'or':1},'discourse':{'.':2},'copying':{'and':1,'distributing':1,'displaying':1,'or':1},'leisurely':{'life':1},'ray':{'of':10,'lankester':4},'sapiens':{'the':1},'alertness.':{'ii':1},'non-digitate':{'paired':1},'eels':{'ascending':1,'are':1,'seem':1,'circumvent':1,'or':1,'illustrate':1},'keys':{'by':1},'leopard':{'is':1,'the':1},'deperet':{'transformation':1},'moment':{'a':1,'to':1,'.':1,'how':1,'s':1,'in':1,'the':3,'by':1},'purpose':{'and':1,'of':1,'is':1,'and--it':1,'here':1,'.':1,'they':1,'such':1,'the':1,'with':1},'timid':{'orioles':1},'circumvented':{'by':1,'.':1},'predecessors':{'rather':1,'of':2,'we':1},'gestures':{'and':1},'organically':{'enregistered':1},'task':{'of':1},'noli':{'me':1},'craves':{'for':1},'gambier':{'bolton.':6},'thoroughly':{'terrestrial':1,'aquatic':1,'aerial':1,'well':2,'it':1,'erect':1,'protected':1},'chemistry':{'and':1,'.':2},'spend':{'their':2,'much':1,'half':1},'examining':{'a':1},'matter.':{'a':1,'lockyer':1,'hitherto':1,'so':1,'another':1,'he':1},'snow':{'mouse':1,';':1,'upon':1,'or':1,'.':4},'profoundly':{'and':1,'influenced':1},'shape':{'and':2,'irresistibly':1,'from':1,'for':1,'that':1,'of':6,'they':1,'changes':1,'change':1},'atomic':{'theory':1,'weight':3,'energy':3,'weights':1,'numbers':1,'in':1,'reservoirs':1},'matter;':{'a':1},'alternative':{'reactions':1,'pathways':1,'but':1,'between':1},'unawares.':{'professor':1},'riki-tiki-tavi':{'which':1},'apes.':{'man':1},'timber':{'for':1},'letting':{'it':1},'superficial':{'differences':1,'work':1,'resemblance':1,'.':1},'cut':{'glass--the':1,'the':1,'up':1,'that':1},'developed.':{'nor':1},'alternate':{'directions--an':1,'format':1},'hereditarily':{'.':1},'source':{'may':1,'of':15,'which':1},'twig-insects':{'put':1},'follow.':{'since':1},'round-mouths':{'cyclostomes':1},'snap':{'at':1,'in':1},'hydrosphere.':{'formative':1},'ganglia':{'.':1},'excited':{';':1,'clucking':1},'silken':{'balloon.':1,'threads':1,'cocoon--the':1},'overhanging':{'bank':1},'big':{'and':1,'telescope':1,'spring':2,'canine':1,'sea-anemone':1,'brain':3,'as':1,'legacy':1,'simply':1,'seal':1,'toe.':1,'clock':1,'forehead':1,'toe':2,'robber-crab':2,'full':1,'brains':2,'lens':1,'with':1,'collar':1,'tree':1,'worm':1,'eyebrow':1,'seeds':1,'fact':5},'adventures.':{'there':1},'smallness':{'by':1},'far-fetched':{'and':1},'disappeared.':{'there':1},'life--a':{'progress':1},'bit':{'of':5},'stingless':{'.':1},'knock':{'over':1,'against':1},'photosphere--the':{'sun':1},'degenerated':{'in':1},'follows':{'a':1,'on':1,'from':2,'that':3,'an':1,'therefore':1,'the':1},'flux':{'and':1,'is':1,'in':1},'indication':{'of':2,'that':1},'beyond-blue':{'waves':1},'cotton-reel':{'as':1,'attached':2},'cloudlets':{'cannot':1,'come':1},'complicated.':{'sec':1},'gibbon.':{'bone':1},'valleys':{'.':1},'often':{'beautiful':1,'exhibit':1,'flies':1,'followed':1,'flapped':1,'pays':1,'overlooked':1,'float':1,'some':1,'libelled':1,'crop':1,'an':1,'say':1,'been':2,'vitally':1,'at':2,'in':2,'touch':1,'seen':1,'dug':1,'nests':1,'linked':1,'seems':1,'forced':1,'given':1,'from':1,'also':1,'apparently':1,'faint':1,'reminded':1,'outside':1,'expressed':1,'find':1,'attracted':1,'only':1,'complex':1,'easy':1,'buys':1,'got':1,'swims':1,'gets':1,'intelligent':1,'grows':1,'shows':1,'poor':1,'badly':1,'attended':1,'to':1,'make.':1,'very':3,'great':1,'safe':1,'about':2,'it':1,'saves':1,'succeed':1,'a':3,'become':1,'not':1,'associated':1,'revealed.':1,'subtle':1,'is':1,'fly':1,'and':1,'made':2,'created':1,'did':1,'of':1,'when':1,'with':4,'reads':1,'different':1,'adjust':1,'so':1,'.':1,'found':3,'lined':1,'involves':1,'referred':1},'absolutely':{'true':1,'essential':1},'hair-like':{'whilst':1},'triceratops':{':':2},'abundantly':{'these':1,'tenanted':1},'back':{'and':6,'into':1,'as':1,'at':1,'in':1,'our':1,'still':1,'again':2,'from':2,'for':1,'downwards':2,'.':1,'to':20,'which':1,';':1,'over':1,'becomes':1,'illustration':1,'125':1,'affording':1,'with':1,'by':3,'of':11,'sometimes':1,'became':1,'teeth':2,'the':1,'or':1},'evolution--there':{'is':1},'martian':{'day':2},'examples':{'of':5},'mirror':{'and':1,'for':1,'produces':1,'is':4,'.':1,'the':1,'than':1},'candle':{'but':1},'ourselves':{'to':2,'into':1,'here':2,'.':1,'how':1,'the':2,'quite':1},'pronounced':{'that':1},'crooked':{'stick':1},'condensed--who':{'can':1},'contacts':{'between':1},'affects':{'the':1},'per':{'hour':1,'second':3,'cent':5,'hour.':1,'step':1,'minute':1},'brain-case':{'of':2},'too--the':{'rabbit':1},'eliminate':{'useless':1},'king-crab':{'limulus':1},'peg':{'pulls':1},'11.--mars':{'october':1},'good.':{'bibliography':1},'scaly':{'fore-limbs':1,'covering':1},'stilt-like':{'legs':1},'life-history':{'of':7,'into':1,'.':1,'for':1,'to':1},'patient':{'with':1},'magnifies':{'this':1},'300':{'000':2,'chickens':1,'times':2},'peculiarly':{'interesting':1,'penetrating':1,'liable':1},'continuing':{'the':1,'.':1,'before':1},'fed':{'on':1,'when':1,'by':1,'.':1},'subconscious':{'cerebration':1},'more-pork':{'or':3},'flanks':{'and':1},'times--glacial':{'and':1},'feigning':{'death':3},'web-wing':{'of':1,'or':1},'nematodes':{'many':1},'piled':{'around':1},'ounce':{'or':1},'offshoot':{'is':1,'from':5},'consequently':{'the':1,'good':1,'changed.':1},'tree-loving':{'animals':1},'aliens':{'like':1},'night-light':{'noctiluca':1},'invading':{'the':1},'inhospitable':{'had':1},'gramme':{'of':1,'.':1},'relapses':{'to':1},'realisation':{'of':1},'deep-violet':{'light-waves':1,'waves':2},'ontario':{'about':1},'live-and-let-live':{'compromise':1},'plane.':{'the':1},'drosophila':{'among':1},'mudstones':{'and':2,'which':1},'trying--the':{'deep':1},'infected':{'with':1,'by':1},'manifested':{'by':1,'in':1},'checks':{'online':1},'forward':{'past':1,'to':2,'as':1,'by':1,'.':1},'examination':{'of':4},'adjusting':{'their':1,'its':1},'exterminated':{'the':1},'niagara':{'we':1,';':1,'are':1,'for':1,'falls':2},'boys':{'place':1},'quiescent':{'well-protected':1,'pupae':1},'hopes':{'that':1},'role':{'of':1,'in':2},'hipparion':{';':1},'directed':{'forwards':1},'blanketing':{'the':1},'non-existence':{'they':1},'rejection':{'of':1},'casein':{'which':1},'detachable':{'electrons':1},'generating':{'strong':1},'lungbooks':{'.':1},'planet':{'and':3,'on':1,'from':1,'around':1,'turns':1,'is':3,'after':1,'neptune':1,'but':2,'.':4,'will':1,'to':2,'s':1,'so':1,'always':1,'venus':2,'might':1,'the':1},'fitter':{'folk':1},'exploration':{'of':2},'planes':{'.':1},'water-bag':{'over':1},'groove':{'.':1},'sea-urchin':{'s':2,'which':1},'recognition':{'among':1,'of':2},'sort':{'and':1,'of':28,'when':1,'at':1,'may':1},'constant':{'interchange':1,'movement.':1,'temporary':1,'temperature':1,'state':2,'able':1,'spectrum':1,'effect':1,'amount':1,'in':1,'movement':1},'punnett':{'that':1},'expedition':{'1873-6':1},'metal':{'tags':1,'uranium':1,'globe':1,'that':1,'ages':1,'to':1,'ages.':1,'displays':1,'the':1,'vapour':1,'is':1,'vapours':1},'scarlet':{'solar':2},'single':{'word':2,'cubic':1,'molecule':1,'young':1,'feature':1,'cell':2,'prism':1,'electron':1,'grain':4,'gramme':1,'leaf':1,'atoms':1,'cell--a':1},'clever':{'synthetic':1,'associations':1,'dwarf':1,'things':2,'dog':2,'as':4,'in':1,'creatures':1},'curl':{'of':1},'dragging':{'effect':1},'prevail':{'.':1},'brethren':{'by':1},'corners':{'being':1,'of':3,'in':1},'biology.':{'the':1},'dimmed':{'by':1},'teemed':{'with':1},'confine':{'ourselves':1},'explaining':{'a':1,'positive':2,'the':1},'best--':{'a':1},'accidental':{'introductions':1,'discovery':1},'neck.':{'illustration':1},'heir':{'is':1},'surface--before':{'in':1},'prepared':{'chemical':1,'the':1,'spectrum':1},'lively.':{'illustration':1},'restoration':{'of':1,'by':3,'modelled':6,'shows':1},'relatives.':{'illustration':1},'utterly':{'dependent':1,'extinct':1,'beyond':1,'artificial':1},'fishes':{'and':5,'emerge':1,'appeared':1,'is':1,'191':1,'it':1,'as':1,'are':2,'in':2,'moreover':1,'saw':1,'before':1,'perhaps':1,'pay':1,'there':2,'had':1,'.':5,'to':2,'much':1,'which':3,'crustaceans':2,'probably':1,'was':1,'do':1,'we':1,'utilise':1,'that':1,'becomes':1,'males':1,'120':1,'cannot':1,'fishes':1,'such':1,'hold':1,'continued':1,'a':1,'like':3,'these':1,'of':1,'could':1,'will':1,'near':2,'were':3,'the':3},'stoppages':{'register':1},'desert':{'where':1},'worsted':{'instinctive':1,'mistake':1},'implies':{'a':2,'ability':1,'that':2,'rather':1,'certain':1,'becoming':1,'an':1,'complexity':1,'if':1},'vehicles':{'of':2},'speculations':{'.':1},'responded':{'to':1},'ascertained':{'is':1},'unhatched':{'crocodile':1,'or':1},'presenting':{'the':1},'ignoramus':{':':1},'failures':{'notably':1,'which':2,'that':1},'ready-made':{'capacities':1,'centres':1,'responses':1,'cleverness':1,'or':2},'tube':{'and':3,'a':1,'fertilises':1,'that':1,'of':1,'began':2,'258':1,'.':5,'bringing':1,'s':1,'as':1,'are':1,'which':1,'leading':1,'from':1,';':1,'with':1,'the':2,'is':1,'at':1},'discards':{'when':1},'tombs':{'that':1},'commoner':{'still':1,'sight':1},'telescope--the':{'largest':1},'served':{'as':3,'for':1,'an':1},'intricate':{'canal':1,'colony':2,'branches':1},'vicious':{'circle':1,'snaps':1},'disintegration':{'or':1,'that':1,'of':3,'.':1,'vital':1,'proceeds':1},'interlock':{'preventing':1},'compose':{'atoms':1},'peanut':{'and':1},'literary':{'archive':13},'blaze':{'of':1,'had':1,'means':1},'masculine':{'and':3,'features':1},'weather':{'conditions':1,'comes':1,'.':3},'gravel':{'and':1,'by':1,'.':1},'coal-field':{'.':1},'little-brain':{'type':5},'stupefying':{'effect':1},'random':{'.':1},'presently':{'the':2,'recognised':1,'what':1,'.':2},'listeth':{'and':1},'time-recording':{'machine':1},'putting':{'food':1,'themselves':1,'two':2},'aerolite.':{'sec':1},'intelligence--of':{'putting':1},'arrange':{'a':1,'themselves':1,'the':1},'severely':{'alone':1},'origin.':{'the':1,'we':1,'none':1,'7':1},'diverging':{'towards':2,'from':1},'shock':{'and':1,'or':1},'mottled':{'brown':1,'appearance':1},'penguins':{'come':1,'are':3},'murrayi':{'and':1},'believed.':{'sec':1},'unsatisfied':{'tendency':1},'orohippus':{'a':1,';':1},'bleeding':{'a':1},'crow':{'and':1,';':1},'other.':{'the':1,'there':1},'crop':{'of':2,'up--a':1,'up':2},'rivers':{'and':4,'from':1,'of':2,'but':1,'.':4,'to':1,'as':1,'in':2,'with':1,'or':1},'frog-mouth':{'sleeps':1},'insertion':{'of':2},'exuberant':{'radiation':1},'laws.':{'the':1},'nests':{'on':2,'or':1,'swaying':1},'pale-white':{'belt':1},'zest':{'with':1,'.':1},'giving':{'condensed':1,'animals':2,'these':1,'rise':4,'up':1,'us':1,'an':1,'birth':1,'off':2,'the':2,'out':1},'assisted':{'the':1},'fat':{'below':1,'.':1},'habituation':{'the':1},'paddle':{'of':1,'which':1},'access':{'to':10},'away--you':{'may':1},'crossed':{'by':1},'3a':{'mesohippus':1},'exercise':{'fifty-four':1},'rhodesian':{'cave-man':1,'man':4},'beasts':{'of':1,'have':1},'works--the':{'furnishings':1},'pelage':{'than':1},'outlying':{'electrons':3},'nimble':{'and':1},'river.':{'2':1},'intercept':{'some':1},'sink':{'and':1,'from':1,'away':1,'down':1,'to':3,'in':1,'beyond':1},'others':{'likewise':1,'as':2,'are':3,'have':2,'in':3,'rapidly':1,'for':1,'there':1,'.':4,'to':1,'which':1,'regard':1,'that':2,'read':1,'who':1,'such':1,'worked':1,'like':4,'thought':1,'suggests':1,'remain':1,'were':2,'at':1,'the':1,'weaves':1,'or':1,'climbers':1},'tremor':{'it':1,'.':1},'safer':{'to':1},'implicit':{'in':2},'widening':{'spread':1},'respiration':{'and':1,'than':1},'stalks':{'a':1,'which':1},'broken':{'and':2,'down':2,'off':2,'shells':1,'up':6,'.':1,'past':1,'their':1,'hill':2,'empties':1},'33':{'photo':2},'32':{'a':1,'comet':1,'600':1},'31':{'15':1,'735':1,'vast':1},'30':{'000-50':1,'1885':1,'000':2,'days':1},'37':{'photo':2},'alaska':{'and':1},'35':{'feet':1,'tons.':1,'000':1},'redbreast':{'and':1},'wasplike':{'which':1},'climb':{'on':1,'the':1,'up':1},'tubercles':{'on':1},'composed':{'of':13,'.':1},'named':{'coronium.':1,'the':1,'darwin':1,'20417.txt':1,'brown':1},'land-crab':{'birgus':1},'67.2':{'0.62':1},'sculling':{'and':1},'vulcanite':{'and':1},'decrease':{'of':1,'until':2,'in':1},'names':{'in':1},'oval':{'and':1,'than':1,'.':1},'tap':{'this':2},'lime':{'the':1,'64':1},'links':{'and':1,'to':1,'or':1},'readable':{'by':1,'form':1},'cretaceous':{'white':1,'there':1,'strata':1,'era':1,'period':2},'themselves':{'nearest':1,'into':3,'pass':1,'as':1,'are':3,'have':1,'in':6,'go':1,'if':1,'from':1,'.':5,'to':1,'adequate':1,'traceable':1,'then':1,'we':1,'very':1,'sufficient':1,'affording':1,'by':3,'whenever':1,'of':1,'up':1,'spontaneously':1,'unmistakably':1,'so':1,'energetically':1},'pre-arrangements':{'of':2,'we':1},'oily':{'water':1},'excitedly':{'.':1},'engender':{'where':1},'ancestral.':{'the':1},'myriads':{'of':1},'magnesium.':{'illustration':1},'proton':{'.':1},'train':{'travelling':1,'.':1},'indifferent':{'or':1},'batesian':{'after':1},'harvest':{'of':1,'at':1,'field':1},'elbow-room':{'for':1},'hints':{'of':1},'swooping':{'gull':1,'leaps':1,'87':1},'account':{'of':4,'has':1,'for':8},'understanding.':{'for':1},'f':{'.':7},'crickets':{'and':2},'pelicans':{'and':1},'non-radiant':{'matter':1},'closing':{'of':1,'words':2},'continuity':{'of':1},'experiential':{'learning.':1},'violence':{'.':1},'instinct--a':{'useful':1},'e.g.':{'nitrates':1},'proportions':{'on':2,'for':1},'reconstructed':{'from':2},'renewed':{'our':1},'mixture':{'of':2},'water.':{'the':2,'illustration':3,'in':1},'bones':{'and':2,'e.g':1,'of':2,'some':1,'.':1,'running':1,'slowly':1},'native':{'of':1},'daring':{'operations':1,'of':1},'democracy':{'.':1},'noises':{'does':1},'holds':{'a':1,'also':1,'its':1,'together':1,'in':1},'regions':{'of':3,'to-day.':1,'are':1,'or':1,'empty':1,'farther':1},'flood.':{'there':1,'sec':1},'lamp':{'and':1},'proceeded':{'far':1,'further':1},'called--it':{'will':1},'furnace':{'the':1,'like':1},'imprints':{'from':1},'says:':{'all':1,'they':1},'watery':{'with':1},'dull-red':{'heat':1},'gill-clefts':{'are':1,'they':1},'waters':{'and':1,'that':1,'afford':1,'of':5,'allows':1,'.':4,'under':2,'covered':2,'the':1,'beyond':1,'where':1,'quite':1},'philosophy':{'of':1},'collection':{'will':1,'of':4,'so':1,'are':1,'.':1},'mixed':{';':1,'all':1,'together':1},'them--simple':{'one-celled':1},'united':{'states':13,'states.':1},'preferred':{'to':1},'multiplication':{'of':4,'into':1,'takes':1,'covers':1},'soup-plate':{'but':1},'primers':{'beginning':1},'chasing':{'mates':1},'tethering':{'the':1},'bind':{'animals':1,'long':1},'lines':{'and':2,'it':1,'replace':1,'not':1,'as':1,'are':3,'have':1,'in':2,'birds':1,'would':1,'.':3,'to':2,'which':1,'drawn':1,'we':1,'they':1,'fishes':1,'he':1,'on':2,'of':7,'will':1,'placed':1,'became':1,'the':2},'correspond':{'to':4},'chief':{'among':1,'use':1,'kinds':1,'scientific':1,'importance':1,'executive':1,'theories':1,'four':1,'plains':2,'reason':1,'classes':2,'stocks':1},'counterbalances':{'its':1},'stony':{'meteorite':1},'subsequently':{'fed.':1,'ignored':1},'lined':{'with':2},'furnish':{'a':1,'the':2,'data':1},'motions.':{'sec':1},'africans':{'straight-haired':1},'lens.':{'a':1},'symbols':{'of':1,'help':1},'alacrity':{'towards':1,'with':1},'horns':{'but':1},'agricultural':{'pioneers':1},'bunch':{'of':4},'industries':{'of':1,'.':1},'bridges':{'the':1,'were':1,'he':1},'negotiated':{'he':1},'le':{'verrier':1,'bon':1},'lb':{'.':1},'la':{'chapelle-aux-saints':2},'labor':{'in':1},'age':{'and':4,'just':1,'it':1,'as':1,'in':5,'whereas':1,'seems':1,'.':4,'to':3,'which':1,';':2,'has':1,'was':1,'more':1,'that':1,'after':2,'amphibians':1,'by':1,'dates':1,'of':13,'could':1,'lasted':1,'without':1,'the':2},'squatting':{'figure':1},'marsh':{'and':2,'birds.':1,'.':1},'bridged':{'very':1},'diverts':{'.':1},'junction':{'of':1},'greater':{'distance':2,'distorting':1,'plasticity':1,'intelligence':1,'in':1,'antiquity--perhaps':1,'celandine':1,'resistance':1,'possibilities':1,'rate':1,'part':2,'mass':1,'compactness':1,'interest':2,'activity':1,'concentration':1,'than':7,'accuracy':1},'descendants':{'as':1,'to-day':1,'.':1},'faunas':{'of':1},'dam':{'of':1,'.':1},'gauging':{'their':1},'cock-paidle':{'probably':1,'or':1},'phagocytes':{'may':1,'which':1},'accumulates':{'a':1},'faunal':{'drift':1},'day':{'and':10,'is':3,'it':2,'comprised':1,'as':1,'are':1,'in':1,'seem':1,'from':1,'for':1,'rather':1,'when':3,'long':1,'.':7,'also':1,'therefore':1,'covered':1,';':1,'was':1,'we':2,'alighting':1,'becoming':2,'sink':1,'one':1,'by':2,'he':1,'of':1,'equal':2,'were':1,'the':2},'6.--solar':{'prominences':1},'least.':{'these':1},'radiant':{'heat':2,'matter.':1,'than':1,'element':1},'tenanted':{'and':1,'the':1,'to-day':1,'by':1},'identified':{'an':1,'by':2,'.':1},'blazing':{'star':1},'exploring':{'new':1,'the':1,'with':1,'habit':1},'slipping':{'down':2,'back':1},'harness':{'this':1,'and':1,'the':1},'integumentary':{'structures':1},'references':{'to':2},'giants.':{'thus':1},'jasper':{'did':1,'studied':1},'movement-controlling':{'organ':1},'vestigial':{'muscles':1,'structures':4,'third':1},'attendant':{'on':1,'field':1},'pivot':{'the':1,'through':2},'slumped':{'together':1},'tubular':{'sea-anemone':1,'shells':1},'suctorial':{'mouth':1,'tube-feet':1},'kids':{'and':1,'foals':1},'inch':{'and':2,'less':1,'of':3,'long':2,'.':6,'at':1,'in':7,'thick':3,'one':2,'or':1,'thick.':1},'wholly':{'of':1},'mate':{'and':1,'kith':1,'s':1,'has':1},'oriental':{'race':1},'technically':{'this':1,'called':1},'red':{'and':4,'fife':1,'spring':1,'deer':1,'yellow':1,'disc':1,'at':1,'tumultuous':1,'mouth.':1,'giant':1,'end':1,'sandstone':2,'.':3,'glowing':1,'stars':3,'orange':1,'star':3,'on':1,'prominences':1,'spot':1,'seaweeds':1,'ones':1,'blood':1,'waves':1,'fife--a':1,'card':1,'a':1,'worsted':2,'flames':3,'glory':1,'light':1,'region':1,'will':1,'calcutta':2,'the':1,'tinge':1,'or':3,'seaweed':1},'approached':{'too':1},'many-celled':{'wheel':1,'animals':1,'organism':1,'animal':1,'creature':1},'lizzie':{'had':1,'the':1,'never':1,'was':2,'s':1},'others--which':{'is':1},'discover':{'a':1,'that':2,'this':1,'differences':1,'some':3,'their':1,'how':1,'in':1,'the':2},'fourteen':{'hours':1,'days':2,'or':1},'coronium.':{'measuring':1,'we':1},'approaches':{'to':1,'the':3},'electricity--electric':{'current--the':1},'trends':{'of':1},'qui':{'vive':1},'likelihood':{'far':1,'the':2},'young--a':{'use':1},'backwards':{'and':1,'we':3,'for':1,'over':1,'when':1,'it':1},'yard':{'in':1},'mortar':{'of':2},'chicken':{'procellaria':2},'allied':{'to':4},'barriers':{'.':1,'must':1},'retain':{'a':1,'their':1},'mammal-like':{'and':1},'empire.':{'he':1},'south':{'sir':1,'poles.':1,'of':4,'africa.':1,'american':3,'pacific':1,'.':3,'pole':1,'poles':1,'in':1,'america':4},'predominate':{'over':1},'complete.':{'illustration':1},'rudely':{'dressed':1,'shaken':1},'finest':{'triumphs':1,'measurements':1,'exhibition':1,'gold':1},'braced':{'against':1},'investigated.':{'ether':1},'condensed;':{'but':1},'food-plants':{'of':1},'improvements':{'and':1,'like':1,'in':2},'sacs':{'which':1},'reached':{'a':1,'then':1,'about':1,'animals':1,'this':1,'their':1,'nearly':1,'immediately':1,'the':4,'its':1},'michelson':{'and':1},'humblest':{'living':2},'ancient':{'copper':1,'type.':1,'seas':3,'astronomer':1,'seashore':1,'human':1,'extinct':1,'times':1,'skeletons':1,'hunters':1,'crust':1,'peoples':1,'mediaeval':1,'life':1,'amphibians':1,'days.':1,'sea.':1,'than':1,'types':4,'days':2,'civilisations':2,'rocks':1,'beds':1},'sadly':{'impressed':1},'monkey':{'and':1,'has':1,'b':2,'that':1,'of':1,'there':1,'it':1,'an':1,'how':1,'s':3,'which':1,';':1,'.':2,'yet':1,'as':1},'guiana':{'82':1,'the':1},'all--the':{'atom':1},'ripples':{'measuring':1,'in':1},'hotter.':{'it':1},'nebular':{'theory.':2,'theory':2,'region':2,'theory--spiral':1,'gases':1,'hypothesis':4,'mass':1},'intermediate':{'positions':1,'layer':1,'between':1},'sky--this':{'we':1},'anatomises':{'the':1},'completed':{'a':1,'her':1},'acquire':{'kinetic':1,'the':1},'negro':{'and':1},'device--more':{'reflex':1},'environmental':{'sometimes':1},'slopes':{'down':1,'of':1},'plumage':{'like':1,'of':1,'is':1,'are':1,'makes':2,'or':1},'bodyguard':{'of':1},'furnishings':{'of':2},'kant':{'had':1},'shrapnel':{'which':1},'brusque':{'variations':2},'lizard-like':{'tail.':1,'tail':1},'depends':{'on':10,'all':1,'partly':1,'upon':4,'.':2,'to':1},'heavens.':{'of':1},'light':{'and':12,'emerging':1,'besides':1,'previously':1,'penetrates':1,'is':14,'coming':1,'reaches':1,'an':1,'visible':1,'as':1,'rings.':1,'are':4,'in':3,'consists':2,'our':1,'passes':2,'differ':2,'rays':1,'from':10,'tread':1,'would':1,'electricity':1,'travel':1,'there':1,'wave-lengths.':1,'sunlight':1,'.':14,'to':3,'returns':1,'production':1,'which':7,'according':1,'travelling':1,'has':3,'was':1,'into':1,'red':1,'more':1,'body':2,'then':1,'we':1,'283':1,'travelled':1,'that':4,'may':1,'becomes':1,'gathered':1,'emitted':1,'took':1,'but':2,'falls':2,'magnetism':1,'will':3,'falling':1,'waves':2,'i.e':1,'with':1,';':4,'upwards':1,'a':1,'on':9,'made':1,'takes':3,'of':20,'radiant':1,'depends':1,'against':1,'reduced':1,'travels':2,'without':2,'so':1,'can':1,'many':1,'the':4,'or':1,'comes':1},'lurching':{'movements':1},'flashes':{'of':1},'anthropologist':{'professor':1},'imaginative':{'range':1,'or':1,'minds':1},'involution':{'but':1},'wood-cock':{'which':1},'curves':{'of':1},'comfortable':{'far':1,'as':1},'tide':{'and':2,'the':2,'in':1,'or':1,'out':1},'corrupt':{'data':1},'comfortably':{'in':1},'astrophysical':{'observatory':3},'unlikely':{'that':2},'uganda':{'bug':1},'sporadic':{'and':1,'members':1},'throat':{'bulges':1},'curved':{'bodies.':1,'pillar':1,'on':1,'than':1,'fingers':1},'activity--that':{'of':1},'complete':{'and':1,'living':1,'proof':1,'stereoscopic':1,'reflection':1,'absorption':1,'.':2,'pace':1,'revolutions':1,'master':1,'fossil':1,'in':1,'one':1,'its':1,'change':1,'theory':2},'mic':{'.':1},'wits':{'and':1,';':1,'in':1,'when':1,'.':1},'gravity':{'pressure':1,'is':1,'.':1,'near':2,'the':1},'provokes':{'simple':1},'pectoral':{'fins':5,'muscles':1},'gliding':{'on':1,'from':2,'alligator-like':1,'one':1},'rediscovered':{'by':1},'jumna':{'doles':1},'unless':{'a':1,'we':2,'indeed':1,'there':2,'it':1,'they':1,'our':1,'the':3,'you':3},'trundles':{'about':1},'mathematician':{'leibnitz':1,'le':1,'can':2,'.':1},'mimics':{'they':1},'eight':{'large':1,'unbranched':1,'of':1,'months':1,'years':1,'feet':1,'sense-organs':1,'tons':1,'branched':1,'planets':2,'the':1},'peppered':{'moth':1},'cleverest':{'animals':1,'monkey':1},'sally':{'the':1,'some':1,'above':1},'plastic--a':{'generalised':1},'profoundest':{'of':1},'palaeolithic':{'and':1,'cave-men':2,'men':1,'culture':1,'peoples':1},'firelight':{'must':1},'inexorable':{'laws':1},'gullet':{'unbroken':1},'heartening':{'encouragement':1},'enthusiastic':{'.':1},'gather':{'to':1,'the':2,'round':1,'on':1},'request':{'of':1},'disease':{'and':1,'is':1,'after':1,'.':2},'animal--perhaps':{'the':1},'park.':{'profile':1,'side-view':1,'chimpanzee':3,'surface':1,'comparisons':1,'the':3},'artificially':{'and':1,'to':1,'it':1},'occasion':{'and':1,'on':1,'.':1,'suggested':1,'of':1},'normally':{'a':1,'concealed':1,'handed':1},'ten-armed':{'cuttlefish':2},'true.':{'if':1},'area.':{'swimmers':1,'it':1},'selection':{'of':3,'advantage':1},'kith':{'and':1},'text':{'to':1,'emits':1,'.':2},'supported':{'on':1,'in':1,'like':1,'by':1},'braking':{'action':1},'pinhead':{'brain':1},'continually':{'added':1,'being':2,'recuperate':1,'worn':1,'tends':1,'changing':1,'passing':1,'travelling':3},'thicker':{'fur':1},'staff':{'shows':1},'wear':{'and':1,'any':2},'knowledge':{'and':1,'be':1,'means':2,'respecting':1,'advances':1,'is':1,'there':1,'had':1,'it':1,'but':1,'.':2,'may':1,'that':2,'were':1,'extends':1,'of':13,'the':1,'has':1,'as':1,'more':1},'sparks':{'which':1},'scorpion':{'we':1},'luminescent':{'and':1,'animals':1},'body-making.':{'in':1},'insectivores':{'not':1,'and':1,'including':1},'fatiguing':{'exertions':1},'emitting':{'light':1,'rays':1},'wild.':{'two':1},'hand.':{'attempts':1,'cross-fertilisation':1,'half':1},'inferior':{'either':1},'equilibrium':{'positions':1,'has':1,'results':1,'otherwise':1},'photographs':{'we':1,'show':2,'of':1,'.':1,'fig':1,'taken':2,'by':1,'figs':1},'coin--smaller':{'than':1},'exceptional':{'and':1,'spring':1,'auroral':1,'in':1,'cases':2,'conditions':1},'beat':{'a':1,'things':1,'it':1},'photography':{'and':1},'bear':{'and':2,'on':1,'of':2,'straight':1,'illustration':1,'to':1,'numerous':1,'in':3,'the':1,'was':1},'perfection':{';':1,'is':1,'in':1,'by':1,'.':1},'swiftest':{'flywheel':1},'stigma':{'the':1},'striped':{'tiger':1,'muscles':1,'muscle':1},'halo':{'surrounding':1,'there':1,'such':1},'areas':{'and':1,'differ':1,'land':1,'corresponding':1,'was':1,'of':1,'.':1,'to':1,'at':1,'known':1,'where':1,'or':1},'crabs':{'and':1,'are':1,'that':1},'egg-laying':{'is':1,'.':1},'caves':{'unsunned':1,'in':1},'organ':{'of':3,'is':1,'called':1,'for':1,'.':1},'pglaf.org':{'fundraising':1,'for':1,'section':1,'.':1,'while':1,'donate':1},'fixes':{'a':1,'to':1,'sea-anemones':1},'shore-animals':{';':1,'e.g':1,'which':1,'have':1,'.':1},'eyebrow':{'ridges.':1,'ridges':6},'saturates':{'through':1},'excesses':{'of':1},'light--is':{'the':1},'gibson':{'gives':1},'cave-hyaena':{'mammoth':1},'farthest':{'out':1},'exists':{'because':1,'there':1,'only':1,'as':1,'in':2,'the':1},'universe--the':{'evolution':1,'solar':2},'national':{'physical':2},'flapped':{'very':1},'inextricably':{'interwoven':1},'carnivores':{'and':1},'intensity':{'of':4},'cenozoic':{'making':1,'began':1,'era':1,'or':1,'eras':1},'enhanced':{'by':2},'greece':{'and':2},'ruse':{'succeeded':1},'36.0':{'0.24':1},'shallows':{'.':1},'phases':{'of':1},'pedigree':{'of':1,'the':2,'.':2,'is':1,'must':1},'apparently':{'clever':1,'red-hot':1,'unconscious':1,'simple':1,'inexhaustible':1,'instantaneous':1,'in':1,'served':1,'you':1,'sluggish':1,'inevitable':1},'nebula':{'and':1,'what':1,'round':1,'march':2,'although':1,'of':1,'57':1,'we':1,'but':1,'.':2,'seen':2,'to':7,'need':1,'which':1,'in':8,'it':1,'revolving':1,'has':2,'laplace':1,'is':4},'difficulties':{'and':5,'may':1,'of':5,'is':1,'in':1,'when':1,'.':1,'are':3,'have':1,'were':1,'the':1},'routine':{'and':1,'cannot':1,'is':3,'.':1,'became':1,'so':2,'activity':1,'instinctive':1,'has':1,'metabolism':1},'progress':{'we':1,'towards':2,'unless':1,'demands.':1,'many':1,'is':1,'of':4,'.':5,'depends':1,'have':1,'in':3,';':1,'has':1,'was':1},'boundary':{'line':1,'lines':1},'janes':{'leonard':2},'various':{'distances':1,'methods':2,'elements.':1,'conditions.':1,'proportions':1,'intervals':1,'human':1,'subtle':1,'racial':1,'classes':1,'physical':1,'layers':1,'forms':5,'concrete':1,'ways':1,'interesting':1,'flying':1,'ways.':1,'colours':2,'parts':1,'electrical':1,'open-sea':1,'kinds':4,'bolts':1,'mammals':1,'atoms':1,'races':1,'fishes':1,'shore-haunts.':1,'stocks':1,'articles':1,'processes':1,'places':1,'departments':1,'theories':1,'lengths':2,'experiments':1,'formats':1,'stages':1,'other':1},'reproduced':{'in':3,'from':7,'below.':1,'by':18},'cauliflower':{'sticking':1,'and':1},'superior':{'to':1},'emitted':{'by':3},'deliver':{'insects':1},'willing':{'to':2,'is':1},'nightfall':{'hippolyte':1},'exist.':{'there':1,'some':1},'guiding':{'his':2},'sharply':{'away':1},'asunder':{'the':1},'freely':{'and':1,'available':1,'sharing':1,'distributed':1,'as':1,'suspended.':1,'shared':1,'round':1},'taking':{'a':1,'longer':1,'advantage':2,'it':1,'running':1,'place':2,'5':1,'the':2,'care':1},'equal':{'weight':1,'pieces':1,'to':7,'length':1,'perfection':1,'.':1},'attributed':{'this':1,'to':1},'pulp':{'.':1},'flesh-eating':{'and':1},'sexes':{'and':1,'wander':1},'wringing':{'the':1},'swim':{'much':1,'at':1,'against':1,'for':1},'conquered':{'and':1,'the':3,'one':1},'swallow':{'a':1},'temporal':{'or':1},'glorious':{'failures':1,'display':1},'otherwise':{'would':1,'there':1,'when':1,'quite':1,'the':3,'called':1},'basins':{':':1,'.':1},'acorn-shell':{'and':1},'heritable':{'novelties':1},'deflected':{'as':2},'unearthed':{'.':1},'pouring':{'floods':1,'out':2},'marett':{'r':1},'tremendous':{'energy':3,'movements':1,'question':1,'but':1,'movement':1},'everything--so':{'there':1},'muddy':{'feet':1,'precipitate':1},'copies':{'of':7},'armadillos':{'.':1},'migrate':{'about':1},'dogfish':{'have':1},'natans':{'stands':1},'curtain':{'of':1,'floating':1},'copied':{'and':1,'or':1},'sluggish.':{'animals':1},'home.':{'long':1},'herbage':{'fastening':1,'and':1,'by':1,'.':1},'composed.':{'the':1},'antlers':{'in':1},'arises':{'what':1,'from':1},'sex--emotions':{'of':1},'looked.':{'using':1},'essentially':{'a':1,'of':2,'the':1,'wrapped':1,'is--should':1},'assert':{'themselves':1},'finished':{'and':1},'angles':{'to':4,'which':1},'angler':{'of':1,'s':2},'fellow':{'short':1,'from':1},'food-canal':{'and':3,'a':1,'the':1,'muscular':1,'.':2},'arisen':{'as':1,'in':1,'from':1,'by':1,'.':1},'volunteer':{'support.':1},'homes':{'of':1,'from':1},'economised':{'reproduction':2},'splits':{'up':1},'article.':{'bibliography':1},'appearance':{'and':1,'we':1,'very':1,'of':5,'.':2,'habits':2,'cloaked':1,'which':1,'in':1},'value':{'.':1,'or':1,'in':1},'promotes':{'both':1},'dendrites':{'of':1},'amenity':{'.':1},'file':{'or':1,'should':1},'chaotic':{'molecular':1},'squid':{'in':2},'weighed':{'but':1},'arrangements':{'of':2,'for':1},'arabia':{'ceylon':1},'partner':{'s':1,'sea-anemones':2,'.':1},'tumbled':{'into':1},'watchful':{'mother':1},'physiologists':{'like':1},'locomotion;':{'new':1},'mid-europe':{'red':1},'jurassic.':{'for':1},'prognostications':{'as':1},'well-grown':{'fishes':1},'felted':{'together':1},'aquitania':{'is':1},'locomotion.':{'illustration':1},'twelfth':{'printing':1},'neolithic':{'age':1,'days':1,'community':1,'.':1,'culture':1,'men.':1,'times':1,'man':6},'material':{'and':2,'in':1,'which':4,'e.g':2,'things':2,'is':1,'of':2,'particles.':1,'particles':1,'studying':1,'aspect':1,'universe':5,'such':1,'throughout':2,'than':1,'resources':2},'soddy--as':{'any':1},'cubic':{'inch':2,'inches':2,'centimetre':2},'absent;':{'stars':1},'water-filled':{'quarry':1},'binoculars':{'is':1},'discredited':{'atomism.':1},'26.--a':{'spiral':1},'judgment':{'on':1},'buttonholes':{'at':1},'nevertheless':{'these':1,'all':1,'been':1,'master.':1},'pompilius':{'common':1},'weapon':{'on':1},'capella':{'49.4':1},'treacly':{'fluids':1},'thought':{'and':2,'even':1,'that':3,'of':2,'is':1,'it':1,'.':1,'to':1,'was':1,'they':1,'hydrogen':1},'exceedingly':{'small':2},'sets':{'of':3,'off':1,'up':1,'in':1},'comparisons':{'of':2},'wreckage':{'of':1},'arising':{'afresh':1},'latest':{'and':1,'measurements':1},'appropriately.':{'birds':1},'barking':{'down':1},'humdrum':{'non-plastic':1,'race':1},'executive':{'and':1},'domestic':{'pigeons':1,'rabbits':1,'dog':1},'harpy-eagle':{'216':1,'clean':1},'bivalves':{'and':1},'stored':{'may':1,'away':1,'up':2,'for':1},'books':{'may':1,'recommended':1,'now':1,'are':1,'.':1},'protecting':{'blanket':1,'them':1},'swimming-bells':{'and':1},'wrens--to':{'try':1},'one-toed':{'horse':1},'work.':{'1.e.4':1,'the':2,'there':1,'-':1,'first':1},'absorption':{'of':2,'was':1},'onward':{'.':1},'lake':{'and':1,'pond':1,'of':1,'constance':1,'city':1},'mathematically':{'satisfactory':1},'add':{'just':1},'work;':{'the':1},'slits':{'the':1},'spirals':{'present':1,'in':1},'warns':{'us':1},'280':{'wave':1,'in':1},'283':{'photo':1,'niagara':1},'282':{'the':2},'287':{'photo':2},'incarnations':{'and':1,'one':1},'resolved':{'into':1,'the':1,'in':1},'worlds':{'and':1,'in':3,'sec':1,'.':1},'hermonis':{'and':1},'refinements':{'are':1},'mutations':{'and':1,'then':1,'whatever':1},'royalty':{'fee':1,'payments':2},'98.8':{'arcturus':1},'elapses':{'between':1},'implements--knives':{'scrapers':1},'jupiter.':{'the':1},'audibly':{'when':1},'capacities':{'of':4,'work':1,'but':3,'are':1,'usually':1,';':1},'like':{'plaice':2,'deliberateness':1,'toads':1,'london':1,'fungas':1,'birds':1,'shuffling':1,'to':2,'insectivores':1,'very':1,'duckmole':1,'sandstones':1,'one':1,'minute':1,'patrick':1,'globe-fishes':1,'shapes':1,'sloths':1,'amoebae':1,'rats':2,'partridges':1,'sugars':1,'some':3,'sea-squirts':1,'jupiter':1,'our':5,'bark':1,'ourselves':1,'poisonous':1,'its':2,'asking':1,'trout':1,'volvox':1,'opening':1,'of':1,'carnivorous':1,'great':1,'flames':1,'many':1,'otters':1,'ants':1,'skunks':1,'chlorophyll':1,'house-flies':1,'mercury':1,'whales':1,'.':3,'white':1,'genesis':1,'pallas':1,'that':6,'centipedes':1,'coughing':1,'fountains':1,'glass':1,'those':1,'he':1,'this':2,'starts':1,'sea-anemones':1,'matter':4,'fallow':1,'silly':1,'were':1,'and':2,'rooks':1,'certain':1,'is':1,'it':2,'an':8,'as':1,'which':2,'skates':1,'but':1,'waves':1,'fishes':1,'ours.':1,'a':44,'wisps':1,'professor':2,'dog':1,'kipling':1,'so':1,'raindrops':1,'the':56,'brer':1},'success':{'and':1,'of':1,'is':1,'to':1,'as':1,'in':1,'has':1},'spiral.':{'thus':1,'but':1},'porous':{'like':1},'admitted':{'of':1,'that':5},'ozone':{';':1},'radio-active--then':{'we':1},'chick':{'does':1,'out':1},'works':{'and':1,'in':7,'its':1,'if':1,'even':1,'provided':1,'based':2,'harmless':1,'.':2,'to':1,'only':1,';':1,'unless':1,'that':2,'1.a':1,'from':1,'with':1,'by':2,'posted':1,'on':1,'possessed':1,'reports':1,'so':1,'mr':1,'calculated':1},'soft':{'food':1,'soil':1,'muddy':1,'tail':2,'.':1,'to':1,'enough':1,'parts':2,'moss':1,'browns':1,'silvery-looking':1,'abdomen--for':1},'heel':{'a':1,'of':2,'than':1},'italian':{'scientist':1},'accessible':{'by':1},'simple.':{'the':1},'propel':{'our':1},'alive':{'.':1,'at':1,'are':1},'hair':{'and':1,'is':1,'woolly-haired':1,'in':1,'the':1,';':1},'convey':{'an':1},'convex':{'curves':1},'proper':{'answer':1,'proportions':2,'number':1,'way':1,'time':1},'happens':{'for':1,'that':2,'certain':1,'is':1,'.':2,'in':1},'0.24':{'3030':1},'students':{'of':1},'masked':{'their':1,'by':2},'economical':{'reduction':1},'assuming':{'reasonably':1},'results.':{'fog':1,'but':1},'mind-body':{'at':1},'snuggle':{'under':1},'overcharged':{'with':1},'manifesting':{'itself':1},'noise':{'of':1,'.':1},'slight':{'changes':1,'as':1,'improvements':1,'keel':1,'fluttering':1,'clouding':1},'ever-lengthening':{'tail':1},'combative':{'creature':1},'stellar':{'universe.':1,'universe--the':1,'spectra':1,'system':1,'universe':5,'universes':1,'astronomy':1},'crossing':{'the':1},'host':{'of':1,'is':2,'s':1,'for':1,'.':1},'although':{'we':5,'modern':1,'thirsty':1,'all':1,'there':2,'great':1,'it':1,'at':1,'they':1,'mr':1,'small':2,'our':1,'the':8},'worthy':{'of':1},'periodically':{';':1,'bursts':1,'in':1,'pass':1},'christened':{'coronium.':1,'them':1,'electrons':1},'about':{'among':2,'seven':2,'because':1,'twenty-one':1,'ten':1,'on':3,'the':47,'energy':1,'within':1,'all':1,'10':1,'two':6,'60':1,'as':1,'two-thousandths':1,'sec':1,'35':1,'in':3,'our':2,'shooting':1,'its':1,'sun-spots':2,'six':3,'for':1,'eleven':1,'ways':1,'twenty':2,'there':1,'forty':1,'40':1,'.':2,'1':3,'their':1,'3':1,'5':3,'4':1,'which':3,'9':3,'electrons':1,'more':1,'twenty-five':1,'thirty-two':1,'500':1,'equilibrium':1,'life':2,'2-1':1,'an':2,'to':1,'580':1,'that':3,'very':1,'constantly':1,'after':1,'eighty':1,'new':1,'it':1,'them':1,'two-thirds':1,'variable':1,'100':1,'one':5,'with':3,'by':4,'elevations':1,'a':15,'four':2,'12':1,'48':1,'thirty':1,'twice':1,'we':2,'1842':1,'56':1,'half':2,'us':1,'project':2,'these':2,'donations':2,'three':5,'fundamental':1,'things':1,'nine':1,'800':1,'fifty':3},'quills':{'.':1},'branch-gripping':{'member':1,'.':1},'electron--the':{'electron':1},'certainty':{'and':1,'as':1,'has':1},'introduces':{'into':1},'preen':{'gland':1},'avoided.':{'when':1},'rock-record':{'which':1},'introduced':{'perhaps':1,'into':1,'by':1},'fitnesses':{'have':1},'ways':{'and':2,'we':1,'that':1,'of':10,'.':4,'as':1,'including':1,'in':7},'marshes':{'and':1,'fed':1,'resounded':1,'were':1},'dubois':{'in':1},'sense-organs':{'the':1,'round':1},'rhythmical':{'rise':1},'billions':{'of':3},'chemists':{'and':1,'said':1,'of':1,'who':1,'should':1,'physicists':1,'.':1},'guard':{'over':2,'is':1,'against':1},'female':{'or':1,'with':1,'where':1,'is':1,'only':1,'covers':1,'.':1,'s':1,'paper':1,'figures':1,'makes':1,'in':1,'carries':1,'stickleback':2,'yucca':1,'side':1,'at':1},'quickly':{'from':1,'that':1,'contracting':2,'as':1,'recognised':1,'moving':1,'in':1,'coiled':1,'than':2},'kallima':{'inachis':2,'conspicuously':1},'cross-fertilisation':{'of':1,'is':2},'minute.':{'in':1},'punics':{'and':1},'sticklebacks':{'are':1,'learned':1,'were':1,'live':1,'in':1},'ridge':{'for':1},'mazy':{'passages':1},'elastic':{'solid':1,'wings':1},'rushed':{'into':1},'outline':{'we':1,'like':1,'of':17,'is':2,'it':1,'will':1,'where':1,'its':1},'condense':{'it':1,'round':1},'rushes':{'on':1,'through':1,'round':1},'bees':{'and':4,'may':1,'richly':1,'which':1,';':1,'by':1},'development':{'and':1,'has':1,'often':1,'for':1,'of':18,'leaves':1,'should':1,'certain':2,'which':1,'in':1,'.':4,'is':2,'man':1},'biggest':{'gulf':1,'fact':1},'maze':{'and':1,'a':1,'in':1,'by':1,'.':1},'duffus.':{'cuckoo-spit':1,'chimpanzee':1},'woodpecker':{'inserted':1,'hammering':2},'mcgregor':{'from':2},'but':{'all':3,'particularly':1,'among':1,'able':1,'move':1,'worms':1,'bright':1,'its':4,'before':1,'also':1,'electricity':1,'agile':1,'enough':1,'evidences':1,'to':5,'only':3,'has':1,'giants':1,'eventually':2,'very':1,'sooner':1,'quickness':1,'they':19,'new':1,'not':5,'during':1,'now':2,'necessary':1,'like':1,'profound':1,'light-waves':1,'these':9,'she':2,'each':1,'because':1,'farthest':1,'some':4,'imply':1,'are':2,'our':2,'best':1,'even':4,'what':7,'for':2,'since':2,'remain':3,'birds':1,'behind':1,'difficulties':1,'between':1,'probably':1,'millions':1,'movement':1,'we':23,'eminently':1,'nature':1,'little':1,'here':2,'although':3,'others':1,'along':1,'contraction':1,'on':2,'about':1,'many':3,'omit':1,'usually':1,'adapted':1,'naturalists':1,'copper':1,'contains':1,'besides':1,'one':4,'learning':1,'your':1,'often':3,'startling':1,'given':1,'air-sacs':1,'would':1,'few':1,'positive':1,'devouring':1,'there':46,'three':1,'their':3,'was':3,'more':1,'survives':1,'lived':1,'that':4,'blindly':1,'careful':1,'with':1,'those':1,'he':6,'plants':1,'none':2,'whether':1,'science':2,'this':11,'will':2,'while':3,'of':2,'constant':1,'remained':1,'is':1,'it':74,'an':2,'as':7,'at':2,'in':16,'if':11,'different':1,'no':4,'perhaps':5,'when':10,'astronomers':1,'how':3,'another':1,'other':1,'which':2,'you':1,'relatively':1,'inconceivably':1,'ultimately':1,'most':2,'why':2,'man':5,'a':10,'expert':1,'slightly':1,'splendid':1,'enter':1,'the':90},'reminds':{'us':1},'repeated':{'trials':1,'over':1,'until':1,'but':1,'many':1},'billion.':{'illustration':1},'plague':{'of':1},'bug':{'closely':1,'actually':1},'versatile':{'life':1},'partially':{'eclipsed.':1,'reappeared':1,'collided':1,'landlocked':1,'dried-up':1},'constitute':{'light':1,'as':1,'heat':1,'matter':1},'wise':{'and':1,'saying':1,'enough':1},'glory':{'and':1,'that':1},'wish':{'to':1,'however':1,'they':1},'j':{'.':98},'variations':{'and':2,'often':1,'that':1,'are':4,'which':1,'in':3,'or':3},'lynx':{'and':1,'the':2},'minutes':{'and':1,'saving':1,'for':1,'hard':1,'.':5,'holding':1,'in':1,'the':1,';':1,'before':1},'squat':{';':1,'motionless':2},'supreme':{'synthesis':1},'rabbits':{'and':2,';':1,'.':1},'pin':{'s':2},'swimmers--for':{'there':1},'transfused':{'into':2},'reptiles.':{'triassic':1,'carboniferous':1,'permian':1,'illustration':1,'in':1},'well-defined':{'and':1,'hereditary':1},'periods':{'of':4,'but':1,'to':1,'in':1,'the':1,'if':1},'141.5':{'1.88':1},'our':{'planetary':1,'atmosphere':5,'boyhood':1,'flesh':1,'rooms':1,'human':1,'skin':1,'earth':6,'admiration.':1,'web':1,'knowledge':11,'conclusions':1,'energies':1,'dipper':1,'consideration':1,'views':3,'very':1,'oceans':1,'photograph':1,'dark':1,'coal-measures':1,'hands':1,'foot':1,'coal-fields':1,'problems.':1,'solid':1,'race':2,'common':2,'small':1,'telegraphic':1,'bone':1,'methods':1,'colossal':1,'legacy':1,'blues':2,'sun':8,'artificial':1,'moon':2,'finger':3,'new':1,'email':1,'universe.':2,'belief':1,'power':1,'attention':1,'craters':1,'stellar':2,'heads':1,'estimate':1,'cities':1,'hours':1,'great':2,'central':1,'water-oceans.':1,'universe':7,'days':2,'forbears':1,'physiological':1,'survey':1,'steadily':1,'successors':1,'whole':1,'first':2,'own':15,'point':1,'instruments':2,'primary':1,'system':6,'feet':1,'elder':1,'cultivated':1,'total':1,'kind':1,'mental':1,'little':1,'eye':1,'flying':1,'charts':1,'wonderful':2,'way':1,'time':1,'scope':1,'sort':1,'eyes':4,'shell':1,'gas':1,'appreciation':1,'solar':9,'present':1,'apprehension':1,'admiration':1,'comprehension.':1,'imagination.':1,'universe--astronomical':1,'future':1,'exploration':1,'life.':1,'problem':1,'average':1,'mud-fishes':1,'frogs':3,'modern':3,'mind':2,'metals':1,'general':1,'sudden':1,'experience':2,'orchards':1,'domesticated':1,'terrestrial':1,'ancestors':1,'winter':1,'conclusions.':1,'ideas':1,'food':1,'conceptions':1,'largest':1,'ordinary':2,'civilisation':1,'bells':1,'investigations':1,'senses':4,'milky':1,'hand':1,'shores':1,'most':2,'purpose':1,'predecessors':1,'age':1,'coal':1,'chief':1,'greatest':1,'trains':2},'paraguay':{'and':1},'mysteriously':{'regular':1,'from':2},'pit':{'the':1,'whence':1},'proceeds':{'to':1,'what':1,'the':1},'48':{'the':1,'ounces':1},'49':{'photo':1,'by':1},'corporation':{'organized':1},'44':{'photo':1},'fore-arm':{';':2,'.':1},'fruit-laden':{'branch':1},'detail':{'to':1,'so':1,'which':1,'such':1},'40':{'photo':1,'are':1,'tons.':1},'41':{'photo':1},'sandy':{'shores':1,'loess':1,'places':1},'tree-tops':{'express':1},'out':{'and':6,'among':1,'is':1,'into':1,'some':1,'as':4,'at':4,'in':12,'sounds':1,'still':1,'apparently':1,'its':5,'saline':1,'light-waves':1,'from':9,'for':3,'their':1,'1890':1,'there':1,'had':1,'three':1,'.':5,'to':4,'those':1,';':2,'pre-eminent':1,'until':1,'more':1,'we':1,'his':1,'that':6,'very':1,'measures':1,'about':1,'fat':1,'how':2,'heat':1,'waves':1,'during':1,'profitless':1,'with':2,'by':3,'vast':1,'he':1,'a':9,'on':2,'great':1,'like':1,'these':1,'of':54,'according':1,'whether':1,'streams':1,'the':9,'are':2},'quintillion':{'atoms':1},'conveys':{'that':1},'period.':{'illustration':1},'functionless':{'letters':1},'dilatable':{'sac':1},'variation':{'being':1,'of':2,';':1,'in':1},'enlargement':{'of':3},'d-e.':{'an':1},'death.':{'this':1},'astronomy':{'and':1,'be':1,'that':1,'this':1,'of':1,'.':9,'deals':1,'to':1,'as':1,'at':1,'which':1,'the':1,'has':1,'by':1,'are':1},'keane':{'a':1},'race--many':{'animal':1},'pupil':{'the':1},'4a':{'hypohippus':1},'limited':{'warranty':1,'right':2,'.':1,'to':3,'as':1,'extent':1,'than':1,'areas':2},'gossamer':{'forms':1,'the':1,'202':1,'spiders':2,'.':1},'oxygenation':{'and':1},'holman':{'matter':1},'comparatively':{'dry':1,'little':1,'everlasting':1,'shallow':1,'large':1,'few':1,'narrow':1,'recent':2},'dynasty':{'and':1},'neoceratodus':{'has':1,'by':1},'sleep':{'and':1,'the':1},'admiration.':{'sec':1},'poorly':{'developed':2},'belonged.':{'when':1},'flash.':{'it':1},'feeding':{'growing':1,'on':2,'purposes':1,'chiefly':1},'patches':{'of':1,'in':1,'on':1},'paris':{'also':1,'as':1},'34.':{'illustration':1},'ceylon':{'and':1,'the':1},'charles':{'darwin':4,'r':1,'e':1,'descent':1},'thinnest':{'vapours':1,'part':1,'parts':1,'.':1},'340':{'000':1},'whatsoever':{'we':1,'.':2},'caused':{'a':1,'though':1,'this':1,'when':1,'to':1,'in':2,'by':1},'elapsed':{'before':1},'comet--the':{'stellar':1},'risk':{'of':6},'arboreal':{'and':1,'life':5,'apprenticeship--an':1,'mammals':1,'evolution':1,'.':2,'insectivores':1,'habits':2,'apprenticeship--tentative':1,'mother':1,'apprenticeship':8,'marsupials':1},'dispense':{'energy':1,'with':2,'largely':1},'brackish':{'water':1,'swamp':1},'rise':{'and':1,'great':1,'enormously':1,'very':1,'of':8,'into':1,'.':2,'to':17,'in':1},'lurk':{'among':1},'hermon':{'there':1,'grass':1,'.':1},'every':{'ten':1,'laboratory':2,'house':1,'haunt':1,'one':1,'second':1,'human':1,'year':3,'corner':1,'element':2,'species':1,'physical':1,'now':2,'many-celled':3,'atom.':1,'addition':1,'question':1,'two':1,'port':1,'chemical':1,'few':1,'gramme':1,'other':2,'animal':3,'empty':1,'niche':3,'amateur':1,'form':1,'class':1,'gas':1,'possible':1,'killing':1,'protection':1,'atom':1,'vigorous':1,'hole':2,'twenty-thousandth':1,'opportunity':1,'day':4,'man':1,'kind':1,'substance':3,'instant':1,'third':2,'hour':1,'particle':3,'arc-lamp':1,'glowing':1,'introduction':1,'part':1,'bone':1,'time':1,'star':1,'side':4,'clap':1,'twenty-four':2},'gratification':{'of':1},'east.':{'illustration':1},'slipperiness':{'.':1},'monkeys':{'and':5,'is':1,'it':2,'sec':1,'at':1,'have':2,'securing':1,'.':3,'may':1,'other':1,'which':1,';':1,'semnopithecus':1,'learn':1,'but':1,'such':1,'than':1,'on':1,'leaving':1,'were':1,'very':1,'the':2,'where':1,'or':1,'are':2},'encounter':{'the':1},'discovers':{'the':1,'when':1},'school':{'in':1},'parrot':{'of':1,'s':2,'belongs':1,'which':1,'s-beak':1,'stringops':1},'conceive':{'of':2,'the':1,'then':1},'loess':{'of':1,'either':1,'sandy':1},'apprehension':{'so':1,'.':1},'hickson':{'s':1,'puts':1},'relics':{'of':3,'vestigial':1,'.':1},'venus':{'and':1,'flower':3,'67.2':1,'is':1,'s':1,'fly-trap':2,'earth':1,'the':3,'are':1},'humps':{'daily':1,'were':1},'degeneracy':{'in':1},'enjoy':{'pulling':1,'.':2},'veritable':{'museum':2,'physical':1},'zinc':{'and':8,'is':2,'sulphite':1,'which':1,'pass':1,'has':1},'faintest':{'stars':1},'infancy':{'is':1,'would':1},'estimates':{'which':1},'direct':{'and':2,'a':1,'knowledge':1,'descendants':1,'there':1,'competition':1,'passage':1,'to':1,'appropriate':1,'four-footed':1,'statement':1,'indirect':1,'traces':1,'or':1},'nail':{'and':1,'on':1,'as':1,'pulled':1},'yerkes':{'experimented':1,'observatory':1,'studied':1,'40-inch':4,'changed':1,'observatory.':9,'has':1,'refractor':2},'electricians':{'have':1},'street':{'a':1,'or':1},'infiltration':{'of':1},'estimated':{'to':2,'the':3,'fig':1,'that':2},'expressive':{'of':1},'shining':{'disc':1,'through':1},'blue':{'and':2,'box':1,'butterfly':1,'chequer':1,'fit':1,'in':1,'sky':6,'.':1,'hot':1,'disc':1,'green':1,'waves':1,'indigo':1,'the':1,':':1,'or':1,'reptiles':1},'change.':{'a':1,'sec':1},'hide':{'their':2},'pariasaurus':{':':2},'organisms':{'and':1,'to-day':1,'which':4,'of':1,'upon':1,'it':1,'.':1,'are':1,'have':2,'i.e':1,'found':1,'seem':1,'has':1},'solemn':{'occasion':1,'slowness':1},'beaten':{'into':2,'grain':1,'out':1},'revolves':{'round':2},'museum.':{'a':1,'meteorite':1,'carrier':2,'homing':1,'yellow-crowned':1},'liberty':{'.':1},'children':{'and':1,'who':1,'should':1},'characters.':{'in':1},'zoologists':{'with':1},'change;':{'variability--evolution':1},'conduct':{'man':1,'.':1,'in':1,'but':1,'demands':1},'ebbs':{'and':1},'supplies':{'of':1,'the':1,'.':1},'revolved':{'will':1,'on':1,'round':1},'reacts':{'cannot':1},'electricities':{'in':1},'unexhausted':{'possibilities':1},'hundreds':{'and':1,'of':15,'but':1},'seven-weeks-old':{'human':1},'resounded':{'to':1},'represented':{'as':2,'by':9,'for':1,'in':4},'path':{'followed':2,'of':6,'when':1,'marked':1,'round':2,'closely':1,'from':1,'the':1,'by':1,'if':1},'shortness':{'of':2},'through.':{'light':1},'digits':{'of':1,'on':1},'wood-snail':{'in':1},'earth--a':{'transition':1},'distinctness':{'.':1},'ventures':{'were':1},'tons.':{'the':2,'illustration':2},'leaves':{'and':3,'a':1,'or':1,'fanwise':1,'us':1,'one':1,'which':1,'the':1,'.':2,';':2},'settles':{'down':3},'mantis':{'on':1,'religiosa':2,'mantis':2},'mistake':{'to':2,'for':2,'but':1},'settled':{'down':2,'the':1,'within':1},'svante':{'worlds':1},'substances.':{'in':1},'stray':{'present-day':1,'erratic':1},'straw':{'looked':1,'as':1,'so':1},'plants--paint':{'the':1},'equipment.':{'1.f.2':1},'feelings':{'and':2,'such':1,'it':1,'in':1},'patience':{'and':2,'of':1,'were':1},'miles--eighteen':{'times':1},'anyhow':{'as':1},'greatness.':{'it':1},'ape-man--an':{'early':2},'scaffolding':{'but':1},'would':{'help':1,'do':2,'cover':1,'thus':1,'it':1,'one':1,'say':2,'cease':2,'have':15,'in':1,'go':1,'seem':4,'provoke':1,'yet':1,'witness':1,'doubtless':1,'certainly':1,'still':2,'appear':3,'lead':1,'also':1,'estimate':1,'disintegrate':1,'make':2,'unduly':1,'favour':1,'tend':3,'increase':1,'consistently':1,'only':1,'shiver':1,'take':12,'fade':1,'recover':1,'probably':1,'include':1,'cause':1,'shrink':2,'therefore':1,'then':2,'begin':2,'survive':1,'that':1,'mean--matter':1,'burn':1,'confer':1,'obtain':1,'evolve':1,'a':1,'fall':1,'not':9,'penetrate':1,'be':45,'tick':1,'fly':2,'on':1,'frequently':1,'give':3,'like':2,'tear':1,'require':2,'no':1,'account':1,'yield':1,'explode':1,'suppose':1,'contain':1,'become':1,'inevitably':1,'instantly':1,'mean':3},'palings':{'and':1},'distributing':{'a':1,'medium':1,'this':1,'performing':1,'or':1,'project':2,'any':1},'smelted':{'together':1},'romanes':{'used':2},'preserved':{'namely':1,'except':1},'musk':{'will':1,'in':1},'ages--for':{'britain':1},'beauty':{'became':1},'ll.d':{'.':2},'correspondingly':{'longer':1},'arms':{'and':3,'emerging':1,'into':1,'bear':1,'.':1,'which':1,'not':1,'or':1},'excellent':{'milling':1},'20417':{'produced':1,'language':1},'outdated':{'equipment':1},'off.':{'peculiarities':1},'me':{'alone':1,'tangere':1,'a':1,'that':2},'mc':{'the':1},'piltdown':{'man':6,'skull':5,'.':1},'parachuting--a':{'persistence':1},'henry':{'huxley':2},'appendage':{'which':1},'ernest':{'h':2,'rutherford':6},'my':{'own':1},'latitudes':{'appear':1},'clock-work':{'started':1,'so':1},'mud-fishes':{'do':1,';':1,'of':1,'are':1,'or':1},'decorative':{'plume':1},'ingenuity':{'patience':1,'has':1},'powerfulness':{'of':1},'orion':{'the':1,'40':1},'keep':{'them':1,'up':2,'two':1,'their':1,'time':1,'the':3,'themselves':1,'ebooks':1},'attract':{'them':1,'any':1},'returned':{'to':2,'.':1},'ones':{'and':1,'on':2,'about':1,'made':1,'develop':1,'is':2,'pass':1,'make':1,'.':2,'below':1,'are':5,'hatching':2,'in':1,'go':1,'such':1,'come':1,'creeping':1,'first':1},'progression--always':{'a':1},'end':{'all':1,'which':1,'being':1,'of':32,'were':1,'it':1,'against':1,'.':3,'to':2,'they':1,'in':1,'fishes':1,'the':1},'telephonic':{'communications':1},'returning':{'half':1},'intruders':{'with':1,'.':1},'damages.':{'if':1},'particulars':{';':1},'buns':{'without':1,'some':1,'ashore':1},'writers':{'have':1},'modernising':{'of':1},'widespread':{'and':2},'ancestor':{'of':2,'from':1},'badly':{'stung':1,'when':1,'agee':1},'poker':{'again':1,'into':1,'loses':1,'is':2,'in':1},'both.':{'monkeys':1},'scion':{'of':1},'mouths':{'of':2,'on':1},'erected':{'on':1},'invisible--just':{'as':1},'albumin':{'casein':1},'delicacy':{'in':1},'confirmed':{'as':1,'by':1},'lump':{'of':1},'jumping':{'out':2},'poked':{'it':1},'system--with':{'all':2},'leplay':{'school.':1},'amid':{'the':1,'green':1},'spout':{'.':1,'in':1},'hypotheses':{'and':1,'which':1},'perform':{'all':1,'distribute':1},'complexity':{'and':2,'of':3,'possible':1,'or':1},'upside':{'down':1},'eurypterids':{'or':1},'decreasing':{'coal':1},'diary':{'of':1,'is':1},'squirrel-like':{'marmosets':1},'unsteady':{'slippery':1},'flippers':{'which':1,'for':1},'recurrent':{'stimulus':1,'vicissitudes.':1},'untold':{'ages':1},'daughter-units':{'thus':1,'are':1,'that':1},'alternation':{'of':1},'orang':{'and':2,'notice':1,'is':1,'chimpanzee':2,'.':1,'will':1,'are':1,'the':2,'has':2,'than':1,'232':1},'underside':{'of':1},'inattentive.':{'of':1},'london':{'bridge':1,'the':1,'as':1,'zoological':1},'thesis':{'that':1},'terns':{'spending':1},'beside':{'it':1},'daughter-buds':{'go':1,'living':1},'borneo':{'living':1},'anolis':{'of':1},'expectations':{'there':1},'exhibits':{'a':1,'an':1},'writing':{'without':1,'from':1,'or':1},'destroyed':{'and':1,'for':1,'it':1,'but':1,'.':1,'to':1,'the':1,'was':1,'by':2},'trams':{'in':1},'fade':{'entirely':1},'400':{'000':1},'peopling':{'of':4},'centimetre':{'of':2},'250000':{'inch':1},'prevented':{'by':2},'direct-reading':{'spectroscope':2},'tree-stems':{'and':2},'revelations':{'of':2,'it':1,'to':1},'diseased':{'condition':1},'flotation':{'and':1},'skin-leaves':{'about':1},'shadows':{'are':1},'ingested':{'food':1},'swaying':{'on':1},'potatoes':{'settling':1},'water-fleas':{'and':1},'explode':{'and':1,'them':1},'instant':{'of':1,';':1,'it':1},'victory':{'is':1,'alike':1},'fitness':{'of':1,'for':1,'follows':1},'unit-bodies':{'.':1},'attained.':{'now':1},'notifies':{'you':1},'wariness':{'is':1},'flat-fish':{'has':1,'does':1,'like':1},'verrier':{'discovered':1},'provisions.':{'1.f.6':1},'emphasise':{'as':1},'member':{'and':1,'of':2,'.':2},'magnets':{'.':1},'defences':{'of':1},'clothe':{'itself':1},'depress':{'one':1},'gutenberg-tm.':{'1.e.5':1},'gibbon':{'and':1,'is':2,'orang':2,'which':1,'others':1},'driving':{'water':1,'away':1,'off':1,'the':1},'god':{'s':1},'washed':{'away.':1,'away':2,'down-stream.':1},'integrative':{';':1},'day.':{'there':1,'bibliography':1,'but':1},'laid':{'within':1,'it':1,'down':4,'in':2,'the':1,'or':1},'adjust':{'themselves':1},'millennium':{'b.c':2,'further':1,'after':1},'heavenly':{'body':1,'bodies':3},'got':{'possession':1,'a':4,'his':1,'from':1,'apparatus':1,'no':1,'very':1,'into':1,'loose':1,'it':2,'together':1,'the':3,'their':1,'started':1,'green':1,'nothing':1,'rid':2,'across':1,'films':1},'newly':{'born':1,'hatched':4},'twenty-five':{'trillion':1,'tons':1,'miles':1,'million':1},'independence':{'of':1},'splashed':{'into':1},'provide':{'access':1,'a':4,'volunteers':1,'in':1},'carcass':{';':1},'eternal':{'night':1,';':1,'night--relieved':1,'winter':1,'possible':1},'free':{'from':2,'for':1,'oxygen':1,'air':1,'if':1,'.':1,'access':1,'to':3,'future':1,'agents':1,'nitrogen':1,';':1,'hand':4,'distribution':3,'has':1,'intercrossing':1,'anyhow':1,'swimming':1},'carcase':{'of':1},'masterliness':{'of':1},'whereupon':{'the':1},'rain':{'of':1,'dissolving':1,'each':1,'began':1,'to':1},'biological':{'conditions':1,'idea':1,'necessity':1,'ideas--the':1},'calcareous':{'algae':1},'wanted':{'and':1,'.':2},'publication':{'of':1},'solution...':{'.':1},'grasses':{'and':1},'inexpensive':{'physiologically':1},'days':{'and':1,'old':2,'it':1,'in':2,'there':1,'when':1,'29':1,'.':5,'note':1,'to':2,'weeks':1,'then':1,'fourteen':1,'with':1,'he':1,'on':1,'longer':1,'of':5,'stand':1,'were':1,'following':1,'the':1},'rang':{'our':1,'up':1},'appeals':{'to':2},'possibility--involution':{'rather':1},'researches':{'have':1},'primary':{'reservoir':1,'occupations':1,'meaning':1,'emotions':1,'entity':2,'colours':3,'source':1,'reason':1,'atomic':1},'rank':{'mammals':1},'hearing':{'and':1,'this':1,'is':1,'.':1,'heard':1,'are':1,';':1,'has':1,'comes':1},'staying':{'power':1},'philosophical':{'dictum':1},'adopted':{'by':1},'scissors':{'fall.':1,'.':1},'redivides;':{'there':1},'mercury':{'the':2,'is':1,'it':1,'.':1,'s':2,'between':1,'venus':1,'36.0':1},'magnificent':{'spread':1},'toy':{'of':1},'discriminates':{'between':1},'top':{'with':1,'of':9,'end':1,'are':1},'sumatra':{'and':1},'heights':{'of':1,'holding':1,'above':1},'ton':{'of':1,'or':1,'to':1},'motility':{'are':1,'in':1},'wildly':{'down':1},'variational':{'uplifts':1},'unbroken':{'and':1,'silence':1},'toe':{'to':1,'is':1,'reaches':1},'instreaming':{'multitude':1},'tool':{'is':1,'in':1,'.':2},'brushes':{'off':1},'serve':{'to':1,'as':3,'its':1},'conspicuously':{'as':1,'coloured':1},'190':{'photo':1,'the':1},'western':{'and':1},'injected':{'into':1},'mankind--notably':{'the':1},'frankly':{'answered':1},'divisible':{'into':1},'immaterial':{'.':1},'cogged':{'wheel':1},'classes':{'of':2,'into':1,'called':1,'so':1,'which':1,'orders':1},'flame':{'shattered':1,'is':1,'was':1},'hearing.':{'instinctive':1,'power':1},'bridge':{'the':1,'for':1},'donkey':{'grazing':1},'fashion':{'so':1,'of':1,'with':1,'.':2},'handkerchief':{'.':1},'ran':{'riot':1},'progressing.':{'b':1},'agility':{'.':1,'that':1},'raw':{'material':1,'materials':3},'rat':{'or':1},'regulate':{'what':1,'growth':1,'the':1},'leafy':{'surroundings':1},'relatively':{'poor':2,'great':1,'slow':1,'easygoing':1,'less':2,'cooler':1,'shallow':4,'well':1,'uniform':1,'naked':1,'simple':1,'safe':1,'short':1,'larger':1,'small':1,'recent':2,'more':2},'reminding':{'him':1,'one':1},'-':{'of':1,'you':5,'except':1,'if':1},'isolated':{'ponds':1,'from':1,'northern':1,'here':1,'districts':1,'alpine':1},'thorough':{'aeration':1},'curly-haired':{'australian':1},'perigord':{'mentone':1},'rodents':{'and':1,'are':1},'hatch':{'inside':1,'from':1,'out':1},'world.':{'besides':1,'it':1,'illustration':1,'but':1,'another':1,'if':1,'physical':1},'effectiveness':{'of':1},'douching':{'with':1},'beta-rays':{'from':1},'propitious':{'environment':1},'greatest':{'mathematical':1,'distance':1,'accuracy':1,'reflector':1,'density':1,'of':4,'prominences':1,'triumphs':1,'instrument':1,'physicists':1,'in':1,'authorities':1,'were--the':1,'scientific':1},'though':{'it':9,'in':1,'still':1,'its':1,'there':1,'their':1,'other':1,'more':1,'we':3,'viviparous':1,'that':1,'very':1,'most':1,'they':5,'not':1,'now':1,'man':1,'a':1,'this':1,'many':1,'these':1,'the':9},'picturesquely':{'the':1},'leaf.':{'illustration':1},'tree-snakes':{'tree-lizards':1},'swampy':{'low':1},'glimpses':{'of':1},'plays--the':{'reindeer':1},'plenty':{'of':4},'coil':{'of':3,'is':1,'thus':1},'coin':{'and':1,'through':1},'parting':{'of':1},'glow':{'as':1,'made':1,'with':3,'into':1,'.':2},'lift':{'a':1,'it':1,'sea-urchins':1},'flow':{'of':10,'is':2,'in':1,'or':1,'.':1},'spencer':{'formulated':1},'unwary':{'person':1},'curie':{'and':1,'was':1},'orderly':{'hierarchy':1},'reputation':{'of':1,';':1,'for':1},'gratefully':{'accepted':1},'constance':{'or':1},'chariot':{'and':1},'bait':{'and':1},'spikelets':{'in':1},'manifestation':{'of':3,'in':1},'solutions':{'are':2},'nerve-cells':{'and':4,'an':1,'in':1,'.':1},'mingle':{'with':1},'observatory.':{'a':3,'giant':1,'star':1,'diagram':1,'meteorite':1,'3':1,'jupiter':1,'fig':10,'solar':1,'mars':1,'the':4,'100-inch':1},'endowment':{'of':2,'.':1},'availability':{'of':1},'founded.':{'if':1},'spite':{'of':6},'flat-fishes':{'we':1,'like':1},'situations':{';':1,'which':1},'institution':{'of':1,'at':1,'for':1},'turkestan':{'and':1},'fifty-foot':{'beach':2},'disgust':{'.':1},'gods':{'.':1},'lodge':{'reminds':1,'has':1,'sir':1},'announce':{'every':1},'insect-visitors--began':{'to':1},'borrowed':{'house':1,'shell':1},'waltz':{'round':1},'solution.':{'imitation':1},'nerve-cell.':{'7':1},'watch':{'a':4,'.':1},'fluid':{'water':1,'the':2,'that':1,'was':1,'.':1},'system--regions':{'of':1},'existence--which':{'includes':1},'shutting':{'out':1},'tuberculosis':{'.':1},'despite':{'these':1},'report':{'1914.':1,'1915.':4,'1917.':3,'1917':1,'1914':1},'knocks':{'it':1},'wavy-haired':{'pre-dravidians':1},'gutenberg-tm':{'and':1,'web':1,'license.':1,'concept':2,'name':1,'license':7,'is':1,'work':5,'trademark':4,'s':1,'collection':2,'mission':2,'project':1,'depends':1,'including':1,'works.':2,'works':3,'electronic':18,'ebooks':2},'beads':{'screw':1},'to-day--the':{'elk':1},'countries':{'a':1,'of':1,'there':1,'are':1,'.':1},'rowing':{'and':1},'taken--the':{'emergence':1},'public':{'is':1,'would':1,'support':1,'domain':8},'twice':{'.':1,'as':2,'they':1,'during':1,'the':2,'or':1},'progress.':{'vi':1,'sec':1,'conquering':1},'automatic':{'machine':2,'internal':1,'machine.':1},'farther':{'and':3,'away.':1,'from':2,'away':2,'back':2,'in':1,'north':1},'new.':{'the':1,'illustration':1},'swept':{'down':1,'away':1,'slowly':1,'out':1},'habit':{'a':1,'and':1,'may':1,'of':8,'some':1,'amongst':1,'which':1,'has':1},'nut':{'and':2,'drop':1},'send-off':{'in':2},'retreat.':{'the':1,'another':1},'resist':{'such':1,'the':1,'snapping':1},'t.':{'hobhouse':1},'sea-squirts':{'and':1,';':1,'which':1},'life-preserving':{'value':1},'volans':{'of':1,'which':1},'disturbing':{'influence':2},'discriminating':{'and':1,'quality':1},'combustion':{'is':2,'as':2,'it':1},'capacity':{'and':1,'about':1,'for':3,'that':1,'of':1,'is':1,'.':2,'in':1,'the':1},'ranged':{'one':1},'paternal':{'origin':1,'and':1,'care':1},'mud':{'and':3,'getting':1,'encasements':1,'when':1,'.':2,'that':1,'or':1},'wave-lengths.':{'light-waves':1,'light--visible':1},'finger':{'and':3,'on':1,'from':2,'would':1,'joints':1,'.':1,'usually':1,';':1},'monkeyish':{'features':1},'367':{'000':1},'stored-up':{'energy':1},'approach':{'of':1,'the':2,'160':1,'by':1,'us':1},'discovery':{'and':1,'has':2,'that':2,'of':29,'site':2,'to':1,'which':1,'in':1,'go':1,':':1},'guesses':{'as':1,'or':1},'elk':{'and':2,'the':1},'confusion':{'of':1},'incarnation':{'to':1},'weak':{'and':1,'breakage':1,'keel':1,'plane':1,'one':1},'however':{'composed':1,'and':1,'there':4,'is':1,'it':4,'say':2,'another':1,'in':1,'if':1,'different':1,'acknowledge':2,'interesting':1,'faint':1,'long':1,'by':3,'to':1,'only':2,'slowly':1,'take':1,'that':8,'continuous':1,'what':1,'following':1,'they':2,'not':1,'with':1,'than':1,'a':2,'on':1,'this':1,'enabled':1,'as':1,'so':2,'things':1,'small':1,'the':7},'sand-crab':{'takes':1},'larynx':{'.':1},'aquarium':{'.':1},'consists':{'almost':1,'of':11,'essentially':2,'chiefly':1},'flowering':{'plants':7,'plant':1,'plants.':1},'newt':{'or':1},'improve':{'the':1},'protect':{'the':3},'rhythms':{'.':1},'irregular':{'stretches':1,'speck':1},'jelly':{'about':1,'.':1},'threads':{'used':1,'secreted':3,'of':4,'.':1,'sink':1,'the':2,'are':1},'expense':{'to':1},'frequenting':{'forests':1},'diversity.':{'thus':1},'goodrich':{'evolution':1},'discolorations':{'produced':1},'starling':{'and':1},'majestic':{'spirals':1},'trust':{'.':1},'utilised.':{'indeed':1},'colour-scheme':{'of':1},'influence.':{'illustration':1},'phyllopteryx':{'has':1},'cockroaches':{'to':1,'.':1},'been':{'unified':1,'shot':1,'able':6,'pointed':1,'named':1,'profoundly':1,'attempts':2,'elevated':1,'mentioned':1,'wrought':1,'subjected':1,'written':3,'to':3,'detected':1,'going':3,'transformed':1,'attained':1,'emitting':1,'fancied':1,'unravelled':1,'secured.':1,'very':4,'familiar':2,'reconverted':1,'got':1,'vastly':1,'hitherto':1,'adventurous':1,'rotating':1,'lost':1,'banished':1,'dulled':1,'traced':2,'retrogressions':1,'solved':3,'slipping':1,'found':9,'discussing':2,'interbreeding':1,'achieved':1,'some':1,'briefly':1,'understood':1,'invaded':1,'added':2,'sifted':1,'estimated':1,'borne':1,'established':1,'shown':2,'said':4,'witnessed':1,'beaten':1,'expressed':1,'laid':1,'progress':1,'burned':1,'induced':1,'numerous':1,'blotched':1,'demonstrated':1,'recently':3,'opening':1,'analysed':1,'broken':1,'drawn':1,'colonised':2,'christened':1,'suggested':4,'on':1,'great':1,'buckled':1,'many':1,'greatly':1,'introduced':1,'reached.':1,'examining':1,'raised':1,'followed':1,'adepts':1,'hewn':1,'explained':1,'one':3,'brought':1,'visible':1,'done':1,'capacious':1,'.':1,'given':1,'invented':1,'flaws':1,'weathered':1,'exposed':1,'noticed':2,'smelted':1,'much':2,'slowly':1,'taken':2,'fortuitous':1,'more':1,'life':1,'gaseous':1,'discovered':1,'enough':1,'successful':2,'registered':1,'tested':1,'part':1,'known':7,'suspected':1,'worked':1,'true':1,'chequered':1,'applied':1,'made':10,'abandoned':1,'impatiently':1,'regularised':1,'evolved':3,'pumped':1,'propounded':1,'making':1,'called':1,'and':1,'resolved':1,'proved':1,'indicated':1,'exhausted':1,'turned':1,'an':3,'as':2,'at':3,'in':4,'seen':1,'constricted':1,'clearly':1,'if':1,'different':2,'no':1,'emancipated':1,'that':2,'generally':2,'handed':1,'any':2,'hot':1,'speeding':1,'digged':1,'fostered':1,'used':2,'tried':2,'confirmed':1,'prepared':1,'moving':1,'throughout':1,'measured':1,'recent':1,'a':11,'stupendous':1,'described':2,'slightly':1,'calculated':2,'required':1,'becoming':1,'thought':1,'dissolved':1,'so':4,'the':7},'legend':{'of':1},'were.':{'the':1},'spread':{'and':1,'from':1,'of':3,'over':2,'until':1,'underneath':1,'to':2,'through':2,'table':1,'public':1,'out':3},'expected':{'when':1},'poker.':{'they':1},'pallas':{'s':1},'pecked':{'at':2},'bladder':{'growing':1},'uncommon':{'on':1},'gaboon':{'in':2},'proportional':{'to':1},'catch':{'this':1,'small':1,'the':1},'own--a':{'fore-limb':1},'ancestors.':{'given':1},'deeps':{'the':1,'3':1,'are':1},'5a':{'merychippus':1},'lessen':{'the':1},'n':{'is':1,'.':5},'ape':{'and':2,'frequenting':1,'or':1,'for':1,'.':1,'s':1,'s.':1,'man':2,'agree':1,'at':1},'fallow':{'deer':1},'gave':{'off':6,'of':1,'rise':2,'most':1,'place':1,'the':3},'precede':{'the':1},'natives':{'of':1},'cyclones':{'.':1},'cast':{'.':1,'aside':1,'by':2},'jellyfishes':{'the':1,'swimming-bells':1,'worms':1},'expenses':{'including':2},'experts':{'should':1},'decanter':{'for':1},'www.pglaf.org.':{'section':1},'significance--called':{'the':1},'containing':{'a':3,'meat':1,'liquid':1,'very':1,'say':1,'the':1,'more':1},'headley':{'life':1},'circumventing':{'the':1},'suggest':{'the':4,'that':3},'underwood.':{'boiling':1,'the':1},'sollas':{'w':1},'linked':{'to':1,'together':1},'forehead':{'and':2,'a':1,'the':1,'without':1,'beetling':1},'utilitarian':{'in':1},'complex':{'and':2,'fur':1,'of':2,'problems':2,'.':3,'forms':1,'as':1,'nucleus':1,'brains':1},'gambian':{'mud-fish':2},'advances':{'the':3,'that':1,'but':1,'came':1,'in':2},'scapula':{'or':1},'snow-line':{'.':1},'several':{'millions':1,'colours':2,'kinds':1,'centuries':1,'cells':1,'sometimes':1,'human':1,'times':1,'hours':2,'enregistered':1,'complex':1,'printed':1,'molecules':1,'cases':1,'years':1,'thousands':1,'other':1,'transparent':1,'more':1},'satellite':{'of':1},'peaks':{'.':1},'pick':{'them':1,'up':2,'out':1},'constantly--either':{'spontaneously':1},'mouse-pupil':{'with':1},'characters':{'even':1,'of':1,'is':1,'.':1,'such':1,'swarming':1},'darwin.':{'illustration':1},'cycle':{'thread':1},'mentioning':{'birds':1},'tassel':{'being':1,'discharged':2,'branches':1,'electrified':2,'strikes':1},'staving':{'off':1},'paralysed':{'and':2},'possessed':{'of':1,'by':1,'in':2},'boxes':{'golden':1,'similar':1,'difficult':1},'rock-pool':{'where':1},'wide-awake':{'more':1},'mother':{'and':7,'digs':1,'for':1,'places':1,'that':1,'may':1,'of':1,'orang':1,'spider':1,'carey':2,'s':2,'so':1,'are':1,'tramps':1,'earth':1,'.':2},'unification':{'but':1},'jean':{'brownian':1},'photosphere.':{'above--that':1},'possesses':{'.':1,'an':1},'seasonal':{'colour-change':2,'change':1},'food-supply':{'.':2},'departed':{'from':2},'mending':{'of':1,';':1},'harmonise':{'with':2},'eye-hole':{'of':1},'partridge':{'sitting':1},'foundation.':{'-':1},'rivulets':{'and':1},'tailless':{'cat':1},'insectivore':{'stock':1},'evolution.':{'we':1,'metcalf':1,'parasitism':1,'this':1,'hutchinson':1,'illustration':1,'mccabe':1,'v':1,'the':1,'darwin':1,'iii':1,'osborn':1},'vibration':{'increased.':1,'of':1,';':1,'.':1},'master-key':{'that':1},'leibnitz':{'s':1,'who':1},'triangular-shaped':{'piece':1},'apart':{'and':1,'from':14,'of':3,'continuing':1,'.':2,'the':2},'interprets':{'be':1},'humanity':{'of':1,'into':1,'.':1},'foot.':{'there':1},'casting':{'themselves':1},'tracheae':{'.':1},'breaks':{'making':1,'off':2,'up':1,'across':1,'under':1},'sussex':{'and':1,'weald--hinted':1,'in':1},'vulture':{'is':1},'chitin':{'which':1,'.':1},'flattish':{'web':1},'expels':{'vitiated':1},'descending':{'element':1},'judge':{'the':1,'animals':1},'burns':{'the':1,'without':1},'advanced':{'and':1,'again':1,'life':1,'knowledge':1,'.':1,'to':1,'than':1},'foster-parent':{'to':1},'melting':{'ice.':1,'ice':1},'appearing':{'and':1,'on':1,'more':1},'angoras':{'and':1},'gift':{'follows':1},'55':{'cubic':1},'57':{'photo':2},'gifted':{'a':1},'50':{'states':1,'000':1},'53':{'the':1},'52':{'inches':1},'specific':{'gravity':2,'permission':1},'gristly':{'fishes':2,'rod':1},'mosquito':{'is':1,'introduces':1},'fixity':{'of':1},'56':{'photo':2,'lb':1},'outpour':{'of':1},'over-anxious':{'on':1},'successfully':{'applied':1,'by':1},'sponge':{'121':1,'illustration':1,'.':1,'to':1,'densely':1,'which':1,'has':1,'or':2},'clawed':{'mammals':1},'cessation':{'of':1},'finger-posts':{'for':1},'indirect':{'consequential':1,'interference':1,'in':1},'guess':{'and':1,'what':1},'tracheate':{'arthropods':1},'intellect':{'who':1,'which':3},'rapidity':{'and':1,'of':1,';':1,'illustrating':1,'.':1},'first--began':{'to':1},'drowned':{'himself':1},'proceeding':{'to':1,'is':1,'in':1},'rhine':{'and':1},'hibernates':{'but':1},'self-effacing':{'flat-fishes':1},'ear':{'and':1,'a':1,'of':2,'well':1,'marked':1,'to':1,'below':1,'which':1,'in':1,'has':1,'160':1,'came':1},'ice':{'and':1,'when':1,'is':1,'ages':4,'it':1,'.':2,'age.':2,'age':5,'287':1,'travel':1},'everything':{'and':1,'appeals':1,'that':1,'is':1,'as':1,'depends':1,'in':1,'not':1,';':1,'teemed':1},'loins':{'of':1},'select':{'a':1,'the':3},'seals.':{'almost':1},'cord':{'and':1,'lies':1,'the':1,'then':1},'core':{'to':2,'is':1,'254':1,'illustration':1,'left':1},'antiquity--perhaps':{'30':1},'disappeared':{'and':1,'from':1,'leaving':1,'somewhat':1,'.':1,'with':1},'littoral':{'animals':1,'haunts':1,'zone':1,'area':3},'permitted':{'by':2},'chapter':{'on':1,':':1,'give':1,'is':1,'in':7,'one':1,'to':1,'how':2,'.':1,'has':1,'was':1,'more':1},'limitation':{'of':2,'set':1,'permitted':1,'in':1},'attacks':{'the':1},'plum':{'and':1},'spikelet-bearing':{'axis':1},'burbank':{'such':1},'plunging':{'into':1},'coiled':{'round':1,'up':1},'steadily':{'accumulating':1,'through':1,'radiating':1,'decreasing':1},'efforts':{'project':1,'of':1,'and':1,'her':1},'alga':{'like':1,'which':1},'sept':{'.':1},'osborn':{'h':2,'s':4,'points':2,'calls':1},'antique':{'types':1},'primitive':{'animals':1,'nebulae':1,'instrument':1,'insects':1,'constituents':1,'men':3,'mammals':2,'.':3,'forms':1,'bushmen':1,'heat':1,'races':1,'bolt':1,'culture':1,'peoples':1,'mammal':1,'collaterals':1,'creatures':1,'type':1,'types':2,'man':2},'cracking':{'the':1},'presence':{'of':4,'.':1},'orders':{'of':2,'families':1,'like':1},'puzzle':{'in':1},'visible':{'and':2,'on':2,'all':2,'from':1,'266':1,'light':1,'radium':1,'spots':1,'.':2,'to':3,'surface':3,'suspended':1,'in':1,'tens':1,'by':1,'at':2},'bath':{'nor':1},'finely':{'developed':1},'bats':{'certainly':1,'for':1,'.':2,';':1,'volplaning':1,'or':1,'involves':1},'existed':{'.':1},'rely':{'to':1},'weald--hinted':{'at':1},'outbreaks':{'on':1,'of':1},'indispensable':{'as':1,'role':1,'sociality':1,'if':1},'sneezing':{'and':1},'transform':{'mechanical':1},'sunlight':{'and':1,'for':2,'is':2,'reflected':1,'to':2,'can':2,'which':3,'in':2,'has':1,'into':1,'are':1,'he':1},'why':{'a':1,'do':1,'we':1,'animals':1,'they':1,'for':1,'this':1,'is':2,'there':1,'some':1,'it':2,'should':4,'most':1,'so':1,'iron':1,'not':1,'our':1,'the':2,'he':1},'stuck':{'together':1},'tacks':{'of':2},'partridges':{'respond':1},'metabolism':{'.':1},'synthesis':{'the':1},'round.':{'c':1,'in':1},'head':{'and':2,'weighted':1,'from':1,'just':1,'157':1,'of':6,'is':2,'after':1,'downwards':1,'to':1,'when':1,'65':1,'they':1,'the':1,'with':1,';':1,'shows':1},'medium':{'and':1,'on':1,'we':1,'that':1,'of':3,'called':1,'through':1,'a':1,'you':1,'throughout':1,'with':2,'or':1},'amateur':{'knows':1},'hydrogen--which':{'consists':1},'java.':{'2':1},'wireless':{'he':1,'telegraphy':1},'heat':{'and':9,'because':1,'being':1,'is':4,'as':1,'are':1,'in':2,'our':1,'.':9,'is--substitutes':1,'rays':1,'from':4,'for':1,'to':2,'there':1,'had':1,'continually':1,'how':1,'only':1,'radiated':1,';':3,'has':1,'energy':12,'that':1,'becomes':1,'introduce':1,'heat':1,'radiations':1,'by':1,'like':2,'on':2,'would':1,'of':4,'could':1,'chiefly':2,'so':1,'light':1,'the':1,'changes':1,'or':2},'silvery-looking':{'light':1},'hear':{'a':1,'about':1,'the':1,'it':1},'satisfactorily':{'accounted':1},'heap':{'it':1},'manoeuvres':{'she':1},'removed':{'all':1,'in':1,'from':1,'.':1},'donate.':{'international':1},'luxuriant':{'vegetation':1},'admiration':{';':1},'indo-china':{'china':1},'portions':{'and':1,'reached':1,'of':1},'consequences':{'may':1,'.':2,'to':1,'as':1,'follow.':1,'have':1},'born':{'a':1,'and':1,'like':1,'of':1,'in':1,'.':1,'as':1,'so':1,'child':1},'bids':{'fair':1},'vivo':{'as':1},'meteorites.':{'every':1},'undeniable':{'endeavour':1,'apartness':1},'disturbances':{'and':1,'of':3,'we':1,'are':1,'man':1},'prematurely':{'and':1},'brightly':{'illumined':2,'but':1,'coloured':3},'furs':{'.':1},'roamed':{'many':1},'escape':{'the':4,'.':1,'from':3,'between':1},'everest':{'would':1},'0.62':{'7700':1},'scotia':{'voyage':1},'universes.':{'illustration':1},'shines':{'through':1},'entellus':{'venture':1},'furl':{'if':1},'constructed':{'to':1,';':1,'from':1},'looked':{'a':1,'upon':1,'at':1,'like':1},'planets--venus--is':{'there':1},'inborn':{'inspirations':1,'predispositions':2,'novelties':1,'engrained':1,'repertory':1,'capacities':2,'pre-arrangements':1,'efficiencies':1,'impulse':1,'in':1,'not':1,';':1,'changes':1,'or':1,'powers':1},'no':{'atmosphere':1,'less':3,'lack':1,'resistance':1,'commoner':1,'hibernation':1,'facts':1,'nearer':1,'glimpse':1,'effort':1,'better':1,'tail':1,'other':3,'warrant':2,'real':1,'sound':1,'return':1,'animal':1,'descendants':1,'trees':1,'figment':1,'instinctive':2,'difference':2,'twilight':1,'bigger':1,'particle':1,'success':1,'yucca':1,'cry':1,'eel':1,'indication':1,'nerves':1,'bulky':1,'scenery':1,'right':1,'hard':1,'idea':1,'sign':1,'cost':2,'escape':1,'employment':1,'bacteria':1,'enemies':1,'blue':1,'living':2,'thoroughfare':1,'steadfast':1,'opening':1,'definite':2,'spur':1,'kidneys':1,'movement':1,'body':1,'noise':1,'cleverer':1,'power':1,'parental':1,'attention':1,'use':3,'twinkling':1,'difficulty':2,'reason':4,'chapter':1,'restrictions':2,'great':1,'actual':1,'feelers':1,'certainty':1,'transition':1,'motion':1,'connection':1,'place':1,'nervous':1,'successors':1,'transit':1,'one':16,'such':6,'sounds':1,'scent':1,'ether':1,'landscape':1,'exertions':1,'jugglery':1,'additional':1,'union':1,'discrimination':1,'doubt':28,'positive':1,'interest':1,'more':5,'remedies':1,'life':2,'tissues':1,'way':1,'reaction':2,'training':1,'direct':2,'adult':1,'true':1,'plants':2,'animals':2,'conception':1,'cells':1,'air':1,'individual':1,'risks':1,'chlorophyll-possessing':1,'proof':2,'larger':3,'deliberation':1,'lock':1,'modern':3,'mind':1,'mining':1,'evidence':4,'chin':1,'sense':1,'ready':1,'floating':1,'organs':1,'check':1,'winter':1,'depth':1,'chemical':1,'vital':1,'branch':1,'intelligent':1,'plant':1,'star':1,'crowding':1,'trace':3,'backbone':1,'vicious':1,'prohibition':1,'pouch':1,'representations':1,'slums':1,'man':1,'diffusion':1,'longer':8,'rotting':1,'light':2,'shore':1,'fresh':1},'whereas':{'on':1,'lead':1,'these':1,'in':2,'others':1,'the':3},'tip':{'of':5,'t':1,'to':2,'.':1},'perfected':{'on':1,'scientific':1,'by':1},'tin':{'with':1},'setting':{'apart':3,'forth':1,'in':1},'sobral':{'brazil':1,'brazil.':1},'globigerinid':{'foraminifera':1},'investigations':{'in':1},'papers':{'and':1,'the':1},'pipa':{'the':1,'americana':2},'picture':{'represents':1,'these':1,'of':11,'is':1,'acts':1,'an':1,'the':2,'with':1,'shows':1},'ceasing.':{'where':1},'worm-types.':{'among':1},'toad':{'and':1,'winds':1,'s':1,'pipa':3,'looks':1},'preceding':{'state':1,'neanderthal':2,'the':1},'uniformly':{'around':1},'emission':{'came':1},'flower-perfumed':{'nor':1},'leonard':{'johnson':2},'ridges':{'and':3,'the':2,'which':1},'dullest':{'red':1},'discharge':{'takes':1,'of':3,'travels':1,'through':1,'in':4,'with':1},'suffused':{'with':3},'thorax':{'.':1},'buller':{'s':1},'to-day':{'and':2,'is':2,'as':1,'are':2,'in':1,'there':1,'.':13,'attack':1,'recapitulates':1,':':1,'mostly':1,'that':2,'very':1,'after':1,'but':1,'such':1,'by':1,'104':1,'a':2,'about':1,'of':2,'shall':1},'longer':{'be':2,'what':1,'redolent':1,'than':7,'in':1,'deny':1,'or':1,'to':3,'because':1,'at':1,'waves':1,'the':1,'.':1,'emit':1},'n.':{'america.':1},'1800':{'of':1},'vigorously':{'.':1,'continued':1,'for':1,'that':1},'changed':{'and':1,'by':1,'from':1,'but':1,'.':1,'in':1,'the':3,'its':1},'hypohippus':{';':1},'serious':{'and':1,'errors':1,'business':1,'nervous':1,'friction':1,'responsibilities':1,'difficulties':1},'nuclei':{'then':1,'within':1},'undoubted':{'but':1},'remarkable':{'plants':1,'and':2,'bony':1,'physical':1,'knowledge':2,'success':2,'habit':2,'appearance':2,'metamorphosis':1,'combination':1,'results':1,'discovery':2,'except':1,'power':3,'exuberance':1,'perfection':1,'words':1,'locomotor':1,'.':2,'sucking':1},'varying':{'forms':2,'nature':1,'notably':1,'magnitude--and':1,'degrees':1,'situation':1,'with':1},'rod':{'which':1,'.':1},'focus':{'of':1,'whence':1,'within':1},'leads':{'to':2,'one':1,'us':2,'on':1},'inspirations':{'of':1},'computation':{'.':1},'coyote':{'.':1},'jointed-footed':{'invaders':1,'animals':1},'dragon-flies':{'and':2,'are':1},'displaying':{'the':1,'performing':2,'or':1},'tucking':{'it':1},'injure':{'their':1},'doom':{'by':1},'books--an':{'outline':1},'essentials':{'of':1},'ascidians':{'and':1},'fahr.':{'due':1},'metallurgists':{'and':1},'passage':{'from':6,'of':3,'is':2,'onward':1,'direct':1,'in':2},'environment':{'and':4,'we':2,'adaptations':1,'where':1,'acts':1,'.':3,'to':1,'113':1,'which':1,'making':1,';':1,'education':1,'with':1},'charge':{'and':1,'on':1,'anything':1,'for':1,'was':1,'of':3,'to':1,'a':3,'with':1},'promoting':{'the':1,'free':1},'discovering':{'new':1},'hammers':{'on':1,'until':1,'it':1},'ulna':{'of':1,'bone':1},'advantage':{'for':1,'may':2,'of':7,'over':2,'here':1,';':1,'was':1,'is':1},'coot':{'swims':1},'exalted':{'powers--man':2},'inspiriting':{'picture':1},'fleece':{'cutting':1},'untenable':{';':1},'nesting':{'behaviour':1},'refractive':{'granules':1},'regular.':{'now':1},'roving':{'animal':1},'cool':{'and':1,'mass':1,'gas':1},'annihilated':{'distance':1},'clouds':{'of':3,'which':1,'in':1},'impressive':{'triumphs':1,'picture':1,'nebula':1},'level':{'and':1,'on':3,'of':5,'is':1,'there':1,'up':1,'.':3,'at':1,'the':1,';':1,'man':1},'sedimentary':{'rocks':6},'hawaii':{'to':1},'cloudy':{'precipitate':1},'standards':{'is':1,'are':1},'starlit':{'night':1},'slouching':{'gait':1},'vicissitudes':{'due':1},'quick':{'to':5,'or':1},'lever':{'against':1},'accumulation':{'of':2},'bull-terrier':{'called':1},'illustrating':{'the':5,'walking':2,'animal':1},'trend':{'of':3},'becquerel':{'brought':1,'was':1},'obsolete':{'old':1},'inland':{'and':1,'the':1,'than':1},'widened':{'and':1},'invaded':{'age':1,'by':1},'dried':{'and':1,'up':4},'hair.':{'the':1},'trent':{'the':1,'291':1,'290':1,'an':1},'danger-note':{'.':1},'bacteria':{'and':1,'serving':1,'that':1,'of':2,'though':1,'.':1,'can':1,'have':1,'in':1},'substitute':{'the':1},'spectral':{'lines':1},'water-plants':{';':1},'stands':{'about':1,'unique':1,'by':2,'apart':1},'stomach.':{'4':1},'structure--the':{'remains':1},'extinct.':{'unfortunately':1,'others':1},'paragraph':{'1.f.3':3,'1.e.1.':1,'to':1,'1.e':1,'f3':1,'1.e.8':1,'1.c':1,'1.e.8.':1,'1.e.1':1},'goes':{'on':6,'back':1,'leaving':1,'down':1,'to':4,'as':1,'without':1,'through':1},'bearers':{'and':1},'illimitable':{'.':1},'morgan':{'observed':1,'s':1,'who':1,'was':1},'intelligent.':{'sec':1},'ninety-nine':{'cases':1},'mean--matter':{'ether':1},'evolution-idea':{'to':1,'is':2,'has':1},'water':{'and':15,'brightly':1,'because':1,'furnished':1,'being':1,'is':5,'spider':1,'held':1,'as':2,'owing':1,'through':1,'are':1,'in':5,'earth':1,'out':2,'even':1,'will':1,'from':4,'would':2,'to':8,'remains':1,'began':1,'that':4,'28':1,'.':28,'how':1,'only':1,'offers':1,'which':2,';':5,'gets':1,'was':1,'into':2,'do':1,'than':1,'though':1,'may':1,'but':3,'gently':1,'flows':1,'came':1,'rises':1,'with':2,'by':1,'nor':1,'a':2,'on':3,'periodically':1,'has':1,'animals':1,'for':4,'you':1,'fills':1,'did':1,'of':2,'seldom':1,'vigorously':1,'occurs':1,'sometimes':1,'where':1,'near':1,'became':1,'so':1,'can':2,'were':1,'at':3,'beneath':1,'disappears':1,'or':2,'comes':1,'first':1},'meteorites':{'is':1,'it':1,'every':1,'are':1,'have':1,'enter':1,'or':1},'generation.':{'the':1,'they':1},'twentieth':{'trial':1},'groups':{'of':4,'are':2,'drifting':1},'cyril':{'crossland':1},'dissipated':{'as':2,'the':1,'.':1},'cork':{'she':1,'out':1},'f.r.s.':{'conservator':1},'one--of':{'protective':1},'pearly':{'nautilus':7,'nautilus.':1},'bygone':{'ages':1},'thirty':{'miles':1,'million':4,'stars':1,'deep':1,'years':4},'healthy':{'lives':1},'chalmers':{'mitchell':1},'blotch':{'on':1},'sex--beginning':{'of':2},'stomachs':{'of':1},'descended':{'and':1,'from':6},'weird':{'ways':1,'peaks':1},'illustrations.':{'1':1},'say--of':{'various':1},'emerge':{'the':2,'before':1,'from':1,'as':1,'in':1},'credited':{'with':1},'threes':{'and':1},'semang':{'and':1},'swallowed':{'and':1,'by':1,'one':1},'crisis':{'in':1},'wings.':{'vi':1},'bulbs':{'on':1},'russell':{'has':1,'sons.':2},'atom.':{'how':1,'the':1,'like':1,'an':1},'percept':{'of':1},'prey':{'of':1,'by':1,'working':1,'.':3},'memory':{'of':1},'negroes':{'and':1},'lycosa':{'lying':1},'australian':{'and':1,'mudfish':1,'race':1,'more-pork':2,'frilled':2,'the':1,'species':1},'diagrams':{'of':1},'conductor':{'of':1},'bristle-tails':{'show':1},'fuel':{'.':1},'flapping':{'their':1},'southwards':{'following':1,'.':1},'sequoia':{'or':1},'cases':{'is':2,'within':1,'it':4,'purely':1,'at':1,'in':3,'yet':1,'its':1,'out':2,'no':1,'rather':1,'there':2,'two':1,'.':3,'to':1,'supplanted':1,'much':1,'which':1,'under':1,'relatively':1,'be':1,'we':2,'that':2,'stow':1,'however':4,'they':1,'measured':1,'than':1,'like':1,'especially':1,'e.g':3,'this':1,'of':3,'the':9,'where':3},'andalusia':{'arabia':1},'autumn':{'gales':1,';':1,'or':1,'they':1},'diagram.':{'the':1},'collision':{'with':2},'thousands':{'being':1,'of':17,'but':1},'reflux':{'of':1},'modified':{'and':1,'for':2},'means.':{'sec':1},'handle.':{'in':1},'districts':{'here':1,'.':1},'jetsam':{'that':1},'female-producing':{'egg':1},'wrong:':{'hence':1},'fauna':{'of':5,'is':1,'there':1,'namely':1,'.':1,'contemp':1,'as':2,'does':1,'bodily':1},'attain':{'a':1},'streak':{'of':1},'hutchinson':{'h':1},'wrist-bones':{'with':1},'stream':{'and':1,'sometimes':1,'gripping':1,'seeking':1,'of':7,'there':1,'some':1,'.':1,'relative':1,'that':1,'going':1,'the':1,'with':1,'or':1,'ought':1,'through.':1},'irruption':{'of':1},'supra-renal':{'and':1,'.':1},'and--it':{'smells':1},'coal--dissipation':{'of':1},'amalgams':{'and':1},'stroke':{'of':4},'performed':{'viewed':1},'octopus.':{'shifts':1},'flora.':{'the':1},'provoke':{'new':1,'them':1},'hydrogen':{'and':3,'uniting':1,'19':1,'travel':1,'atom':1,'gas':4,'.':2,'to':1,'rising':2,'at':3,'were':1,'so':1,'was':1},'requirements':{'of':1,'we':1,'are':1,'.':1},'white-hot.':{'they':1},'mole':{'and':1},'secured':{'in':1},'eloquent':{'vestige':1,'anticipation':1,'detail':1,'instance':1,'in':1,'than':1},'innumerable':{'tons':1,'methods':1,'minute':1},'fishes--a':{'very':1},'ginkgos':{'and':1},'vital':{'and':1,'activities':1,'processes':2,'power':1,'importance':2,'inter-relations':2,'than':1,'to':1,'connection':1,'interest':1,'activity':1,'laboratory':1,'process':1,'sounds':1,'economy':1},'fourth':{'and':1,'great':2,'haunt':1,'ice':1,'state':3,'printing':1,'millennium':1,'glacial':1},'speaks':{'of':1},'reactions.':{'3':1},'secures':{'the':1},'unutterably':{'stupid':1},'information':{'is':2,'about':6,'can':1},'digesting':{'intruding':1,'them':1},'larmor':{'suggested':1},'eighty':{'figures--bison':1,'distinct':1,'different':1,'miles':1,'million':1},'unawares':{'.':1},'apprenticeship':{'and':2,'often':1,'of':1,'since':1,'.':1,'to':1,'at':1,'in':1,'during':2,'the':1},'eighth':{'printing':1},'branches':{'and':1,'down':1,'still':1,'that':1,'of':6,'in':1,'.':2,'will':1,'gives':2,'firmly':1,'at':1,'hanging':1,'must':1,'come':1,'or':2,'out':1},'drained':{'swamps':1},'commodity':{'on':1},'joint':{'to':1},'enemies.':{'when':1,'if':1},'branched':{'and':2},'lagoon':{'and':1},'water-oceans.':{'in':1},'lamented':{'the':1},'imagining':{'how':1},'estuary':{'and':1},'furnished':{'the':1,'them':1,'an':1},'constituents':{'may':1,'and':1,'.':1,'of':1},'mainly':{'composed':1,'among':1,'arboreal':1,'vegetarian':1,'to':1,'in':2,'vertical;':1,'by':1},'discharging':{'them':1,'sepia':1},'ocean-troughs':{'and':1},'furnishes':{'a':2},'ducklings':{'catch':1},'motions':{'would':1,'of':2,'can':1,'which':1,'along':1,'are':1},'weather.':{'there':2},'side--a':{'mobility':1},'pre-eminent':{'as':1,'e.g':1},'pterodactyls':{'varied':1,'could':1,'had':1,'birds':2,'by':1,'gave':1},'supplemented':{'the':1},'emmer':{'which':1},'wallace':{'maintained':1,'was':1,'darwinism.':1},'organisation':{'than':1},'mantle':{'of':1,'as':1},'offers':{'to':2,'the':1,'grave':1,'an':1},'marvels':{'the':1},'meridian':{'while':1,'.':1},'whirlpool':{'of':1,'or':1},'employment':{'of':2},'pre-dravidians.':{'the':1},'obtaining':{'a':2,'considerable':1},'motion.':{'the':2},'photograph.':{'illustration':2},'evolution':{'and':2,'particularly':1,'is':13,'states':1,'as':1,'are':1,'in':8,'home':1,'if':2,'from':1,'no':1,'remains':1,'there':3,'.':12,'current':1,'to':4,'that':2,'going':11,'fig':1,'which':2,';':1,'has':6,'was':6,'real':1,'we':1,'led':1,'theory':3,'means':1,'but':3,'quite':1,'not':1,'animals':1,'1917':1,'chequered':1,'a':1,':':1,'implies':1,'especially':1,'practically':1,'of':54,'introductory':1,'53':1,'element':2,'will':1,'so':1,'agoing.':1,'though':1,'the':4},'delighted':{'darwin.':1},'underneath':{'things':1,'the':2,'her':1,'.':1},'expertness':{'the':1},'conquer':{'every':2,'for':1},'browns':{'and':1},'sowing':{'and':1,'but':1},'term':{'race':1,'commensalism':1},'name':{'given':1,'from':2,'for':1,'of':1,'cock-paidle':1,'electrons':1,'which':1,'mare.':1,'associated':1,'primates':1},'civilisation':{'of':1,'is':1,'there':1,'here':1,'.':1,'depends':2,'the':1,'more':1},'advent':{'of':1},'possibilities':{'and':1,'of':3,'.':1,'are':1,'in':1,'probably':1},'realise':{'of':1,'the':3,'what':1,'that':3},'telegraphic':{'and':1},'individually':{'and':1},'weighted':{'with':1},'gape':{'and':1,'two':1},'woodpeckers':{'are':1},'sprinkle':{'iron':1},'catching':{'and':2,'small':4,'the':2,'with':1,'some':1},'begun':{'to':1,'before':1,'some':1,'.':1},'distributor':{'under':1},'tumultuous':{'surging':1},'y.s.':{'which':1,'.':1},'ultimately':{'composed':1,'the':1,'dispensed':1},'intercourse':{'and':1,'.':1},'factors':{'and':1,'would':1,'that':2,'of':2,'which':1,'in':5,'the':1},'profit':{'a':1,'by':2,'501':1},'these--which':{'illustrate':1},'attracted':{'to':1,'one':1},'parallax':{'the':1},'kent':{'dating':1,'but':1,'cro-magnon':1},'picture-logic':{'which':1},'overflowing':{'waters':1},'eagle':{'lifts':1,'or':1},'--the':{'mind':1,'planets--venus--is':1},'performing':{'distributing':1,'other':1,'displaying':1,'chimpanzee':1,'copying':1},'theory':{'is':7,'as':1,'sec':1,'in':1,'bears':1,'.':1,'which':3,';':1,'has':1,'was':1,'more':1,'we':1,'provides':1,'that':5,'1796':1,'but':2,'vividly':1,'nor':1,'a':1,'implies':1,'of':16,'or':1},'stimuli.':{'animals':1},'interpose':{'when':1},'ascertain':{'how':1},'electrified':{'270':1,'and':1,'the':1,'with':1,'will':1},'gizzard--certainly':{'the':1},'explorers':{'of':1},'reptiles--snakes':{'lizards':1},'importance.':{'difficulties':1,'sec':1},'www.pgdp.net':{'updated':1,'illustration':1},'corroborating':{'individual':1},'motion':{'and':2,';':2,'would':1,'was':1,'whether':1,'of':3,'is':2,'within':1,'or':1,'to':1,'as':2,'than':1,'in':1,'into':1,'the':1,'.':3,'ever':1,'kinetic':1,'are':1},'turn':{'on':1,'form':1,'stiff':1,'of':3,'is':1,'it':1,'the':2,'to':4,'are':1,'in':1,'into':1,'making':1,'white':1,'with':1,'round':1,'becomes':1,'once':1},'butterflies':{'allied':1,'are':3},'place':{'and':2,'is':1,'inaccessible':1,'it':1,'itself':1,'in':1,'end':1,'for':3,'remains':1,'there':2,'favouring':1,'preventing':1,'to':4,'work;':1,';':1,'let':1,'by':1,'a':1,'on':1,'of':9,'work':1,'sea-anemones':1,'the':1,'where':1,'or':1},'retreating':{'forehead':1},'swing':{'of':1,'to':1},'deep-sea':{'life':1,'animals':2,'fish':3,'sponge':2,'corals.':1,'are':1,'fishes':2,'fauna':1},'gradually.':{'when':1},'close-set':{'eyes':1},'saucers':{'.':1},'weakling':{'it':1},'origin':{'and':3,'of':19,'is':1,'there':1,'direct':1,'are':1,'the':1},'pelican':{'s':2},'surviving':{'the':1,'symbol':1},'revenue':{'service':1},'faculty':{'in':1,'if':1},'greatest.':{'v':1},'soaring':{'upward':1},'them--':{'melanocetus':1},'array':{'of':1},'field-voles':{'perhaps':1},'george':{'h':1},'millions':{'of':39,'the':1,'is':1,'.':1},'gertrude':{'white':1},'given':{'because':1,'over':1,'sense-presentation':1,'as':2,'in':1,'.':1,'to':8,'illustrations':1,'conditions':1,'variability':1,'away--you':1,'sufficient':1,'rise':1,'but':1,'part':1,'an':2,'by':2,'a':5,'off':1,'up':1,'us':2,'place':2,'the':3},'necessarily':{'be':1,'progressive':1,'keep':1,'progressive;':1,'cooling':1,'difficult':1},'persons.':{'the':1},'marine.':{'in':1},'croaking-sacs':{'which':1},'trillion':{'100':1,'miles':5,'revolutions':1,'molecules':1,'waves':1},'tides--origin':{'of':1},'plastic':{'and':3,'appreciation':1,'stock--some':1},'stimulation':{'proves':1},'hardwood':{'forests':1},'returns':{'to':1,'.':1},'virgil':{'refers':1},'fortuitous':{'.':1},'legally':{'required':1},'white':{'and':1,'polar':1,'one':2,'hair':1,'ermine':1,'in':1,'dress':1,'surfaces':1,'winter':1,'except':1,'.':2,'surroundings':1,'combine':1,'stars':2,'cross':1,'save':1,'body':1,'then':1,'star':1,'of':1,'but':1,'pigment':1,'heat':2,'wake':1,'pelage':1,'background':1,'remarks':1,'with':1,'by':1,'card':1,'plumage':1,'fur':1,'coat':1,'colour':1,'will':2,'s':1,'mass':1,'light':9,'blackbird':1,'the':1,'or':1,'blood':1},'anguilla':{'vulgaris':1,'vulgalis':1},'farthing--contains':{'an':1},'gives':{'a':7,'rise':1,'up':1,'us':5,'.':1,'place':1,'the':2},'sex-call':{';':1,'.':1},'million.':{'there':1},'hug':{'the':1},'aurelia':{'.':1},'centipedes':{'and':2,'millipedes':1,'spiders':1},'hum':{'comparable':1},'circulated':{'round':1},'released':{'from':1},'suspended.':{'the':1},'freeze':{'throughout':1},'holder':{'found':1,'the':1,'.':1,'your':1,'on':1},'intrinsically':{'too':1},'population':{'consists':1,'of':5,'could':1,'contains':1,'.':1},'eohippus':{'about':1,';':1},'unfortunately':{'the':1,'we':1},'require':{'a':1,'extension':1,'no':1,'fifty':1,'to':3,'much':1,'such':1,'intelligent':1},'pigmy':{'representatives':1},'modelled':{'by':6},'computer':{'virus':1,'codes':1},'ooze':{'likewise':1,'so':1,'of':1},'aesthetic':{'reasons':1},'proteins':{'e.g':1},'1.e.9.':{'1.e.8':1,'1.e.3':1},'earth.':{'a':1,'we':1,'is':1,'it':1,'illustration':1,'making':1,'the':1,'establishment':1},'and':{'discards':1,'all':10,'pheasant':1,'consider':1,'caused':1,'stems':1,'results':1,'foul':1,'four':1,'crocodile':1,'avalanche':1,'debris':1,'broader':1,'dainty':1,'go':3,'honour.':1,'nematodes':1,'decisions':1,'causes':2,'skeleton':1,'hold':4,'depend':1,'hunting':1,'educable':1,'shrinkage':1,'father':1,'young':4,'send':1,'squirrels':2,'to':29,'finally':5,'reptiles':1,'skill.':1,'stable':1,'portentous':1,'hammers':1,'cochroaches':1,'sent':1,'ulna':1,'activities':1,'protective':1,'presently':1,'club-moss':1,'very':4,'einstein--the':1,'miners':1,'wave':1,'interglacial':1,'coal-measures':1,'fall':2,'mixing':1,'more.':1,'soles':1,'monkeys':2,'minute':2,'respiratory':1,'baking':1,'parrot':1,'ceased':1,'tear':1,'michael':1,'joined':1,'culminating':2,'large':1,'these':13,'sand':1,'guiding':1,'small':2,'venus':1,'mammoth.':1,'snails':1,'round':1,'degeneracy':1,'favoured':1,'smaller':2,'illustrating':1,'ten':1,'concise':1,'imagination.':1,'becquerel':1,'measurable':1,'seas.':1,'second':2,'notwithstanding':1,'further':1,'nests':1,'perish':1,'even':12,'established':2,'what':10,'stood':1,'constitution':2,'voluminous':1,'giving':1,'storks':1,'fingers':1,'emotions':1,'hereditary':1,'white-hot':1,'salamanders':1,'above':2,'new':5,'3a':1,'cycad':1,'guinea-pigs':1,'bird':2,'alertness':1,'scenery':1,'brain-case':2,'toes':5,'malaria':1,'gathered':1,'concepts':1,'here':2,'hundreds':2,'water':8,'reported':1,'humidity.':1,'let':3,'others':12,'lull.':2,'strong':2,'anchoring':1,'extreme':1,'dry':3,'great':1,'substance':1,'broken':1,'technical':1,'employees':2,'whine':1,'36':1,'animals--the':1,'apes':5,'credit':1,'smoke':1,'browsing':1,'bettered':1,'weird':1,'otters':1,'makes':1,'beautiful.':1,'sticking':1,'control':1,'adjustable':1,'love':2,'waves--light--what':1,'family':1,'distributed':2,'bathers':1,'feelings':1,'peahen':1,'retires':1,'preparatory':1,'comets--millions':1,'sugar':1,'herring':1,'select':1,'ape':1,'standing':1,'use':1,'from':10,'takes':1,'working':1,'distinct':1,'positive':1,'continuous':1,'give':3,'two':6,'trilobites.':1,'distributing':1,'ocean-basins.':1,'live':2,'touched':1,'untie':1,'therefore':6,'taken':2,'tell':1,'more':23,'brings':2,'habits--the':1,'about':1,'chimpanzee':2,'jellyfishes':1,'magnesium.':1,'carrying':2,'big':1,'rabbit':1,'lawlessly':1,'hjort':1,'tearing':2,'must':1,'swooping':2,'metazoa':1,'animals':15,'fro.':1,'this':23,'work':2,'sucks':2,'london':1,'guards':2,'diverse':1,'crickets':1,'can':2,'mr':1,'knocked':1,'making':2,'fauna':1,'scatter':2,'mud-fishes':1,'beautiful':1,'sinking':2,'squat':1,'escapes':1,'of':27,'share':1,'purposes':1,'accept':1,'pieces':1,'parachute':1,'heard':1,'rise':1,'masterfulness':1,'bones':1,'every':4,'provoke':1,'hydrogen':1,'offspring':2,'salts':5,'firmly':1,'sir':1,'winter':2,'decaying':1,'telephonic':1,'rather':1,'breaking':2,'gannets':1,'oligocene':1,'species':1,'fishes--a':1,'cycads':2,'hot':1,'occasionally':1,'aerates':1,'animal':1,'elephant':1,'relinquished':1,'willing--has':1,'expresses':1,'oceans':1,'maternal':1,'utilise':3,'inconceivably':2,'may':7,'digesting':2,'burrowing':1,'after':3,'southern':2,'permanent':2,'produce':1,'space.':1,'curiosity':2,'coming':1,'such':2,'flourish':2,'grow':2,'lids':1,'man':4,'a':67,'short':1,'calves':1,'remember':1,'third':2,'pithecanthropus':1,'light':6,'register':1,'descends':1,'think':1,'eye':2,'perhaps':5,'complexity':2,'gloomy':1,'so':35,'silence':1,'back--till':1,'reflux':1,'first':1,'moulton.':1,'make':1,'furnish':1,'grasshoppers':1,'digested':1,'help':1,'furnished':1,'unpalatable':3,'indeed':1,'over':5,'altogether':1,'orang':1,'soon':1,'years':2,'produced':1,'bounding':1,'toads':3,'thinner':1,'including':1,'looks':1,'drifters':1,'cuts':3,'mottlings':1,'still':1,'its':17,'roots':1,'before':2,'chemical':2,'26':1,'27':1,'curly':1,'thence':1,'willow':1,'mites':1,'coarser':1,'forms':2,'saturn--the':1,'absence':1,'dogfish':1,'marsh':1,'dwarfs':1,'hind-limb':1,'societies':1,'admirable':1,'no':12,'formosa':1,'finer':1,'then':22,'evening':1,'return':2,'fourth':1,'seeking':1,'africa.':1,'saltatory':1,'inter-relations':1,'kin.':1,'giraffe':2,'elephants.':1,'they':26,'not':5,'now':1,'lifelong':1,'smoothness':1,'down':2,'obviates':1,'bluffing':1,'rocky':1,'oxygen':1,'mathematician':1,'hunterian':1,'proteins':1,'identified':1,'composition':1,'explode':1,'did':1,'someone':1,'habits':2,'2a':1,'realise':1,'each':3,'veins':1,'feeds':1,'higher':4,'erratic':1,'lively':1,'enigmatic':1,'reactions':1,'clams':1,'matthew.':2,'snakes':3,'weight':1,'elephants':3,'there':42,'energy':8,'hard':1,'prolonged':1,'tobogganing':1,'unlock':1,'catching':4,'fewer':1,'primates':1,'year':2,'our':4,'beyond':2,'primitive':4,'conspicuous.':1,'out':2,'living':1,'opened':1,'present':2,'since':3,'research':1,'looking':1,'transforming':1,'laid':1,'mate':1,'pool':1,'got':4,'get':1,'receiving':1,'cause':1,'caucasian':1,'red':1,'shows':2,'buds':1,'turning':1,'inert':1,'telescoped':1,'horse':2,'decay.':1,'quite':1,'backboneless':1,'reason':1,'complicated':1,'splashes':1,'besides':1,'backed':2,'animals;':1,'cattle':1,'steering':1,'swimming':2,'lifts':1,'delight':1,'importance.':1,'organic':1,'mortar':2,'could':2,'put':3,'success':1,'keep':1,'motion':3,'turn':1,'butterflies':1,'massive':1,'withering':1,'hence':1,'stone':1,'pterosaurs':1,'zoophyte':1,'throws':1,'south':3,'toads--it':1,'knots':1,'copper':2,'finest':1,'possessing':1,'waves':2,'delicately':1,'one':7,'feet':1,'will':4,'unexpected':1,'disappearing':1,'another':7,'carry':2,'gripping':1,'blows':1,'ways':1,'earthworms':1,'size':2,'sheep':1,'continental':1,'given':3,'tadpoles':1,'monkey':1,'similarly':1,'apple.':1,'opportunity':1,'caught':1,'relations':1,'plastic':1,'1a':1,'their':23,'2':6,'wasps':4,'motility':1,'democracy':1,'embryology':1,'anatomises':1,'dogs':3,'opening':1,'gives':1,'muscles':1,'imperfect':1,'starfish':1,'that':57,'brains':1,'needle':1,'screwing':1,'bees.':1,'folded':1,'part':2,'because':2,'cereal':1,'manipulation':1,'rivers':3,'white':3,'explodes':1,'lays':2,'distance':1,'kind':1,'legs':1,'meteors':1,'looting':1,'showed':1,'depressed':1,'sea-squirts':1,'vocal':1,'instincts--of':1,'project':1,'matter':1,'future':1,'magnesium':1,'iron':1,'arboreal':1,'starfishes':1,'hailstones':1,'proofread':1,'dusty':1,'anthropoid':2,'extracting':1,'manatees':1,'dust--that':1,'sea':1,'7a':1,'violets':1,'gate-posts':1,'modern':1,'mind':4,'lice':1,'bugs':1,'disguise--other':1,'gentle':1,'say':1,'have':4,'need':1,'vigorous':1,'fishes':1,'clearly':1,'relatively':1,'forced':1,'strength':1,'built':1,'-':1,'peculiarities':1,'also':8,'fitting':1,'internal':1,'take':1,'which':5,'deepening':1,'swims':1,'foot--an':1,'surfaces':1,'begin':1,'shallow':1,'lion':1,'though':2,'any':5,'proving':1,'who':1,'fishermen;':1,'falls':2,'creek':1,'most':5,'microbic':1,'eight':1,'printed':1,'nothing':1,'foothold':2,'measured':2,'why':4,'behaviour.':1,'mineral':1,'feminine':2,'mobile':2,'pulled':1,'backwards':1,'sometimes':5,'hungry':1,'absorbing':1,'solemn':1,'dissolved':1,'reflecting':1,'electrons':3,'punting':1,'hurled':1,'distinctive':1,'velocity':1,'europe.':1,'physics':1,'molluscs':1,'repeatedly':1,'precise':3,'saying':2,'permeable':1,'selection':1,'one-eighth':1,'show':1,'insects':3,'disappear.':1,'scattered':1,'fifty':2,'discovered':1,'bring':2,'attempts':1,'fiord':1,'seaweed':1,'carefully':2,'corner':2,'continually':1,'find':1,'slow.':1,'sea-snakes':1,'sharks':1,'nearer':1,'judgments':1,'quaint':1,'varied':1,'heavily':1,'grotesque':1,'gouging':1,'should':1,'surroundings':2,'only':4,'going':1,'black':1,'deepest':1,'molecules':4,'germs':1,'uppermost':1,'pegged':1,'rice':1,'local':1,'do':2,'his':5,'means':1,'beat':1,'tissues':1,'leisure':1,'famous':1,'explosively':1,'rest':1,'lighter':1,'swiftest':1,'combinations':1,'instinctive':1,'thomson':1,'dr':1,'falling':1,'endless':1,'birds.':1,'playful':1,'evolution':1,'progressive':1,'alacrity':1,'exactitude':1,'kidneys':1,'rowing':1,'mathematicians':1,'eyebrow':1,'segregating':1,'she':1,'quaternary':1,'eventually':3,'through':1,'fixed':1,'farther':3,'body':1,'bars':1,'official':1,'predicts':1,'seas':2,'intelligence':1,'radium':2,'bears':1,'bolivia.':1,'decided':1,'cenozoic':1,'sea-serpents':1,'snow-capped':1,'violet':2,'collects':1,'frequency':1,'pliocene':1,'best':1,'sameness':1,'pebbles':1,'closes':1,'combustion':1,'brave':1,'inequalities':1,'plasticity':2,'rugged':1,'pattern':2,'away':1,'trilobite':1,'stealthy':1,'gaseous.':1,'weapons':1,'north-west':2,'3':5,'mind.':1,'various':1,'gases':1,'closed':1,'between':2,'progress':1,'open-sea':1,'timber':1,'birds':4,'beasts':1,'crookes':1,'we':37,'men':1,'explosive':1,'parental':1,'importance':1,'sole':2,'industrious':1,'craters':2,'fishermen':1,'saturn':4,'death':3,'drew':1,'energy--may':1,'proterozoic':1,'invisible':3,'carbon':1,'carnivorous':1,'come':2,'bronze':1,'c':2,'enables':3,'cox':1,'mongol':1,'borneo':1,'according':2,'attributed':1,'sea-urchin':1,'became':2,'figures':1,'wringing':1,'everything.':1,'loose':1,'comes':1,'unconvincing':1,'wade':1,'stretches':1,'diversity.':1,'simple':3,'structure':2,'fitness':1,'ganymede':1,'america':1,'lake':1,'moreover':1,'extinct':1,'suppressing':1,'ether':1,'better':1,'steamships':1,'described':1,'raise':2,'one-celled':1,'travailing':3,'fro':2,'three':3,'been':1,'jerks':1,'immense':1,'willing':2,'slowly':1,'sponges':1,'likewise':1,'degrees':1,'herbage':2,'spacious':1,'6a':1,'caterpillars.':1,'partly':5,'success.':1,'lakelets':1,'turned':2,'conifers':1,'mammals.':1,'amphibians':2,'drainpipes':1,'made':3,'kids':1,'demand':1,'sifting--the':1,'worked':1,'left-handed':1,'food-canal':1,'mammals--with':1,'spain':1,'inconspicuous':2,'plants':3,'tide':1,'heavier':2,'uncertain':1,'caucasians':1,'frozen':1,'leave':1,'sex':1,'as':16,'morley':1,'air':1,'growth.':1,'calcium':1,'while':1,'lichen':1,'cannot':3,'many':11,'wild':1,'valleys':1,'voice':1,'toothed':1,'leaves':1,'at':6,'comets':2,'streams':1,'palings':1,'almost':2,'soil':1,'is':33,'thus':7,'it':79,'expenses':2,'weighed':1,'trilobites':1,'against':2,'knocks':1,'in':42,'beaver':1,'vanish':1,'currents':1,'if':13,'different':1,'feebler':1,'cools':1,'inquire':1,'muscle-cells':4,'granted':1,'bat':1,'fading':1,'cultivated':3,'unity':1,'complex':1,'grand':1,'vegetable':1,'joy.':1,'gorging':1,'engravings.':1,'day':1,'difficult':2,'development':1,'alertness.':1,'used':1,'see':2,'planting':1,'comprehensive':1,'blue-greens':1,'blue':2,'hotter':1,'drives':1,'flows':1,'hand':1,'director':1,'much':1,'moving':1,'purpose':1,'dark':3,'brussels':1,'timid':1,'climb':1,'warming':1,'cycle':1,'poultry':1,'race-continuing':1,'narrow':1,'off':1,'modes':1,'cliff-loving':1,'changes':2,'variety':1,'neptune':2,'without':4,'severe':1,'rome':1,'trains':1,'position':1,'the':357,'chemistry':2,'drawing':2,'heaps':1,'indigo':1,'birth':1,'just':2,'flesh':1,'being':1,'uranium':1,'licensed':1,'distribute':3,'adjusted':1,'actions':1,'disguise':1,'violent':1,'radio-activity':1,'distant':1,'circling':1,'human':3,'touch':1,'useful':1,'skill':1,'yet':11,'captured':1,'addresses':2,'migration':1,'superficial':2,'enters':1,'evolution.':1,'legitimately':1,'far-reaching':1,'had':2,'melanocetus':1,'undulating':1,'crocodiles':1,'lets':1,'potential':1,'4':2,'easy':1,'hind':1,'usage':1,'hydrosphere.':1,'has':3,'5a':1,'peanuts':1,'good-humoured':1,'australia':1,'rodents':1,'depends':2,'transitional':1,'bristle-tails':1,'babylonia':1,'discontinue':1,'absorptive':1,'regard':1,'early':1,'sparrows':1,'ultra-violet':1,'facial':1,'dreamt':1,'grape-sugar':1,'redistributing':1,'string':1,'apart':2,'loss':1,'phenomena':1,'tail':1,'stingless':1,'lost':1,'ill':1,'cooler':1,'beyond-blue':1,'reduces':1,'sizes':1,'tend':1,'loses':1,'harmonising':1,'donations':3,'electro-magnetic':1,'night':2,'nerves':1,'downward':1,'disorder':1,'dentition':2,'newton':1,'portuguese':1,'performing':1,'old':1,'often':8,'habitat':1,'scents.':1,'hair-like':1,'difficulties':1,'some':15,'back':3,'pacific':3,'mosquitoes':1,'ideals':1,'understood':1,'therein':1,'towards':1,'jupiter':2,'convex':1,'duration':1,'diving':2,'bruising':1,'recognition':1,'feeling':1,'einstein':1,'dimensions':1,'for':5,'broad':1,'ice':1,'moon':5,'when':13,'critical':1,'passion':1,'meaningful':1,'conquering':1,'starch':1,'27-1':1,'nose':1,'limitations':2,'be':1,'depressions':1,'novelties':1,'selecting':1,'combative':1,'lakes':1,'expansion':1,'pressure':1,'enregistering':1,'fullest':1,'although':2,'become':6,'drawn':3,'stows':1,'repair':1,'by':14,'hearing':2,'on':9,'mammoths':1,'energetically':1,'would':1,'branch-gripping':1,'temper':1,'reappear':2,'theirs':1,'moths':1,'side':1,'cockroaches':2,'whence':1,'spreads':1,'three-quarter':1,'piled':1,'little-changed':1,'gamma':3,'plan':1,'heavy':1,'rats':1,'baboons':1,'sea-grass':1,'trademark':1,'into':2,'good':1,'habituations':1,'intellectual':1,'negative':7,'chemists':2,'spinal':1,'everyone':3,'bats':2,'rapid':1,'sow':1,'formidable':1,'financial':1,'error':5,'cross-fertilisation':1,'mental':2,'arctic':2,'deep-violet':1,'sticklebacks':1,'expositor':1,'chrysanthemum':1,'well-developed':1,'flying':4,'vigour':1,'fast':1,'reflectors':1,'rushes':1,'mudstones':2,'bees':5,'caterpillars':1,'physicists':1,'stars':3,'spring':1,'molecular':1,'wonderfully':1,'was':3,'fish':1,'naturally':1,'endeavour.':1,'deepened':1,'form':4,'kittens':1,'mammals':14,'spirit':1,'magnetism':1,'analyse':1,'within':2,'wireless':1,'mysterious':1,'heat':5,'brain':1,'competition':1,'flexible':1,'fastened':1,'ear':1,'with':15,'eat':1,'he':14,'balancing':1,'pull':1,'swamp':1,'places':1,'whether':1,'dangerous':2,'two-spined':1,'hind-limbs':2,'social':2,'up':1,'sticklebacks.':1,'foresight':2,'placed':2,'growth':1,'those':4,'shape':1,'how':7,'acting':1,'distribution':2,'piece':1,'similar':5,'professor':3,'storing':2,'proud':1,'constant':2,'mimicry--the':1,'taste':1,'certain':1,'measure':1,'porcelain':1,'deep':1,'an':11,'proper':2,'female':1,'senses':1,'periods':2,'planets':1,'crystals':2,'domesticated':1,'are':16,'struggled':1,'again':1,'functions':1,'ancestors':1,'readjustments':1,'entirely':1,'charitable':1,'mantises':1,'thither':2,'power':1,'other':21,'5':1,'adventure':1,'holding':3,'becomes':1,'u':1,'you':4,'smell':1,'chemist':1,'horsetails':1,'gaining':1,'consequent':1,'formed':1,'ordovician':1,'accidental':1,'shelter':1,'uniformly':1,'inherently':1,'planarian':1,'runs':3,'walton':1,'insect':1,'marshes':1,'scores':1,'lasso':1,'stocks':1,'carries':1,'died':2,'began':5,'your':1,'independently':1,'breaks':2,'faster':1,'sperm-cells':3,'practically':3,'controlled':1,'dog':1,'mme':1,'persistent':1,'walked':1,'gorilla':2,'ensuring':1,'redivides;':1,'conveying':1,'time':1,'fresh':1,'indirectly':1,'chimpanzee--and':1,'4a':1},'sea-gooseberries':{'which':1},'spectroscope:':{'it':1},'froth':{'which':1},'silvanus':{'p':1},'ant':{'to':2,'the':1,'has':1,'where':1,'.':1},'spectroscope.':{'we':1},'fall.':{'we':1},'mates':{'.':1},'any':{'woodwork':1,'money':2,'alternative':1,'snout':1,'hint':1,'alternate':1,'had':1,'permanent':1,'very':1,'pigment':1,'provision':1,'day':1,'condition':1,'sufficiently':1,'bad':1,'inherent':1,'disclaimer':1,'nitrogenous':1,'people':1,'idea':1,'rate':2,'distributor':1,'living':2,'mud':1,'body':1,'scientific':1,'use':3,'understanding':1,'protection':1,'collection':1,'monkey':1,'on':1,'substance':3,'country':1,'length':1,'suggestion':1,'copper':1,'statements':1,'point':1,'character':1,'one':3,'learning':1,'fees':1,'quality':1,'given':1,'additional':1,'zoologist':1,'cooling':1,'way':3,'suit':1,'white':1,'waste':1,'type':1,'more':2,'files':1,'hydrosphere':1,'muscles':1,'corresponding':1,'statement':1,'form':1,'ordinary':1,'apparent':2,'direct':1,'part':2,'virtue':1,'particular':2,'copy':1,'case':8,'kind':4,'word':1,'hour':1,'work':2,'project':3,'record':1,'of':3,'age':1,'sense':1,'influence':1,'defect':1,'agent':1,'rigorous':1,'in':1,'binary':1,'angle':1,'member':1,'other':16,'you':1,'star':1,'trace':1,'rain':1,'purpose.':1,'moment':2,'purpose':1,'necessity':1,'conscious':1,'light':1,'colour':1,'person':1,'time':1,'representation':1,'volunteers':1,'irregularity':1},'confirmation':{'of':2},'transcription':{'errors':1},'ideas':{'and':4,'meant':1,'what':1,'of':8,'is':1,'when':1,'but':2,'.':4,'are':1,'in':3,';':1,'or':1},'form-resemblance':{'for':1},'sciences':{'study':1,'forcing':1},'emphasis':{'on':1},'mesohippus':{'about':1,';':1},'fracture':{'of':1},'thermometer':{'seem':1},'resembling':{'a':1,'in':1},'shafts.':{'then':1},'primaries':{'pr':1},'inky':{'darkness':1},'sure':{'on':1,'that':2,'of':1,'but':1,'.':2,'effectiveness':1},'multiple':{'of':1,'pedigree':1},'nebulae--the':{'birth':1},'azores':{'or':1},'indelible':{'stamp':2},'harmonious':{'mingling':1},'clearer':{'to':2},'falls':{'on':1,'about':1,'of':4,'obliquely':1,'as':1,'they':1,'the':2,'286':1,'more':1},'hincks':{'astronomy':1},'boiling':{'a':2,'of':1,'point.':1,'ocean':1},'donation':{'methods':1},'multiply':{'quickly':1},'cleared':{'off':1},'spectroscopist':{'is':1},'dried-up':{'and':1},'study.':{'i':1},'thigh-bone':{'and':2,'indicates':1},'considered':{'what':1,'opaque':1,'only':1,'.':2,'also':1,'as':1,'they':1,'by':1},'proud':{'as':1,'.':1,'that':1},'science.':{'these':1,'the':1,'bibliography':1,'it':1,'illustration':1},'hungry':{'sharp-eyed':1,'hermit-crabs':1,'animals':1,'eyes':1},'idea.':{'what':1},'vulgaris':{'200':1},'prout':{'suggested':1},'quantity':{'of':7,';':1,'.':2},'detective':{'story':1},'pans':{'of':1,'as':1},'permeable':{'materials':1,'so':1},'spaced':{'from':1,'with':1},'solar':{'atmosphere':1,'observer':1,'system.':4,'phenomena':2,'prominences':4,'eclipse':3,'system':34,'surface':1,'system--regions':1,'electrons':1,'envelope':1,'spectrum':3,'system--with':2,'tides':1},'radiation.':{'that':1},'inshore':{'waters':1},'hustler':{'given':1},'homology':{'essential':2},'protrusion':{'of':2},'gulf':{'was':1,'in':1},'richness':{'of':1},'gull':{'with':1},'written':{'a':1,'confirmation':1,'recently':1,'explanation':2,'.':1,'in':2,'with':1,'by':1},'crime':{'and':1},'double-breather':{'dipnoan':1,'showing':1},'wood':{'jones':1,'of':1,'or':3,'but':1},'believing':{'that':1},'dreaded':{'it':1},'lighted':{'gas':1},'closed':{'the':1,'with':1,'in':1},'ink-bags':{'are':1,'.':1},'masking':{'the':1,'for':1},'expectation':{'of':2},'space.':{'many':1,'the':1},'bolometer':{'which':1},'radiations':{'the':1,'he':1},'vive':{'ready':1},'space;':{'and':1},'antler':{'or':1},'telescopes.':{'telescopes':1},'reveal':{'to':1,'the':1,'his':1},'reality--the':{'life':1},'aluminum':{'in':1},'floods':{'to':1,'or':1,'of':1},'naked':{'eye':2,'with':1,'body.':1},'scots':{'name':1},'bison':{'and':2,'delicately':2,'above':1,'.':1},'big-brained':{'modernised':1,'skulls':1,'extremely':1,'chimpanzee':1},'pouch;':{'while':1},'fainter':{'of':1},'borings':{'might':1},'orioles':{'.':1},'discussing':{'telescopes':1,'.':1},'ignored':{'.':1},'beholding':{'they':1},'encourages':{'us':1},'foetal':{'membrane':1,'membranes':1},'stars--or':{'rather':1},'1920':{'in':1},'1921':{'attention':1,'176-177':1,'.':4,'in':2,'the':1,'meeting':1},'1922':{'by':1,'third':1,'sixth':1,'seventh':1,'ninth':1,'twelfth':1,'second':1,'eleventh':1,'fourth':1,'tenth':1,'eighth':1,'fifth':1},'disarranged':{'.':1},'enregistered.':{'in':1},'obliging':{'in':1},'collects':{'a':1,'pollen':1,'some':1},'violates':{'the':1},'encouraged':{'by':1},'surfaces':{'and':1,'hooky':1,'for':1,'of':2,'reflect':1,'in':1,'such':2},'fails':{'to':1},'invoked':{'to':1},'crystal':{'we':1,'between':1},'federal':{'tax':1,'laws':1},'subsequent':{'research':1,'eras':1,'stage':1},'birds--intelligence':{'co-operating':1},'weapons':{'and':1,'or':1},'north-west':{'australia':2},'outside':{'and':1,'we':1,'his':1,'scientific':1,'these':1,'of':2,'it':1,'himself':1,'influences':1,'our':1,'nothing':1,'world':2,'the':6},'ages.':{'illustration':1},'hiss':{'.':1},'crookes':{'and':1,'sir':1,'experimented':1,'talked':1,'tube.':1,'tube':1,'had':1,'preferred':1,'247':1,'used':1,'but':1,'in':1,'really':1,'tubes':1,'at':1},'multiplied':{'by':1},'tylor':{'e':1},'hundredth':{'but':1},'originated':{'a':1,'from':1,'by':1,'in':1},'one-mile':{'thickness':1},'densely':{'packed':1},'kea':{'or':1,'parrot':1},'multiplies':{'by':1,'in':1},'coma':{'berenices':2},'oxalic':{'acid':1},'cities':{'150':1,'because':1,'.':1,'to':1,'of':1},'come':{'and':1,'nearest':1,'into':4,'back':3,'in':2,'mysteriously':1,'out':2,'from':2,'for':1,'next':1,'to':13,'under':1,'more':1,'up-stream.':1,'presently':1,'nutritive':1,'those':1,'a':1,'about':2,'up':2,'together':3,'near':2,'.':1},'reaction':{'of':2,'between':1,'at':1,'or':1},'pests':{'were':1},'successes':{'but':1,'.':1},'primus':{'berry':1},'23':{'photo':2,'saturn':1,'1914':2,'000':1},'water-ouzel--a':{'bird':1},'quiet':{'upper':1,'unobtrusive':1},'contract':{'.':1,'except':1,'it':1},'energies':{'light':1},'berry':{'the':1},'equatorials':{'and':1,'.':1},'railway':{'siding':1,'trucks':1},'utterance':{'to':1},'surface.':{'this':1,'open-sea':1},'radio-activity':{';':1,'has':4,'we':1,'were':1},'afterwards':{'found':1,'recommence':1,'it':2,'words':1,'requires':1},'bricks':{'of':2,'out':1,'are':2,'each':1},'course.':{'this':1},'employee':{'of':1},'colony':{'of':10,'is':2,'.':1,'are':1,';':1,'south':1},'period':{'often':1,'is':2,'as':1,'including':1,'in':2,'before':2,'perhaps':1,'there':2,'when':1,'.':1,'peopling':1,'which':1,'reptiles':1,';':1,'has':1,'was':7,'we':2,'that':5,'rise':5,'during':1,'a':1,'land':1,'showed':1,'e.g':1,'of':16,'either':1,'through':1,'the':5,'90':1,'first':2},'6.':{'enregistered':1},'satisfaction':{'and':1,'in':1,'.':1},'61':{'diagram':1,'a':1},'62':{'feet':1,'inches':1},'64':{'from':1},'straws.':{'the':1},'67':{'miles':1,'000':2},'68':{'photo':1},'69':{'green':1,'reproduced':1,'proterospongia':1},'pod':{'.':1},'skeletons':{'of':5,'are':1},'noisy':{'with':1},'song-thrush':{'when':1,'takes':1},'blend':{'into':1},'pilgrims':{'for':1},'deposited':{'as':1,'in':1},'cords':{'stretched':1,'.':1},'hardly':{'even':1,'be':6,'needs':1,'necessary':2,'pauses':1,'conceive':1,'seems':1,'change':1,'imagine':1,'counts':1,'tenable':1,'inferior':1,'too':1},'500':{'pounds':1,'000':4,'to':1,'miles':1,'fathoms':3,'yards':1,'extinct':1,'deg':1},'501':{'c':2},'6a':{'hipparion':1},'direction':{'towards':1,'whereby':2,'that':1,'of':6,'is':1,'when':1,'.':2,'as':1,'contrary':1,'in':4,'taken':1,';':1},'forecloses':{'the':1},'robbed':{'of':1},'radiates':{'heat':1},'tiger':{'begins':1,'the':1},'implied':{'a':3,'getting':1,'many':1,'.':4,'including':1,'in':2,'an':3,'was':1,'warranties':1},'sea-horses':{'phyllopteryx':1},'eaters':{'in':1},'attentive':{'persistent':1},'squirrels':{'quickly':1,'which':1,'.':1},'robber':{'crab':1},'paying':{'any':1,'copyright':1},'specialised':{'member':1,'instincts':1},'caucasians':{'we':1,'include':1},'mount':{'on':1,'wilson':16,'hermon':2,'everest':1},'twigs':{'very':1},'life;':{'precise':1},'premature':{'to':1},'vegetation--an':{'awkward':1},'slippery':{'bridge':1},'life.':{'origin':1,'wallace':1,'similarly':1,'many':1,'there':1,'wherever':1,'it':1,'illustration':1,'sec':2,'they':1,'volunteers':1,'if':1},'mound':{'.':1},'hunts':{'small':1,'vigorously':1},'focussed':{'on':1},'trackless':{'waste':1},'another--to':{'pass':1},'person.':{'besides':1},'someone':{'not':1,'said':1},'anti-bodies':{'which':1},'unsounded':{'i.e':1},'uncatchable':{'in':1},'meals.':{'there':1},'helmet':{'or':1,'.':1},'revolutions':{'a':1,'round':1},'author':{':':1},'alphabet':{'of':2,'the':1},'granted':{'tax':1,'but':1},'skips':{'the':1,'about':1},'knowable':{'way':1},'motley':{'crowd--we':1,'into':1},'a-b.':{'newer':1},'buys':{'a':1},'implement.':{'on':1},'generated':{':':1},'status':{'of':2,'with':1,'by':1},'wall-like':{'formation':1},'males':{'six':1,'especially':1,'that':1},'disadvantages':{'for':1},'pays.':{'when':1},'nest':{'and':2,'or':2,'to':1,'else':1,'of':3,'into':1,'191':1,'.':2,'how':1,'while':1,'which':2,'in':5,';':1,'several':1,'with':2,'the':6,'is':1,'out':1},'insects.':{'whether':1,'mesozoic':1,'devonian':1},'tree-toad':{'whose':1},'drives':{'off':2},'weed':{'120':1,'.':1},'director':{'of':1,'gbnewby':1},'persons':{'bearing':1,';':1,'is':1},'arose':{'and':1,'what':1,'we':1,'.':1,'as':1,'races':1,'various':1,'the':3,'or':1},'changing':{'natural':1,'energy':1,'process':1,'colour':1,'conditions':1,'its':1},'implements':{'a':1,'instruments':1,'were':1,'or':1,'.':1},'marsh.':{'the':1,'six':1},'perennial':{'tendency':1},'safely':{'be':1,'away':1},'shift.':{'we':1},'magical':{'glass':1,'way':1},'without':{'saying':1,'seeing':1,'being':2,'intelligence':1,'ceasing.':1,'an':2,'as':1,'at':1,'further':1,'domesticated':1,'any':6,'heat--forms':1,'trying':1,'thinking':1,'there':1,'.':4,'doing':1,'charge':1,'much':1,'too':1,'fatiguing':1,'prominently':1,'reading':1,'measuring':1,'mentioning':1,'them':2,'committing':1,'permission':1,'sufficient':1,'significance':1,'noticing':1,'free':1,'heat':2,'a':3,'supposing':1,'disparagement':1,'complying':1,'trouble--an':1,'conspicuous':1,'sacrificing':1,'paying':2,'wide':1,'that':1,'getting':1,'stimulus':1,'this':1,'fertilisation':1,'the':7,'having':1},'model':{'of':2,'is':1,'by':4,'seen':1},'reward':{'and':1,'of':1},'bodies':{'and':1,'certain':1,'held':1,'are':3,'in':1,'whose':1,'would':1,'had':1,'.':1,'behave':1,'which':1,'has':1,'we':1,'dependent':1,'acquire':1,'but':1,'fall':1,'represented':1,'i.e':1,'with':1,'like':1,'considered':1,'of':2,'up':2,'the':2,'having':1},'justify':{'themselves':1,'the':2,'all':1},'clog':{'the':1},'when':{'and':1,'this':4,'all':1,'full-grown':1,'dealing':1,'it':34,'competition':1,'one':3,'appropriate':1,'jupiter':1,'something':1,'human':1,'in':2,'seen':1,'cold':2,'abundant':1,'its':1,'even':1,'compared':2,'to':1,'observing':1,'caught':2,'there':6,'young':2,'sunlight':1,'birds':2,'needed':1,'only':3,'bombarded':1,'sponges':1,'lizzie':1,'tens':1,'you':3,'he':9,'resting':1,'we':31,'his':1,'scientific':1,'parental':1,'liberated':1,'however':2,'atoms':1,'water':1,'moving':2,'two':2,'they':16,'put':1,'an':7,'with':1,'man':3,'a':19,'great':1,'revolved':1,'animals':1,'these':2,'of':1,'professor':1,'applied':1,'she':2,'baits':1,'enough':1,'small':1,'hot.':1,'the':82,'grass':1,'at':1},'guided':{'astronomers':1},'actions':{'and':4,'among':1,'show':1,'becoming':1,'but':1,'.':4,'cease':1,'are':1,'which':2,'living':1,';':1},'violent':{'and':1,'death':1,'end':3,'disturbances':1,'agitation':1,'motion':3,'discharge':1,'movement':1},'cease':{'to':1,'is':1,'in':1,'using':1},'anamnia':{'the':1},'mongoose':{'riki-tiki-tavi':1},'differentiation':{'of':1,'.':1},'polish':{'wife':1},'colonise':{'the':2},'captured':{'a':2,'arm':1,'for':1,'.':1},'blow':{'from':1},'gentleness':{';':1},'widest':{'and':1,'array':1,'variety':1},'hint':{'of':5},'--from':{'unicellular':1},'rose':{'and':1,'on':1,'above':1,'in':1},'favouring':{'certain':1,'the':1},'except':{'about':1,'for':3,'that':6,'electricity':1,'when':1,'in':8,'upon':1,'to':1,'as':1,'red':1,'violet':1,'the':7,'those':1,'man':1},'great.':{'illustration':1},'lets':{'it':1},'interested':{'in':1},'samples':{'of':1},'hind':{'part':1,'end':1,'.':1},'engulfed':{'.':1},'stagnant':{'lifeless':1},'nekton':{'and':1},'sociality':{'.':1},'men-of-war':{';':1},'kingdom':{'we':1,'of':1,'.':2,'not':1,'the':1,'where':1},'crustaceans':{'and':3,'lamp-shells':1,'insects':1,'insect':2,'can':1,'which':2,';':1},'confines':{'the':1},'action.':{'what':1},'confined':{'to':2,'so':1,'our':1},'characteristically':{'vital':1},'shore-haunts.':{'following':1},'accepted':{'theory':1,'that':1,'it':1,'but':1,'which':1,'in':1},'left-hand':{'photograph':2,'side':1},'acute':{'senses':1,'especially':1},'standstill':{'that':1},'particle':{'that':1,'of':8,'is':1,'which':1,'becomes':1,'was':1},'harmonising':{'the':1},'patrick':{'sheriff':1},'reduces':{'to':1,'friction':1},'multifarious':{'tasks':1},'sieves':{'with':1,'by':1},'sternly':{'regulated':1},'petrie':{'has':1},'donations':{'received':1,'from':2,'1':1,'to':4,'can':1,'in':2,'or':1,'are':2},'always':{'new.':1,'human':1,'being':1,'have':1,'in':5,'ring':1,'giving':1,'regarded':1,'had':1,'tend':1,'presents':1,'to':2,'setting':1,'black':1,'going':2,'receiving':1,'that':1,'clear-cut':1,'refused':1,'lives':1,'recognise':1,'put':1,'envelops':1,'aiming':1,'present':2,'a':1,'on':1,'turns':1,'or':1,'overlappings':1,'remain':1,'points':1,'so':1,'hobbled':1,'the':2,'think':1},'tower':{'above':1},'reduced':{'to':3,'the':1,'from':1,'for':1,'.':1},'burdens':{'of':1},'competition':{'e.g':1,'is':1,'but':1,'.':1,'in':1,'or':1},'deduce':{'more':1},'respect':{'most':1,'with':1},'oftener':{'than':1},'intact':{'ones':1},'leadbeater.':{'an':2},'chewing':{'a':1},'provided':{'to':1,'you':1,'that':1,'by':1,'in':1},'mood':{'at':1},'prolific':{'and':2,'multiplication':2,'early':1,'have':1,'though':1},'defenceless':{'weaponless':1},'legal':{'fees':2},'moon':{'and':4,'because':1,'exert':1,'28':1,'is':5,'newton':1,'it':1,'as':1,'at':2,'entering':2,'------':1,'32':1,'are':1,'passes':1,'from':1,'takes':1,'would':1,'began':1,'when':1,'.':15,'to':1,'of':1,'fig':1,'mars':1,';':1,':':1,'was':6,'split':1,'do':1,'we':1,'nearer':1,'may':1,'showing':1,'were':2,'took':1,'but':7,'crosses':2,'gets':1,'by':1,'partially':1,'has':2,'turns':1,'s':6,'act':1,'the':2,'makes':1,'farther':1},'depletion':{'of':1},'moot':{'point':1},'provides':{'the':3,'means':1},'out-side':{'influences':1},'freed':{'from':2},'lop-eared':{'forms':1},'ovaries':{'and':1},'nails':{'and':1,'in':1},'stereotyped':{'routine':1,'was':1,'bee':1},'communicate':{'some':1},'voracious':{'and':1,'insect':1},'journeyman':{'.':1},'resurrection':{'of':1},'affording':{'food':1,'most':1,'as':1},'on':{'all':1,'minced':1,'september':1,'isolated':1,'disguise':2,'through':1,'human':2,'earth':5,'its':31,'apace':1,'dividing':1,'true':1,'young':1,'better':1,'to':21,'board':2,'stable':1,'photographs':1,'brown':1,'them':3,'his':4,'around':1,'returning':1,'possible':1,'trees':2,'firmer':1,'sea-lettuce':1,'five':1,'probably':1,'radio-active':1,'one':5,'jupiter.':1,'evolution':3,'likeness':1,'january':1,'sufficiently':1,'sand':2,'each':5,'small':1,'them.':1,'entirely':1,'page':1,'saturn.':1,'transcribe':1,'some':4,'biology':1,'yerkes':2,'individual':1,'entering':1,'our':2,'special':1,'creatures':1,'what':1,'for':2,'god':1,'mars.':1,'ice':3,'various':1,'affecting':1,'progress':1,';':2,'receiving':1,'red':1,'can':1,'columbus':1,'wheat':2,'whose':1,'evolving':1,'atoms':1,'water':1,'by':3,'dry':4,'both':2,'backwards':1,'repeating':1,'leaves':1,'american':1,'islands':2,'passing':2,'or':1,'this':11,'striking':1,'hearing':1,'another':3,'einstein':1,'trust':1,'from':2,'her':3,'their':10,'top':1,'there':1,'two':1,'.':12,'183':1,'moisture':1,'mars':10,'until':1,'life':1,'clever':1,'that':3,'mammals':1,'exactly':1,'back':1,'bipedal':1,'with':1,'those':1,'must':1,'plants':2,'account':2,'these':4,'mount':2,'up':1,'air':2,'three':1,'under':1,'and':3,'withered':1,'gate-posts':1,'in':9,'surpassing':1,'slowing':1,'an':10,'protective':1,'planets':1,'further':1,'floating':1,'any':1,'different':3,'inborn':1,'wits':1,'radiation':1,'snow':1,'close-packed':1,'other':1,'sandy':2,'animal':1,'accumulating':1,'towards':1,'lanky':1,'it':8,'herbs':1,'itself.':1,'occasion':1,'such':1,'intrinsic':1,'parallel':1,'a':63,'land':6,'to-day':1,'decaying':1,'we':1,'which':18,'green':2,'every':4,'the':294,'berries':1,'again.':1},'beavers':{'who':1},'discussed':{'elsewhere.':1,'separately':1,'in':2},'chamberlin':{'and':1,'s':1,'says':2},'shrimp':{'net':1},'20417.zip':{'this':1},'whence':{'the':3,'man':1,'is':2,'they':2,'he':1},'stop.':{'illustration':1},'stand':{'in':1,'out':1,'alone.':1},'prism--a':{'triangular-shaped':1},'discrimination':{'of':1,'with':1,'between':1},'gregory':{'b':1},'investigators':{'professor':1,'.':1},'or':{'partial':1,'suns':1,'four':3,'nursery':1,'go':2,'layers':1,'brackish':1,'hunting':2,'electricity':1,'unenforceability':1,'young':2,'to':10,'under':1,'teaching':1,'division':1,'devonian':1,'fall':1,'animals':2,'whirlpools':1,'elevations':1,'squids':1,'alevins':1,'redistribute':1,'corpuscles':1,'clouds':1,'die':1,'frozen':1,'glaciations':1,'greenish':1,'small':1,'mammal':1,'autotomy.':1,'caries':1,'upper':1,'frog-mouth':1,'pass':2,'further':1,'even':16,'what':1,'adds':1,'fitnesses':1,'pipes':1,'paddle':1,'access':1,'above':1,'new':3,'thereabouts':1,'movement':1,'segmentation':1,'men':1,'water':1,'protection':1,'along':1,'extreme':1,'sending':1,'thirty':2,'brilliant':1,'wherever':1,'experience':1,'patagium':1,'formation':1,'threes':1,'feelings':1,'semang':1,'total':1,'herring':1,'tertiary':1,'engrain':1,'use':2,'from':5,'two':4,'distributing':3,'almost':2,'more':8,'becomes':1,'envelope':1,'about':1,'train':1,'rabbit':1,'breach':1,'glad':1,'must':1,'flagellum':1,'strain':1,'averaged':1,'can':1,'nothing.':1,'marble':1,'mud-fishes':1,'proprietary':1,'brown':1,'pulling':1,'something':1,'serum':1,'axis':1,'disappearing.':1,'six':3,'chemical':2,'how':2,'fourth':1,'re-use':2,'stock':1,'gonads':1,'communicating':2,'after':3,'eighty':1,'mankind':1,'a':33,'elusive':1,'light':2,'hypotheses':1,'coal':2,'so':4,'deterioration':1,'playing':1,'foetal':1,'refund':3,'sperm-cell':1,'evolutionary':1,'self-destructively':1,'rottenness':1,'double-breather':1,'hypertext':1,'years':1,'lumpsucker':1,'secondaries':1,'pterodactyls':2,'group':1,'lateral':1,'destroyed':2,'animal':1,'pglaf':1,'repulsive':1,'they':1,'weeds':1,'not':2,'detach':1,'adventurous':1,'bubbles.':1,'magnitude':1,'fitness':1,'beneath':1,'mental':1,'agriculture':1,'out':1,'dying':1,'cause':1,'alevin':1,'shut':1,'approached':1,'siege':1,'eternal':1,'rotifer':1,'duck-billed':3,'telescopes':1,'nebulae':1,'rearrangements':1,'wanderers':1,'audacity':1,'disturbed':1,'lemurs':1,'stone':1,'unborn':1,'zoophyte':3,'south':1,'emotion':1,'blown':1,'another':1,'flagella':1,'foraminifera':2,'monkey':1,'pelagic':1,'anyone':1,'their':2,'185':1,'white':1,'muscles':1,'immediate':1,'sea-scorpions':1,'egg-producer':1,'patches':1,'meteors':1,'grey':1,'actively':1,'iron':1,'were':1,'providing':2,'sea-gooseberries':1,'chrysalis':1,'shell':2,'have':2,'cleverness':1,'organs':1,'any':9,'built':1,'lumps':1,'camouflage':1,'gunnel':1,'take':1,'online':3,'destroy':2,'spawns':1,'primaries':1,'easygoing':1,'centres':2,'breaking':1,'invertebrate':1,'successive':1,'measured':1,'darkness':1,'sea-butterflies':1,'nostrils':1,'later':3,'dissolved':1,'electrons':1,'salt':1,'planetary':1,'distributed:':1,'nest-building':1,'bright':1,'archimedes':1,'seaweed':1,'entity':3,'find':1,'only':3,'wood':1,'black':1,'employee':1,'shepherding':1,'fossil':1,'get':1,'eel-fare':1,'fronds':1,'cannot':1,'preparing':1,'instinctive':2,'primates':1,'stone.':1,'devoured':1,'amid':1,'parasitic':1,'remove':1,'twice':1,'steam':1,'kernel':1,'seventeen':1,'ebb':1,'intelligence':1,'testing':1,'computer':1,'are':2,'corrupt':1,'eoliths':1,'federal':1,'away':1,'rings':1,'waltzing':1,'its':1,'weapons':1,'mud':1,'between':1,'nestor':1,'across':1,'deletions':1,'incarnation':1,'creating':2,'sole':1,'podargus':2,'invisible':2,'1.e.9.':2,'sperm-producer':1,'many':3,'region':1,'water-ouzel--a':1,'strains':2,'expense':1,'expression':1,'experimental':1,'mutating':1,'among':1,'adjusted':1,'mutations':3,'whatever':1,'extinct':2,'late':1,'gregarious.':1,'one-celled':1,'create':1,'three':5,'protoplasm':1,'thrice':1,'rather':1,'general':1,'else':1,'elvers':1,'homes':1,'solid':1,'dendrites':1,'replaced':1,'argonaut':1,'wild':2,'layer':1,'diaphragm':1,'is':1,'squid':2,'it':5,'cluster':1,'to-morrow':1,'anti-bodies':1,'in':14,'if':1,'damaged':1,'perhaps':1,'cromagnard':3,'shorter':1,'dermis':1,'double-breathers':1,'big':1,'mud-skipper':2,'prominences':1,'foam':1,'infinite':1,'staving':1,'reflection':1,'charges':4,'well':1,'command':2,'comes':1,'mother':2,'the':23,'left':1,'less':14,'cromagnards':1,'distribute':2,'egg-cell':1,'obtain':1,'fishing':1,'anamnia':1,'multiples':1,'vibration':1,'absorption':1,'killed':1,'dipper':1,'irresponsive':1,'humanity':1,'photographed':1,'tracheae':1,'early':1,'possibly':1,'gyrating':1,'five':2,'using':1,'modifications':1,'appearing':1,'feral':2,'post-glacial':2,'incidental':1,'eel':1,'vortex':1,'ctenophores':1,'often':1,'crown':1,'dead':1,'sponge':1,'indirect':1,'bruising':1,'for':2,'memories':1,'does':1,'glacial':1,'disproved--e.g':1,'enregistering':1,'by':10,'on':5,'limitation':3,'chaff':1,'central':1,'of':11,'20417.zip':1,'octopus':2,'sea-grass':1,'down':1,'because':3,'determine':1,'protozoa':1,'additions':1,'her':1,'camouflaging':2,'incipient':1,'sneezing':1,'was':2,'pinna':1,'some':3,'amongst':1,'heat':1,'shoulder-blade':1,'trying':1,'with':3,'whether':1,'dangerous':1,'variations':2,'frugivorous':1,'associated':1,'taste':1,'an':3,'as':3,'furl':1,'again':1,'dimly':1,'inborn':1,'when':3,'other':8,'dies':1,'casque':1,'nucleus':2,'pycnogon':1,'sneeze':1,'vice':1,'vehicles':1,'implied':1,'indirectly':3},'amber':{'trade':1},'cambridge':{'university':1,'manual':1,'.':3},'columbia.':{'the':1,'fig':1},'communication':{'that':1,'between':2},'charts':{'we':1},'spinal':{'canal':1,'cord':4},'clams':{'in':1},'accounts':{'for':1},'determine':{'the':3,'what':1,'survival':1},'cro-magnon':{'in':1},'speculated':{'on':1},'theoretically':{'a':1,'that':1},'buds':{'out':1},'pycnogon':{'walking':1},'whales':{'and':1,'great':1,'.':1,'which':1,'largely':1},'distinctions':{'except':1},'strictly':{'marine':1},'there':{'and':1,'emerge':1,'exists':2,'being':1,'had':4,'is':259,'191':1,'results':2,'one':1,'diverged':2,'are':142,'have':7,'in':3,'.':5,'any':2,'seemed':1,'emerges':1,'rises':1,'appear':1,'would':2,'seems':7,'been':2,'actually':1,'may':10,'only':1,'other':1,'probably':2,';':1,'has':12,'was':42,'ought':1,'be':1,'life':2,'an':1,'intervened':1,'some':1,'took':1,'illustration':1,'soon':1,'depressing':1,'cannot':1,'lives':1,'arose':2,'they':1,'not':5,'now':1,'comes':1,'depended':1,'a':3,'on':1,'are.':1,'should':3,'could':2,'will':5,'remain':2,'must':7,'can':11,'evolved':4,'were':26,'the':1,'might':1,'makes':1,'came':3},'disposed':{'to':2},'dispersion':{'is':3,'can':1},'strict':{'liability':1,'sense':3},'world--weighs':{'nearly':1},'house':{'of':1,'.':2,'to':1,'against':1,'on':1},'macaques':{'and':1,'the':1},'fish':{'and':2,'is':4,'it':2,'117':1,'at':1,'118':1,'firmly':1,'takes':1,'lizards':1,'flying':1,'when':1,'.':2,'to':2,'which':4,'probably':1,'has':1,'arges':1,'stock':1,'that':1,'ceratodus':1,'chiasmodon':2,'with':2,'like':1,'of':1,'larger':1,'grows':1,'the':3,'male':1,'makes':1,'called':1},'eoanthropus':{'expresses':1},'relic':{'of':3,'were':1},'kittens':{'or':1},'account.':{'since':1},'troubles.':{'another':1},'amongst':{'fishes':1,'the':8,'themselves':1,'them':1,'all':1},'instrument.':{'a':1},'strenuous':{'life.':1,'life':3,'conditions':1,'time':2},'promote':{'variability':1},'faster':{'and':1,'than':4,'.':2},'applying':{'severe':1},'bullet':{'and':1,'thirty':1,'leaves':1,'illustration':1,'one':1,'itself':1,'does':1,'the':1},'multiplicity':{'.':1},'electroscope':{'is':1},'centenarian':{'tortoise':1},'grasp':{'begins':1,'probably':1,'the':1,'an':1},'grass':{'and':2,'gathering':1,'forming':1,'the':1,'was':1,'he':1},'creeping':{'of':1,'about':1,'upwards':1},'strongly':{'developed':1,'illumined':1},'accentuated':{'by':1},'words:':{'bone':1},'stock.':{'every':1},'taste':{'do':1,'may':1,'of':1,'seems':1,'which':1,'in':1},'yacht':{'and':1},'lingula':{'of':1},'tactics--self-effacement':{'on':1},'britain':{'and':2,'do':1,'we':1,'just':1,'it':1,'has':1,'having':1},'curly-or':{'wavy-haired':1},'diverged':{'far':1,'the':2,'from':1},'orchards':{'descended':1},'corresponding':{'ratio':1,'magnetic':1,'to':10,'bright':1,'stages':1,'hump':1},'russel':{'wallace':1},'operation':{'of':1,'to-day':1},'collared':{'lashed':1},'deserve':{'for':1},'discerned':{'in':1},'shore-haunt':{'and':2,'littoral':1,'as':1,'are':1,'exhibits':1},'compel':{'the':1},'erecting':{'standing':1},'spring-tails':{'and':1},'blackish-grey':{'.':1},'f.z.s.':{'seasonal':1,'professor':1,'banded':1,'rock':1,'the':3,'woodpecker':1},'meteorites--pieces':{'of':1},'cock-pigeon':{'very':1},'deviation':{'it':1},'briefly':{'the':1,'discussed':1,'outline':1},'separate':{'and':1,'animals':1,'study.':1,'engines':1,'tuft':1,'whirling':1,'off':1,'entity':1,'universes--':1,'threads':1,'molecules':1,'existence':1,'genus':1},'manipulate':{'puzzle-boxes':1},'symbol':{'of':1},'carnegie':{'institution':2},'includes':{'not':1,'information':1,'all':2,'thousands':1,'the':2},'gutenberg':{'web':1,'associated':1,'license':3,'is':3,'ebook':4,'literary':13,'are':1,'you':1,'volunteers':1,'appears':1},'nucleus':{'and':2,'then':1,'we':1,'gr':1,'rather':1,'of':5,'is':1,'but':1,'.':4,'to':1,'are':1,'in':1,'into':1,';':1,'has':1,'or':3},'recognise':{'a':1,'both':1,'them':1,'that':1,'these':1,'an':1,'as':2,'progress':1,'the':6,'accessory':1},'fasten':{'themselves':1},'included':{'a':1,'was':1,'with':2,'.':2,'in':2,'the':1,'has':1,'numerous':1},'stocks':{'began.':1,'of':3,'began':1,'within':1,'it':1,'but':1},'irretraceable':{'course.':1},'bustard.':{'such':1},'atromaculatus':{'121':1,'in':1},'missed':{';':1},'meadow':{'it':1},'bilateral':{'symmetry.':1,'symmetry':2},'calls':{'of':1,'the':3,'it':1,'adaptive':1},'wife':{'took':1},'splendour.':{'they':1},'environment.':{'1':1,'sec':1},'eighty-odd':{'chemical':2},'migrated':{'to':1,'from':2},'all':{'opinions':1,'over':3,'mending':1,'four':1,'thoughtful':1,'through':3,'its':2,'except':2,'monkeys':1,'forms':1,'to':3,'only':1,'reptiles':2,'easy':1,'circle':1,'his':5,'liability':2,'they':1,'day':2,'processes':1,'50':1,'these':6,'works':1,'cells':1,'mean':1,'angles--that':1,'because':1,'energy':1,'hard':1,'phenomena':1,'are':1,'our':3,'shoots':1,'enemies':1,'respects':1,'space':1,'access':1,'outside':1,';':3,'be':1,'we':1,'scientific':1,'here':1,'atoms':2,'magnetism':2,'directions.':1,'members':1,'clues':1,'directions':3,'along':1,'likelihood':3,'things.':1,'mingled':1,'of':7,'round':3,'speeds':1,'probability':2,'point':1,'three':1,'chemists':1,'references':2,'sounds':1,'use':1,'her':1,'flying':1,'copies':2,'.':7,'scions':1,'conceivable':1,'molecular':2,'was':1,'life':2,'that':3,'but':2,'cases':2,'white':3,'those':2,'inconspicuous':1,'animals':2,'this':4,'originally':2,'appearance':2,'air':1,'matter':7,'were':1,'meet':1,'stages':2,'at':2,'and':1,'associated':1,'sorts':6,'is':3,'modern':2,'it':1,'as':1,'manner':1,'walks':1,'perhaps':3,'things':4,'make':1,'when':2,'detail':1,'how':1,'other':1,'which':1,'creatures':1,'higher':2,'kinds':1,'moving':2,'such':1,'in':2,'attaining':1,'time':1,'the':81,'bodies':2},'lack':{'of':2},'muscle-fibres':{'grow':1,'in':1},'son.':{'the':1,'alsatian':1},'seals':{'and':1,'.':1},'light-waves':{'and':1,'into':1,'.':2,'are':1,'which':1,'the':2},'disc':{'and':1,'for':1,'of':4,'.':2,'eight':1,'was':1},'dish':{'and':1},'follow':{'sir':1,'that':1,'it':1,'however':1,'till':1,'the':4,'with':1,'their':1},'disk':{'or':1},'decisions':{'were':1},'synthetic':{'chemists':2,'chemist':1},'glimpse':{'of':8,'the':1,'in':1},'deliberateness':{'and':1,'.':1},'meteorites--a':{'great':1},'subjected':{'.':1},'extraneous':{'source':1},'presentation':{'of':1},'tethered':{'on':1},'activities':{'and':1,'influenced':1,'may':1,'of':1,'.':1,'implying':1,'as':1},'belonging':{'to':1},'means--light':{'without':1},'worse':{'to':1,'for':1,'.':1},'devonian':{'a':1,'age':1,'period':4,'seas.':1,'lung-fishes':1,'foot-print':1,'the':1,'red':1},'song':{'of':1},'infringement':{'a':1},'combustible':{'material':1},'educative':{'process':1},'induce':{'fresh':1},'psychologist':{'whom':1},'sons':{'new':1,'first':1},'fan':{'or':1,'like':1,'by':1},'hatching':{';':1,'out':2,'.':1},'awful':{'possibility--involution':1},'time--wherein':{'to':1},'soles':{'with':1},'rhodeus':{'amarus':2},'corpuscles':{'and':1,'called':1,'form':1,'.':1},'morley':{'tried':1},'stimulus':{'almost':1,'of':1,'.':1,'travels':1,'to':2,'such':1},'eye-sockets':{'the':1},'list':{'may':1,'of':3,'is':1,'to':1},'prolonged':{'training':1,'period':1,'ice':1,'youthfulness':1,'ante-natal':1,'the':1,'trying':1,'drought':2,'exposure':1},'rods.':{'2':1},'indemnity':{'-':1},'familiarly':{'seen':1},'dexterity':{'and':1,'until':1,'besides':1,'.':1},'lightner':{'witmer.':1},'rats':{'and':4,'learn':1},'depths.':{'a':1,'illustration':1},'ten':{'and':1,'pounds':3,'of':1,'thousand':3,'times':1,'hours':2,'to':1,'straws':1,'unseen':1,'moons':1,'hours--a':1,'our':1,'years':1,'minutes':2},'foreground':{'holding':1},'fringing':{'the':1,'teeth':1},'tea':{'or':1},'reins':{'at':1,'in':1},'breakers':{'.':1},'000-50':{'000':1},'rate':{'a':1,'from':2,'that':1,'of':15,'which':1,'than':1},'invention':{'and':1,'of':1,'.':1,'first':1,'that':1},'1904-5':{'in':1},'s-beak':{'jaws':1},'functioning':{'properly':1,'throughout':1,'.':1},'remarkably':{'representative':1},'toe.':{'illustration':1},'paralyse':{'and':1},'babylonia':{'egypt':1,'greece':1},'what':{'origin':1,'this':3,'all':1,'right':1,'followed':3,'is':49,'it':4,'evidence':1,'are':10,'in':1,'peter':1,'causes':1,'before':1,'happens':2,'sir':1,'would':1,'matter':1,'electricity':1,'agency':1,'does':1,'goes':2,'resulted':1,'new':1,'you':1,'has':4,'might':5,'energy':1,'crookes':1,'sort':1,'then':2,'we':20,'elements':2,'electric':1,'may':5,'mammals':1,'of':1,'looks':2,'took':1,'mimics':1,'heat':1,'fruit':1,'mankind':1,'they':9,'satellites':1,'an':1,'come':1,'appears':1,'those':1,'man':1,'a':7,'great':1,'animals':1,'these':1,'was':8,'professor':1,'osborn':1,'more':1,'she':2,'were':1,'happened':1,'about':1,'the':18,'gives':1,'makes':1,'could':1,'bond':1},'necessary.':{'a':1},'imported':{'from':1},'advantageous':{'to':1,'than':1,'power':1,'for':1},'sun':{'and':22,'compare':1,'already':1,'often':1,'produces':1,'is':20,'in':5,'constitute':1,'ceased':1,'as':3,'itself':2,'sec':1,'looks':1,'uranus':1,'year':1,'------':1,'our':1,'are':2,'before':1,'mercury':1,'passes':1,'from':1,'would':5,'seems':1,'.':23,'to':4,'must':2,'without':1,'which':4,'dying':2,';':1,'has':4,'was':2,'into':1,'photographed':2,'we':4,'goes':1,'that':4,'may':1,'forming':1,'obscures':1,'however':1,'but':2,'cannot':1,'every':1,'here':1,'somewhat':1,'not':1,'with':2,'nearly':1,'like':2,'a':1,'whose':1,'19':1,'18':1,'could':1,'sweeps':1,'or':1,'s':35,'became':1,'flame':1,'can':1,'have':1,'were':2,'at':2,'the':7,'called':1,'thanks':1},'sum':{'up':1},'ticks':{'of':1},'crust':{'and':2,'of':3,'.':3,'brought':1,'has':1,'with':2,'by':1},'brief':{'moments':1,'outline':1},'version':{'posted':1},'for--may':{'have':1},'maze--which':{'they':1},'discern':{'the':2,'that':1},'heat-measuring':{'instrument':1},'cheetahs':{'or':2,'occur':1},'segmentation':{'of':1},'toes':{'and':1,'a':1,'scrambling':1,'form':1,'shorten':1,'.':3,'as':1},'tags':{'of':2},'ceratodus':{'which':1},'berthelot':{'that':1},'behaviour':{'and':2,'show':1,'is':5,'reaches':1,'depends':1,'sec':1,'are':1,'had':1,'.':8,'may':3,'which':6,'was':1,'we':1,'that':1,'very':1,'but':2,'diagram':1,'76':1,'on':1,'both':1,'of':15,'without':2},'inverse':{'ratio':1,'order':1},'compressed':{'body':1,'marked':1},'directions':{'and':1,'becoming':1,'within':1,'.':3,'as':1,'indicative':1,'at':2,';':1},'steamships':{'to':1},'observing':{'carefully':1,'all':1,'the':1},'water-shed':{'to':1},'chlorophyll-possessing':{'plants':1},'29.46':{'73000':1},'difficulty':{'of':1,'is':1,'about':1,'in':3},'1843':{'had':1},'1842':{'.':1},'allows':{'life':1,'for':1},'1845':{'of':1},'miniature':{'frogs':1,'solar':1,'.':1},'extremes':{'of':1,'are':1,'to':1},'reshufflings':{'or':1},'m.f.':{'near':1},'2163':{'--':1},'cataract':{'gives':1},'sticking':{'out':3},'disposition':{'taking':1},'suddenly':{'seized':1,'fired':1,'attacked':1,'this':1,'lights':1,'into':1,'perceive':1,'being':1,'so':1,'in':1,'rising':1},'semites':{'nordics':1},'bathers':{'are':1},'screens':{'in':1},'mme':{'.':1},'color':{'of':1},'1908':{'33':2,'notice':1,'the':1},'rainbow-tinted':{'colours':1},'know.':{'the':1},'1907':{'by':2},'coatings':{'is':1},'1905':{'22':1,'illustration':1},'herring':{'and':1,'illustrations':1,'the':1,'family':1,'would':1},'1900':{'by':1,'that':1},'1901':{'but':1},'unthinkably':{'long':1},'pervades':{'everything--so':1},'proceed':{'to':1,'from':2,'at':1},'degree.':{'until':1},'faint':{'and':2,'indications':1,'star':1,'.':1,'to':2,'impressions':1,'or':1},'unthinkable':{'on':1},'minor':{'chapter':2,'invasions':1,'alterations':1,'ones':1,'idiosyncrasies':1,'speculated':1},'horses':{'and':5,'a':1,'or':1},'flat':{'forehead':1,'on':2,'as':1,'spider':1,'skull':1},'darting':{'hither':1},'knows':{'his':1,'for':1,'that':1,'of':1,'but':2,'to':1,'only':1,'how':1,'the':1,'monkeys':1},'light-years':{'polaris':1},'definition':{'is':1},'coating':{'and':1},'text.':{'illustration':3},'screen.':{'the':1,'now':1},'flit':{'by':1},'stick':{'might':1,'with':1,'so':1,'to':1,'it':1},'known':{'and':5,'sources':1,'as':10,'human':1,'in':2,'from':1,'excepting':1,'approximately':1,'.':4,'bird--evidences':1,'to':15,'only':2,'easy':1,'between':1,'bird--too':1,':':1,'type':1,'bird':4,'then':1,'that':4,'but':2,'atom':1,'predecessors':2,'on':1,'about':2,'attempt':1,'of':3,'amphibian':1,'the':1,'fact':1},'glad':{'to':1},'presumed':{'evolution':1},'primate':{'stem':2,'stock':2},'sense-presentation':{'and':1},'lung-fish':{'inside':1},'v':{'the':1,'.':2},'--jupiter':{'and':1},'excursion':{'in':1},'tennis':{'ball.':1},'computers':{'including':1,'.':1},'hormones--itself':{'of':1},'brown':{'and':2,'plants':1,'that':1,'colour':1,'variety':1,'box':1,'bear':3,'plumage':1,'ones':2,'seaweed':1,'in':1,'variable':1,';':1,'on':1,'stoat':1},'bright--the':{'light':1},'joints':{'in':1},'locating':{'sounds':1},'abandonment':{'of':1},'moorhens':{'was':1,'which':1},'protects':{'its':1},'imitation':{'counts':1,'so':1,'two':1,'but':1,'.':1},'arise':{'mysteriously':1,'from':3,'take':2,'directly':1},'pond':{'and':3,'of':1,'is':1,'it':1,'to':1,'nor':1},'air-dome':{'.':1},'mother-of-pearl':{'or':1},'terrestrial':{'plants':2,'mountains':1,'life':3,'animals':3,'rather':1,'support':1,'haunt':2,'standards':1,'dinosaurs':1,'journeyman':1,'animal':3,'backboned':1,'dragons':2},'influenced':{'all':1,'by':4},'court':{'maze':2,'maze--which':1},'goal':{'is':1},'unavailable.':{'what':1,'the':1},'breaking':{'on':2,'up':3,'down':5,'diverse':2,'down.':1,'the':1},'84.02':{'31900':1},'occasionally':{'with':1,'however':1,'in':1},'influences':{'such':1,'shutting':1,'from':1,'they':1},'extinguished':{'at':1},'shoulder-blade':{';':1},'hers.':{'illustration':1},'mould':{'so':1,'opening':1},'simplicity':{'and':1,'of':1},'sea-squirt':{'and':1},'orbits':{'.':1,'with':1,'at':1,'round':1},'trial-and-error':{'method':1,'methods':1},'twenty-thousandth':{'of':1},'moult':{'and':2},'pupae':{'tend':1,'less':1},'adventure':{'and':1,'the':1,'which':4,'.':1},'infects':{'him':1},'prospecting':{'for':1,'in':1},'concentrating':{'always':1},'profited':{'by':1},'dissolving':{'out':1},'short':{'a':1,'summer':1,'we':1,'and':2,'stump-like':1,'of':1,'powerful':1,'tail':1,'lists':1,'.':1,'list':1,'length':1,'folk':1,'words':1,'time':7,'the':1,'sojourn':1,'excursion':1,'to':1,'distance':3},'chiefly':{'on':1,'used':1,'from':1,'of':1,'through':1,'in':2,'sounds':1,'with':1},'dispersion--that':{'is':1},'prefers':{'a':1},'life-histories':{'and':1,'of':1},'departure':{'of':1,'in':1},'height':{'and':1,'of':8,'.':1,'so':1,'in':1,'the':1,'was':1},'shore':{'and':2,'area.':1,'is':4,'scene':1,'inland':1,'1921':1,'as':1,'starfishes':1,'at':1,'in':1,'.':3,'to':1,'varies':1,'hatch':1,';':1,'life':1,'seaweeds':1,'but':1,'they':1,'others':1,'come':1,'must':1,'animals':2,'of':9,'according':1,'the':1,'something':1},'conjugal':{'affection.':1},'kippax':{'call':1},'shade':{'of':2},'iron-mines':{'saturated':1},'encased':{'in':2},'plaice':{'and':2,'or':1},'indebted':{'climatic':1},'september':{'of':1,'1922':1,'29':2,'7':1},'developed':{'and':1,'on':1,'from':1,'for':1,'is':1,'except':1,'vocal':1,'.':3,'through':1,'collar-bone':1,'in':1,'along':1,'striped':1,'than':1,'more':1},'universals.':{'intelligent':1},'mission':{'of':4},'cross':{'upon':1,'x':1,'with':1,'was':1,'from':1},'gauged':{'from':1},'unfitting':{'that':1},'scientist':{'galileo':1,'is':1},'concentric':{'regions':1,'lines':1},'emphasized':{'by':1},'thirtieth':{'case':1,'forty':1},'variability--evolution':{'of':1},'style':{'.':2},'forwards':{'as':1,'for':1},'call':{'radio-activity':1,'magnetic':1,'mind':1,'life':2,'as':1,'electrons.':1,'our':2,'living':1,'gravitation':1,'them--or':1,'electro-magnetic':1,';':1,'into':2,'nebulae.':1,'neolithic':1,'himself':1,'them--which':1,'it':1,'helping':1,'them':1,'white.':1,'canals':1,'white':2,'a':2,'light':1,'ozone':1,'of':1,'the':4,'perceptual':1,'reason.':1},'susceptible':{'to':1},'fairbanks':{'ak':1},'example.':{'the':1},'obscure--sometimes':{'environmental':1},'harmless':{'from':1,'snakes':1},'strange':{'animals':2,'animal':1,'amalgams':1,'nest':1,'rings':1,'state':1,'to':2,'as':1,'objects':1,'colouring':1,'lowly':1,'spectacle':1,'creations':1,'conditions':1},'combination-boxes':{'where':1},'non-plastic':{'efficiency':1},'partitions':{'se':1},'might':{'on':1,'be':17,'almost':1,'injure':1,'speak':1,'see':1,'therefore':1,'have':2,'take':2,'happen':1,'hasten':1,'think':1,'possess':1},'alter':{'the':2},'pre-human':{'ape-man':1,'ancestor':1,'ancestors':1,'pedigree':1},'return':{'and':2,'from':1,'later':1,'to':10,'as':1,'the':1,'or':2},'sucking':{'tongue':1},'alighting':{'only':1},'hunter':{'with':1},'chalones':{'which':1},'2.--the':{'milky':1},'communities':{'and':1},'hunted':{'out':1},'adventurous':{'and':1,'life-history':1,'experiment':1,'worms':1},'bigger':{'and':1,'than':2},'instructions':{'to':1},'subtler':{'demands':1},'intricacy':{'of':1},'bolts':{'and':1},'mastered':{'the':1,'so':1,'.':1},'man':{'all':1,'over':1,'discovered':1,'whose':3,'had':3,'except':1,'forms':1,'to':3,'has':9,'noticing':1,'coloured':1,'represents':1,'did':1,'found':1,'photographically':1,'works':1,'bone':1,'often':1,'past':1,'homo':2,'sec':1,'are':2,'thinks':1,'established':1,'plays':1,'stands':2,'since':1,'does':2,'got':1,';':2,'we':2,'sprang':1,'alone':2,'appears':1,'on':2,'would':1,'of':12,'could':1,'s':48,'or':4,'first':1,'appeared':1,'171':1,'asks':1,'.':18,'too':1,':':2,'was':4,'himself':2,'knows':1,'that':1,'exterminated':1,'took':1,'but':2,'to-day':1,'167':1,'with':3,'161':1,'he':1,'plants':1,'grew':1,'these':1,'type':1,'will':2,'values':1,'were':2,'and':22,'153':1,'type.':1,'157':1,'is':11,'it':1,'an':1,'reconstructed':1,'as':2,'lived':1,'have':1,'in':5,'saw':1,'occur':1,'perhaps':2,'interferes':1,'1':1,'how':1,'a-b.':1,'interfered':1,'pursues':1,'nearer':1,'may':1,'preceding':2,'who':3,'prepared':1,'73':1,'included':1,'man':1,'a':1,'off':2,'pithecanthropus':1,'m':1,'the':7,'possesses':1,'came':1},'inherent':{'biological':1},'difficult':{'chapter':1,'on':1,'word':1,'for':3,'of':1,'question':1,'theories':1,'environment':1,'to':14,'not':1,'situation':1,'speculation':1,'conditions':1,'than':1},'saturn.':{'the':1},'constructing':{'its':1},'weighs':{'1':1,'about':3,'nearly':1},'weight':{'for':1,'of':6,'is':1,'two':1,'.':1,'they':1,'than':1},'needless':{'to':2},'generation':{'and':1,'people':1,'of':1,'is':1,'after':1,'to':3,'that':1,'have':1,'in':1,';':1,'if':1},'female--first':{'one':1},'notochord':{'is':2,'.':2},'recapitulate':{'racial':1,'in':1},'culminating':{'with':2,'in':2},'scratching':{'swimming':1},'inflated':{'and':1,'balloon.':1},'croaking':{'of':2},'wondered':{'why':1,'idly':1,'at':1},'induces':{'a':1},'progressive;':{'everything':1},'health':{'and':1,'which':1,'.':1},'hill':{'cave':2,'in':1},'absorb':{'either':1},'celebes':{'lay':1},'induced':{'to':2},'caucasian':{'arose':1,'.':1},'regards':{'many':1,'their':1,'sight':1,'wave-lengths':1,'the':4,'its':2,'size':1},'note--that':{'of':1},'exertions':{'and':1,'running':1},'lesser':{'degree':1},'coco-palms':{'has':1},'rotifer':{'is':1},'monotony':{'.':1},'tassels':{'on':1},'fuller':{'embodiment':2,'well-being.':1},'teach':{'her':1},'colonised':{'by':1,'at':1},'generate':{'heat':1,'thousands':1},'lag':{'behind':1},'thrown':{'a':1,'on':2,'dust':1,'off':1,'upon':1},'preliminary':{'training':1,'scaffolding':1},'thread':{'of':1,'needles':1},'e.g':{'.':38},'decipiens':{'and':1},'77':{'photo':1,'reproduced':1},'light--we':{'have':1},'circuit':{'of':2,';':1,'generates':1,'.':1},'twenty':{'thousand':1,'million':2,'years':5,'hours':2,'to':1,'miles':1,'or':2},'lemurs':{'and':1,'there':1},'experimenter':{'or':1},'fallen':{'and':1,'sufficiently':1},'throws':{'light':1,'it':1},'solidly':{'frozen':1},'sperm-cell':{'and':1,'adapted':1,'with':1},'sheep-driving':{'competition':1},'limestone':{'canyon':2,'which':1},'feel':{'and':1,'sure':1,'for':1,'over-anxious':1,'quite':1,'dare':1},'radical':{'difficulty':1,'changes':1},'churning':{'water':1},'linking':{'generation':1,'of':1},'well-known':{'case':1,'elements':2,'that':1,'mudfish':1,'examples':1,'soft-shell':1,'carpo-metacarpus':1},'sympathy':{'which':2},'sailor':{'expressed':1},'brave':{'self-forgetful':1},'defects':{'such':1},'fees':{'to':1,'.':1,'or':1,'that':1},'says':{'and':1,'a':1,'no.':1,'do':1,'that':3,'professor':1,'meteorites':1,'sir':1,'can':1,'the':2,';':1},'vapour-like':{'matter':1},'whale':{'and':2,'what':1,'showing':1,'there':1,'reaches':1,'.':1,'rushes':1,'the':1,'has':1,'118':1,'is':1,'must':1},'earthworms':{'and':1,'which':1,'centipedes':1,'many':1,'began':2,'have':1,'in':1},'fossil-bearing':{'rocks':1},'passes':{'a':1,'from':2,'into':1,'to':1,'near':1,'through':4,'directly':2,'between':1,'along':2,'the':1,'out':1},'story':{'of':19,'is':1,'when':1,'.':1,'will':1,'simply':2,'in':2,'the':1,'has':1,'went':1},'birgus':{'latro':2,'which':1},'temperature':{'and':3,'is':1,'it':1,'reaches':1,'say':1,'at':2,'in':1,'would':2,'seems':1,'.':7,'which':1,';':1,'was':1,'day':1,'then':1,'we':1,'falls':1,'rises':1,'than':1,'must':1,'of':10,'could':1,'allows':1,'will':1,'the':2},'redistributing':{'project':1,'or':1},'kin.':{'the':1},'leading':{'to':3,'peculiarities':1,'from':1,'authority':1},'coasts':{'but':1},'brisker':{'flow':1},'hangs':{'over':1},'swarm':{'of':3,'sometimes':1,'like':1,'has':1},'storm':{'note':1,'petrel':4,'effects':1,'they':1},'pitted':{'against':1},'soddy.':{'it':1},'aristocracy':{'and':1},'store':{'of':3,'the':1},'fire-mists':{'such':1,'would':1},'imperfect':{'core':2,';':1,'telescope':1,'the':1},'fish-lizards':{'and':1},'pump':{'.':1},'information:':{'dr':1},'convinces':{'us':1},'tugs':{'at':1},'sea-scorpions':{'belonged':1},'treasures':{'behind':1},'rifle':{'and':1,'bullet':3,'.':1},'convinced':{'of':1,'that':2},'explodes':{'without':1},'king':{'of':1},'kind':{'and':2,'we':2,'enable':1,'from':2,'whereas':1,'that':2,'of':34,'taking':1,'express':1,'upon':1,'.':2,'will':1,'set':1,'in':3,';':2,'throughout':1,'or':1,'present':1},'earth--as':{'a':1},'wonder-world':{'of':2},'double':{'this':1,'streaming':1,'blowhole':1,'fold':1,'that':1},'instruction':{'and':1},'indifferent.':{'they':1},'dispensed':{'with':1},'risks':{'and':2,'to':1,'are':1,'of':2},'coast.':{'illustration':1},'earth--an':{'electric':1},'tongues':{'of':2},'unrestricted.':{'animals':1},'7a':{'the':1},'outstanding':{'events':1},'greenwich':{'observatory':1},'disguise--other':{'kinds':1},'gale':{'bringing':1},'alike':{'of':1,'in':1},'cleaned':{'artificially':1},'shrews':{'tree-shrews':1},'cases--marvellous':{'apparatus':1},'cobras':{'brightly':1},'blowhole':{'or':1},'check':{'on':1,'the':2,'comes':1,'vegetation.':1},'interferes':{'is':1},'cropped':{'up':1},'port':{'knows':1,'in':1},'middlemen':{'is':1},'moist':{'winds':1,'and':1,'climate':2,'internal':1,'air':1},'finding':{'their':1},'interfered':{'but':1},'added':{'a':2,'to':4,'up':1},'electric':{'current':15,'power':2,'bells.':1,'bell':1,'charges':2,'shock':1,'phenomena':1,'charge':3,'magnet':1,'tram':1,'terminals':1,'dynamo.':1,'circuit':1,'trams':1,'discharge':6,'spark':8,'furnace':1},'bands':{'it':1,'140':1},'intervened':{'the':1},'instance.':{'organic':1},'measures':{'of':1,'about':1,'on':1,'the':1,'three':1},'reach':{'a':2,'and':1,'about':1,'us.':1,'us':1,'.':1,'their':1,'only':1,'but':2,'the':7,'upward':1,'out':1},'react':{'effectively':1,'on':1},'cigarette':{'and':1},'attempt':{'to':2,'at':1,'too':1},'74':{'diagram':1},'73':{'okapi':1},'72':{'photo':2,'earthworm':1,'reproduced':1},'enduring':{'satisfaction':1},'nothing':{'happens':1,'appeals':1,'like':1,'solid':1,'of':1,'had':1,'but':3,'.':6,'better':1,'more':1,'at':1,'which':1,'in':2,'colder':1,';':1,'out':2,'was':1,'gives':1},'measured':{'and':2,'cube':1,'in':2,'drop':1,'only':1,'fall':1,'the':2,'by':1,'movements':1},'achievement':{'and':1,'is':1},'constitution':{'of':10,'could':1,'which':1,'.':1},'equatorial':{'regions':1,'forests':1},'22.--a':{'nebular':1},'mineral':{'particles':1},'coincides':{'with':1},'chemical':{'reaction':3,'processes':3,'elements':3,'energy':2,'substances':1,'science':1,'screen':3,'conditions.':1,'messengers':6,'element':2,'leave':1,'transformation--the':1,'analysis':1,'routine':1,'action':1,'.':1,'changes':1,'compounds':1,'element.':1,'level':2},'zealand.':{'some':1},'amphibian':{'foot-print--an':1,'mind':1,'race':1,'in':1},'wood-snails':{'but':1},'notch':{'next':1},'artemia':{'salina':1},'institutions':{'.':1,'were':1},'lying':{'on':2,'head':1,'inert':1,'over':1,'upon':1,'beside':1,'low':3},'stones':{'and':3,'on':1,'from':1,'of':2,'.':1,'so':1,'in':1,'probably':1,';':1,'where':1,'or':1},'copy':{'and':1,'a':1,'of':2,'is':1,'upon':1,'it':2,'or':1,'in':1,'display':1,'if':1},'journeys':{'undertaken':1,'.':1},'pennies':{'and':1,'from':1},'wayside':{'.':1},'to-day.':{'as':1,'illustration':1,'an':1},'shares':{'with':1},'gilded':{'boxes':1},'securing':{'a':1,'change-provoking':1,'the':2},'mudfish':{'may':1,'of':1,'is':1,'or':1},'fishes--the':{'mind':1},'moulting':{'immature':1},'grotesque':{'delusions':1},'betray':{'themselves':1},'hip':{'joint':1},'birnam':{'when':1},'hit':{'a':1,'and':1,'upon':1,'by':1},'gains':{'of':2,'that':1},'assumed':{'on':1},'furnaces':{'as':1,'with':1},'whistle':{'is':1},'explosively':{'from':1},'longest':{'for':1,'of':1,'feathers':1,'are':1,'waves':2,'or':1,'pinions':1},'instinctive':{'aptitudes':5,'activities':1,'repertory.':1,'capacities.':1,'rather':1,'capacities':5,'due':1,'actions':1,'element':1,'behaviour':10,'obligations':1,'registration.':1,'ants':1,'capacities--limited':1,'routine':2,'capacity':2,';':1,'.':1,'awareness':1,'behaviour.':1},'shreds.':{'whenever':1},'stone.':{'and':1,'nearly':1},'eye-piece':{'magnifies':1,'.':1,'its':1,'at':1},'expositor':{'.':1},'thereabouts':{'.':1},'nibbles':{'at':1},'arges':{'that':1},'investigate':{'the':1},'ninety-two':{'elements--we':1,'.':1},'activity':{'and':1,'we':1,'which':1,'for':2,'almost':1,'heretofore':1,'is':1,'in':2,'s':2,'.':3,'also':1,'as':2,'besides':1,'of':3,'known':1,';':1,'where':1},'rischgitz':{'collection.':6},'engraved':{'on':2},'nibbled':{'away':1},'bars':{'of':1,'have':1,'which':1},'art':{'of':1,'expressing':1,'in':1},'achieved':{'.':2},'intelligence':{'and':9,'on':1,'--the':1,'deteriorates':1,'cooperated':1,'of':2,'is':2,'when':1,'what':1,'.':7,'will':1,'to':3,'increases':1,'are':1,'a':1,'in':3,'seen':1,'the':2,'--a':1,';':2,'co-operating':1},'arc':{'in':2},'bare':{'head':1},'are':{'limited':1,'all':9,'scooped':1,'caused':1,'landlocked':1,'commoner':1,'illustrated':3,'particularly':3,'poorly':1,'particles':2,'certainly':1,'concerned':3,'to':9,'preserved':1,'under':1,'worth':1,'activities':1,'comparatively':1,'seized':1,'returned':1,'sitting':1,'very':25,'trillions':1,'foul':1,'vastly':1,'vast':2,'dim':1,'clouds':1,'large':2,'quick':3,'smaller':1,'specially':1,'dealing':1,'likely':1,'further':1,'estimated':1,'giving':1,'hereditary':2,'fossil':1,'ever':1,'led':1,'loose':1,'here':3,'hundreds':5,'met':1,'others':1,'persecuted':1,'strong':3,'observing':1,'great':2,'thirty':1,'vibrating':1,'descended':5,'usually':4,'conveniently':1,'composed':2,'mimicked':1,'suddenly':1,'merely':5,'explained':1,'marked':2,'highly':1,'brought':1,'visible':2,'hard-and-fast':1,'from':1,'recalling':1,'two':11,'few':1,'wonderfully':1,'therefore':2,'taken':1,'themselves':1,'phosphorescent--they':1,'more':13,'separated':1,'staggering':1,'tested':1,'ignorant':2,'known':7,'mounted':2,'none':1,'vicissitudes':1,'excessively':1,'exceptions':2,'pent-up':1,'bent':1,'indicated':1,'oviparous':1,'tax':1,'allowed':1,'huge':1,'rather':1,'divided':1,'breaking':2,'entangled':3,'1':2,'located':2,'ordinary':1,'substances--':1,'tried':1,'undergoing':2,'inconceivably':1,'burrowing':1,'different':2,'waves':3,'such':5,'a':13,'free-swimming':1,'chiefly':2,'four':2,'crowded':1,'light':1,'so':13,'pulled':1,'minded':1,'over':1,'mainly':1,'produced':1,'held':1,'still':5,'its':2,'26':1,'interesting':1,'masses':1,'actually':2,'strange':1,'microscopic':1,'spoiling':1,'covered':1,'receptacles':1,'secondary':1,'split':1,'good':1,'locusts':1,'safe':1,'they':3,'not':35,'sorted':1,'now':11,'killed':1,'well-known':1,'always':2,'sufficiently':1,'each':1,'found':3,'entirely':1,'traces':1,'lifted':1,'doing':2,'sifted':5,'transmissible.':1,'borne':3,'living':1,'shown':2,'fundamentally':1,'content':1,'laid':2,'7':1,'induced':1,'red':1,'attended':1,'quite':4,'small':1,'put':1,'beginning':2,'cremated':1,'exhibited':1,'constantly':1,'adepts':1,'greatest.':1,'instances':1,'spots':2,'directly':1,'immensely':1,'mercury':1,'little':1,'ancient':2,'similarly':1,'unknown':1,'plastic':1,'their':3,'cooling':1,'2':1,'too':1,'wrapped':1,'legally':1,'white':1,'witnessing':1,'mostly':4,'that':1,'exactly':1,'predictable':1,'convinced':1,'peculiar':1,'double':1,'enabled':1,'extraordinarily':2,'matter':1,'determined':1,'supposed':1,'treated':1,'encumbered':1,'variable':1,'close':2,'seen':4,'clearly':2,'relatively':2,'built':3,'thoroughly':3,'speculative':1,'able':8,'also':11,'edge':1,'absorbed':1,'presently.':1,'most':1,'eight':1,'printed':1,'drought':1,'incursions':1,'extremely':1,'nutritive':1,'manifested':1,'especially':1,'considered':1,'clear':1,'sometimes':1,'repeated':1,'face':1,'short-lived':1,'points':2,'left':4,'normally':1,'molluscs':1,'shot':1,'sceptical':1,'supported':1,'scattered':1,'right-handed':1,'rotating':1,'unsurpassed.':1,'giant':1,'highest':1,'distributed':2,'outside':1,'buttons':2,'being':2,'only':5,'going':1,'employed':1,'thousands':1,'meant':1,'exceptional':1,'dependent':1,'closely':1,'altogether':1,'instinctive':1,'areas':1,'playful':1,'sheltered':1,'common':1,'rung':1,'doubles':1,'approaching':1,'set':2,'acquired':1,'observed':1,'sporadic':1,'luminous':1,'subject':1,'said':2,'prominent.':1,'circulating':1,'continually':5,'jewels.':1,'luminescent':1,'unable':1,'various':2,'markedly':1,'probably':3,'prodigally':1,'numerous':3,'we':4,'gratefully':1,'invisible':3,'precious':1,'favourable':1,'many':16,'taking':1,'equal':1,'present':2,'tree-toads':1,'adapted':3,'among':1,'hollow':1,'learning':1,'deflected':1,'ether':1,'startling':1,'there.':1,'capable':1,'tremendous':1,'due':1,'.':3,'attaching':1,'immense':3,'much':4,'slowly':1,'likewise':1,'repelled':1,'painted':1,'suns.':1,'worked':1,'those':3,'stolen':1,'these':3,'awakened':1,'seven':1,'almost':2,'violently':2,'obtrusive':1,'obeying':1,'tell-tale':1,'in':26,'ready':1,'confirmed':1,'perpetually':1,'stimulated':1,'parts':1,'arguments':1,'mixtures':1,'played--for':1,'used':3,'temporary':1,'arctic':1,'constantly--either':1,'moving':1,'kept':2,'paralysed':1,'well':2,'without':2,'the':43,'charged':1,'just':4,'less':1,'increasingly':1,'offensive':1,'mistaken':1,'reincarnated':1,'human':1,'alternative':1,'revealed.':1,'corroborated':1,'thinking':1,'agile':1,'spread':1,'exempt':1,'resolved':1,'easily':1,'dark':1,'apt':4,'long-haired':1,'accepted':1,'redistributing':1,'ruled':1,'like':4,'complicated.':1,'shed':1,'right':1,'often':16,'some':9,'neutralised':1,'amongst':3,'born':3,'universes':1,'provided':1,'gradually':1,'dense':1,'asking':1,'pre-eminent':1,'palatable':1,'slight':1,'manufactured':1,'broken':1,'on':6,'about':6,'cautious':1,'carried':3,'getting':1,'of':7,'discussed':1,'greatly':2,'connected':1,'hatched':4,'flying':2,'attached.':1,'billions':1,'three':3,'authorities':1,'mere':1,'impressed':1,'strictly':1,'there':3,'disposed':1,'long':3,'stars':3,'deposited':1,'naturally':1,'lowest':1,'complete':2,'deaf':1,'but':3,'somehow':1,'curiously':1,'removed':2,'considerable':1,'directed':1,'made':5,'arranged':2,'characteristic':1,'placed':1,'called':11,'storing':1,'vehicles':1,'affectionate':1,'certain':1,'slowing':1,'general':1,'as':8,'definite':1,'at':7,'floating':2,'no':7,'generally':1,'other':8,'blackish-grey':1,'really':3,'separate':1,'suited':1,'included':1,'--a':1,'reflectors':1,'longer':2,'practically':3,'required':1,'utilised':1,'beds':1,'far':4,'undoubted':1,'restored':1},'walking-stick':{'insects':1},'chambers':{'perforating':1},'bark':{'and':1,'of':1},'arm':{'and':1,'spawn':1,'of':2,'is':1,'stretching':1,'.':1,'skips':1,';':1},'declined':{'and':1},'crunching':{'insects.':1},'youth':{'to':1,'from':1},'learns':{'a':1,'the':1},'discovered--pulling':{'and':1},'distinctive':{'features':1,'colour':1,'spectrum':3,'arrangement':1,'peculiarities':1,'fauna':1,'is':1},'anatomists':{'have':1},'misjudge':{'our':1},'universe.':{'this':1,'but':1,'sec':1,'illustration':1,'in':1,'our':1,'are':1},'contrary':{'to':1,'has':1},'nestor':{'parrot':1},'numerous':{'and':1,'hard':1,'locations':1,'parachutists--':1,'attempts':1,'lobes':1,'prehensile':1,'ways':1,'separate':1,'young':1,'microscopic':1,'muscles':1,'kinds':1,'that':1,'hundreds':1,'gas-bubbles':1,'types':1,'ribs':1,'colour-varieties':1,'variations':1,'as':1,'mutually':1,'tubercles':1,'appendages':1},'hairs':{'may':1,'of':2,'and':1,';':1,'which':1},'vitality.':{'illustration':1},'1.f.2':{'.':1},'recently':{'named':1,'said':1,'that':1,'regarded':1,'shown':1,'been':1,'erected':1,'discovered':2,'as':1,'learned':1},'creating':{'derivative':2,'the':2},'1.f.3':{'a':1,'this':1,'the':1,'.':1},'sole':{'of':2,'which':1,'have':1,'are':1},'outfit':{'for':1},'days.':{'there':1,'sec':1},'succeed':{'not':1,'and':1,'in':3,'but':1,'.':1},'head.':{'compare':1,'illustration':1},'prelude':{'to':1},'inertia':{'of':1},'bronze':{'second':1,'was':1,'age':1},'c':{'a':1,'that':1,'of':1,'there':2,'but':1,'.':16,'thirdly':1,'3':2,'others':1,'any':1},'license':{'available':1,'and':1,'terms':1,'especially':1,'for':1,'please':1,'when':1,'.':2,'as':1,'included':2,'apply':1,'the':1,'must':1},'attainment':{'at':1},'sheaths':{'of':1},'distinctively':{'new':1,'north':1,'marine':1},'1.f.5':{'.':1},'roman':{'galley':1},'became':{'useful':1,'heated':1,'an':2,'as':1,'in':1,'extinct':2,'gradually':1,'unavailable':1,'for':1,'restricted':1,'extinct.':1,'much':1,'too':1,'easier':1,'more':2,'aware':1,'suited':1,'a':3,'longer':1,'equal':1,'enregistered':1,'the':4,'essential':1},'cloud-like':{'effect.':1,'patches':1},'bond':{'of':1,'could':1},'finds':{'its':3},'peripatus':{'a':1,'83':1,'centipedes':1,'which':2},'sloth':{'s':1},'flies':{'to':2,'into':1,'at':1,'.':1},'flier':{'.':2},'distress':{'is':1},'reasons':{'and':1,'great':1,'have':1,'for':3,'is':1,'are':2,'which':1,'why':1},'sweet':{'sap':1,'odours':1},'sweep':{'of':1},'whelk':{'on':1,'the':1,'requires':1,';':1,'or':2},'regulated':{'then':1,'harmony':1,'by':1},'incandescent':{'may':1,'world-cloud':1,'atoms':1,'gas.':1},'fibres':{'come':1},'newbigin':{'m':1},'simpler':{'and':3,'elements':1,'animals.':1,'forms':2,'so':1,'fossil':1,'in':1,'still':1},'pr':{'are':1},'decline':{'europe':1,'of':1,'sometimes':1,'markedly':1},'there.':{'so':1,'it':1},'jugglery':{'with':1},'java':{'and':1,'ape':1,'ape-man':3,'at':1,'in':1,'man':2,'ape-man--an':2},'scented':{'with':1},'illumined':{'seaweed-growing':1,';':1,'green':1,'than':1,'surface':1},'pigmies':{'of':1},'dug':{'as':1},'whom':{'we':2,'you':1,'they':1},'reduction':{'of':3,'in':1},'pg':{'search':1},'--an':{'internal':1},'brick':{'you':1,'contains':1,'moves':1},'yolk-laden':{'portion':1},'attractive':{'phenomenon':1},'affectionate':{'and':1},'flight':{'and':1,'from':1,'also':1,'may':1,'brings':1,'is':2,'.':3,'brought':1,'most':1,'as':1,'so':1,'which':2,'of':3,'implies':1,'has':1,'was':1},'flints':{'with':1},'flinty':{'sponge':1,'needles':1,'skeleton':2},'precision':{'what':1},'defect':{'you':1,'in':2},'1864':{'by':1},'temperament':{'as':1},'1869':{'that':1},'1868':{'sir':1},'depends.':{'separate':1},'plants':{'and':24,'already':1,'begun':1,'is':1,'it':2,'at':1,'have':2,'in':3,'before':1,'stands':1,'for':1,'.':5,'to':3,';':2,'laboriously':1,'may':1,'upon':1,'but':2,'such':1,'with':1,'by':1,'flourished':1,'asexual':1,'can':1,'were':2,'the':4,'or':3,'are':2},'stolen':{'by':1},'conception':{'of':6,'the':1,'.':1,'to':1},'boast':{'with':1},'yellow-brown':{'the':1},'frozen':{'gas':1,'masses':1,'hard':2,'rigid':1},'compactness':{'of':1},'intercepts':{'great':1,'all':1},'64-6221541':{'.':1},'parents.':{'strangest':1},'lenard':{'and':1,'found':1},'dublin':{'high':1,'zoo':1},'obtrusive':{'rather':1},'obstacle':{'of':1,'race':1},'rid':{'of':3},'hare--with':{'human':1},'currents':{'within':1,'of':1,'there':1,'.':1,'needed':1,'at':1,'moisture':1},'peopled':{'than':1,'.':1},'away.':{'3':1,'it':1,'illustration':1},'chapter.':{'the':1},'twofold':{'process':1,'caution':1},'illustration:':{'the':1,'star':1},'lengths':{'.':2,'part':1,'which':1,'in':1},'muscle-cells':{';':1,'which':2,'.':1},'foretells':{'the':1},'undersides':{'of':1},'blood-relationship':{'with':1,'between':1},'stimulated':{'brain':1,'cells':1,'if':1,'by':2,'to':1},'dermis':{'and':1},'widely':{'separated':1,'distributed':1,'open':1},'peoples':{'with':1,';':1,'who':1,'to-day':1,'indeed':1},'9':{'a':1,'feet':1,'inches':1,'million':1,'looking':1,'000':1,'the':1,'saturn':1},'shirk':{'the':1},'yucca':{'moth':6,'flowers':2,'flower':3,'moths.':1},'higher':{'and':3,'vertebrates':2,'still':2,'reaches':2,'apes--gorilla':1,'pitch':1,'expressions':1,'education':1,'terrestrial':1,'forms':2,'apes':2,'power':1,'there':1,'note':3,'animal':1,'life':1,'degree':1,'insects.':1,'mammals.':1,'standard':1,'adventures.':1,'controlling':1,'faculty':1,'flowering':1,'than':1,'land':1,'animals':4,'level':3,'turn':2,'centres':1,'mammal':1},'current.':{'each':1},'chequer':{'hen':1},'mountain':{'ranges':2,'hare':4,'torrents':1},'ultimate':{'particles':1,'object':1,'service':1,'atoms':1},'flows':{'as':1,'in':1},'brooding':{'on':1,'it':1},'moving':{'and':2,'speck':1,'through':1,'at':1,'rapidly':2,'hoofed':1,'her':1,'away':1,'.':1,'particles':2,'how':1,'parts':2,'body':1,'very':1,'amongst':2,'atoms':1,'water':1,'objects':2,'molecules.':1,'with':5,'on':2,'about':1,'mass':1,'toward':1,'round':1},'mistake.':{'we':1},'sagacious':{'indeed':1,'when':1},'birch':{'alder':1},'vertical;':{'the':1},'263':{'professor':1,'reproduced':1},'lower':{'and':1,'side.':1,'vertebrates':1,'surface':1,'one':1,'in':1,'female.':1,'photograph.':1,'miocene':1,'jaw':6,'vertebrate':1,'orders':2,'eocene':1,'picture':1,'ends':1,'mammals':1,'levels':1,'jaw.':1,'than':3,'types':1,'temperature':2,'photograph':1,'diagram.':1,'animals':1,'level':1,'part':1,'side':1},'people.':{'no':1},'dancing':{'mice':1,'mouse':1,'or':1},'chickens':{'that':1,'incubated':1,'in':1},'outflame':{'of':1},'analysis':{'of':1,'showing':1,'would':1},'magnified':{'to':2},'solids':{'.':1},'edge':{'on':1,'or':1,'of':5},'length.':{'now':1},'b.c':{'.':2},'beautiful.':{'in':1},'muscle-fibre':{'m.f.':1},'266':{'the':1},'pollen':{'to':1,'from':2,'.':1},'abilities':{'come':1},'endeavour':{'to':1,'after':3,'associated':1,'or':1,'.':1},'unseen':{'occupies':1,'earthworms':1,'.':1},'mimicked':{'butterflies':1,'.':2,'by':1,'for':1,'are':1},'mood.':{'certain':1},'pigeons':{'and':2,'to':1,'it':1,'were':1},'competitive':{'.':1},'reincarnated':{'in':1},'intervals':{';':1},'inachis':{'from':2},'questions':{'and':1,'besides':1,'that':1,'of':3,'introduce':1,'have':1,'with':1},'inter-relations--the':{'subject':1},'reliance':{'on':1},'continent':{'of':1,'when':1,'fixes':1,'from':1},'tamed':{'.':1},'ravine':{'near':1},'wedge-shaped':{'piece':1},'corroborated':{'or':1,'by':1},'extracted':{'from':1},'workers':{'fastened':1},'tentatives--new':{'departures':1},'ocean':{'and':1,'for':1,'of':4,'is':2,'it':1,'.':2,'s':1,'home':1},'exclusively':{'of':1},'exhibition':{'of':2},'inducing':{'strange':1},'finder':{';':1},'turtle-backs':{'is':1},'associations':{'and':1,'established':1,'of':1,'between':1,'.':1,'were':1,'such':1,'with':1},'up-stream.':{'sometimes':1},'balloon.':{'photos':1,'running':1},'sensatory':{'nerve-fibre':1},'entangled':{'and':2,'in':2,'together':1,'air':1},'earth--making':{'a':2},'modifications':{'are':1},'rotate':{'and':1,'on':3,'all':1,'at':1,'round':1},'line--are':{'represented':1},'neanderthaler':{'.':1},'confront':{'us':1},'incidental':{'damages':1},'separately':{'is':1,'.':1},'collect':{'pennies':1,'half':1},'arthur':{'the':1,'thomson':5,'keith':7,'thomson.':1,'antiquity':1},'retires':{'to':1},'under-water':{'world':1},'foot--an':{'obvious':1},'table.':{'illustration':1},'essential':{'features':2,'similarity':2,'that':1,'vertebrate':1,'to':2,'oneness':1,'part':3,'independence':1,'in':1,'bones':1,'construction':1,'difference':1,'correlation':1,'identity':1},'engravings':{';':1},'hinted':{'at':2},'feet--the':{'largest':1},'men--races':{'of':1},'eluding':{'the':1},'streaming':{'motion':1,'from':2},'newsletter':{'to':1},'hjort':{'dr':1},'saucer':{'or':1},'aptitudes':{'many':1,'what':1,'which':1,'inborn':1,'then':1},'stately':{'and':1},'gradually':{'division':1,'slow':1,'from':1,'radiating':1,'out':1,'turned':1,'as':1,'reduced':1,'cooling':1,'settle':1,'eliminate':1,'evolved':2,'curved':1,'become':1,'increasing':1,'adapted':1,'regrown':1,'realised':1},'bushy-tailed':{'almost':1},'tends':{'to':6},'prof':{'.':7},'fragments':{'a':1,'and':1,'broken':1,'doubled':1,'of':2},'pieces--a':{'kind':1},'jumps':{'along':1,'from':1},'weir':{'confessed':1},'refused':{'to':1,';':1},'race--there':{'is':1},'intense':{'white':1,'disturbance':1,'competition':1,'activity':1},'vivid':{'idea':1},'cautious':{'and':1,'for':1},'mingled':{'with':4,'together':1},'age.':{'photograph':1,'sand-pit':1,'some':1,'as':1,'cenozoic':1,'they':1,'the':1},'row':{'of':1},'tortuous':{'path':1},'firing':{'the':1},'deepish':{'water':1},'forbears':{'long':1},'penetration':{'implies':1,'.':1},'lifeless':{'world.':1},'range':{'of':7,'became':1,'in':2},'wonders':{'of':4,'that':1},'fluttering':{'.':1},'gamma':{'rays':4},'naturalists':{'who':2,'have':1},'feed':{'and':1,'on':5,'for':1,'there':1,'some':1,'at':2,'in':1},'enregistration':{'of':1},'moss':{'and':1,';':1,'by':1},'conquest':{'of':8,'implied':1,'both':1},'attached.':{'methods':1},'flagellates':{'in':1},'canal':{'in':1,'system':1,'round':1},'impressed':{'on':1,'with':1,'by':1},'acquiesce':{'as':1,'in':1},'extremely':{'rapid':1,'interesting':1,'alert':1,'rarified':1,'delicate':1,'conservative':1,'fine':1,'thin':1},'question':{'and':2,'what':1,'rises':1,'to-day':1,'that':1,'whether':2,'of':3,'is':4,'had':1,'but':1,'to':2,'as':1,'which':1,'in':2,':':2,'than':1,'must':1},'cocoon--the':{'bag':1},'cuticle':{'or':1},'enregister':{'outside':1,'ready-made':1,'or':1},'conceivable':{'ages':1},'mimicry':{'and':2,'is':1,'serves':1,'.':1,'in':1,'called':1},'sections':{'of':1,'3':1,'.':1},'files':{'of':1,'containing':1},'mountains':{'and':1,'on':1,'like':1,'of':3,'.':1,'to':1,'are':2,'the':1},'potassium':{'pill':1},'glamour':{'of':1},'cloth':{'if':1,'packets':1,'in':1},'began--a':{'small':1},'energy--traceable':{'back':1},'crane':{'and':1,'the':1},'ring-armour.':{'illustration':1},'raising':{'the':1},'penguin':{'notice':1,'213':1},'section.':{'influence':1},'nonplussed':{';':1},'consist':{'of':1,'themselves':1,'in':1},'characteristic':{'style':1,'set':1,'fossils':2,'pelagic':2,'of':4,'endeavour':1,'.':1,'contingencies--the':1,'sharp':1,'self-preservative':1,'bird':1,'population':1},'seize':{'the':1},'117':{'photo':1,'ten-armed':1},'stalking':{'about':1,'we':1,'carnivore':1},'homo':{'neanderthalensis':1,'sapiens':1,'heidelbergensis':1},'redistribution.':{'start':1},'etc.':{'are':1,'gives':1},'called':{'protists':1,'appropriately':1,'luidia':1,'nototrema':1,'negative.':1,'spring':1,'is':1,'labyrinthodonts':1,'chalones':1,'differentiation':1,'salps':1,'planets':1,'protozoa.':1,'obelia':2,'pontobdella':1,'helium':1,'zostera':1,'triticum':1,'viviparity':1,'peter':1,'informal':1,'positive':1,'educability.':1,'muellerian':1,'spiral':1,'peripatus':2,'aerial.':1,'their':1,'without':1,'pretty':1,'hormones':1,'lycosa':1,'energy':1,'red':1,'kelts':1,'we':1,'which':1,'convergences':1,'zoological':1,'glands':1,'the':23,'upon':1,'guanin':1,'learning':1,'phagocytes':1,'them':1,'amniota':1,'convergence':1,'batesian':1,'commensalism':1,'venus':1,'momentous':1,'a':5,'deeps':1,'into':1,'sun-spots':1,'chauliodus':1,'round':1,'cryptozoic':1,'physiological':1,'tropisms':2,'have':1,'were':1,'self-mutilation':1,'primitive':1,'cells':1,'experimental':1,'jasper':1},'x-ray':{'photograph':6,'spectra':1},'individuality':{':':1,'with':1},'freak':{'is':1},'sepia':{'from':2},'breast.':{'the':1},'problem.':{'1.f.4':1},'warning':{'colours':2,'note':1,'coloration':1},'reservoirs':{'of':1,'to':1},'trammels':{'of':1},'whirligig':{'beetle':2},'adams':{'10':1,'who':1},'knowledge.':{'astronomical':1},'rainbow':{'is':1,'.':1,'where':1,'in':1},'riot':{'in':1},'reason.':{'the':1,'sec':1,'what':1,'here':1},'tentative':{'men':3,'branches':1,'or':1,'experimental':1},'weight.':{'4':1},'endurance':{'patience':1},'peace':{'while':1,'or':1},'c.:':{'that':1},'reappearance':{'of':1},'club':{'can':1},'opalina':{'which':1},'income':{'.':2},'ferment':{'from':1},'intercrossing':{'or':1,'between':1},'generates':{'heat':2,'sufficient':1,'in':1},'backbone':{'and':1,'a':1,'of':1,'.':1,'which':1,'in':3,';':1},'problems':{'on':1,'that':1,'of':1,'but':1,'.':2,'which':1},'thirty-two':{'miles':1},'helping':{'to':1,'the':1},'develops':{'very':1,'into':1},'allowing':{'the':1,'elbow-room':1,'more':1},'-200':{'deg':1},'folds':{'its':1},'inventions':{'are':1},'vaseline':{'bottle':1},'fluorescence':{'on':1},'fan-like':{'cluster':1},'path.':{'there':1},'liquefy':{'air':1},'accumulations':{'of':1},'departments':{'of':1},'back.':{'the':1},'departs':{'209':1,'in':1},'appearance--an':{'epoch-making':1},'weights':{'or':1,'.':1},'well-being.':{'we':1},'hooky':{'surfaces':1,'that':1},'vue':{'gardens':1},'resistance':{'to':1,'.':1},'distributed:':{'this':1},'protuberant':{'the':1},'winds':{'rise':1,'from':1,'two':1},'open-minded.':{'the':1},'adjustment':{'to':1,'of':1},'contributions':{'and':1,'to':1,'from':3,'are':1},'magnifying':{'lens':1,'lens.':1},'tide-marks':{';':1},'copernicus':{'lower':1},'simon':{'newcomb':1},'e-mail':{'within':1},'disposal':{'however':1},'sparrow':{'to':1,'rise':1,'up':1},'deal.':{'the':1},'cradle':{'of':7,'whereas':1,'.':1,'in':1,'or':1,'is':1},'stable':{'kind':1,'lines':1,'crust':1,'.':1,'result':1,'curved':1,'stock':1,'equilibrium':1},'breach':{'of':2},'include':{'a':1,'all':1,'whales':1,'many':2,'one':1,'those':2,'the':2,'mediterraneans':1},'breathing':{'dry':1,'of':1,'by':2,'which':1,'movements':2},'wished':{'to':1},'wind.':{'in':1},'club-moss':{'forests':3},'talons':{'and':1},'alder':{'and':1},'sensation':{'of':4},'electron':{'and':3,'sir':1,'has':1,'theory':3,'theory--the':1,'is':4,'current':3,'when':1,'as':1,'.':2,'rotating':1,'to':2,'pump':1,'physicists':1,'in':1,';':1,':':1,'was':1,'merely':1,'sticks':1},'graphic':{'illustration':1},'dando':{'baby':1},'bounding':{'about':1},'posture':{'with':1},'redistribute':{'this':1},'ideas--the':{'living':1},'self-effacement':{'is':1,'often':1,'but':1},'fur':{'and':1,'of':2,'or':1},'notes':{'with':1},'phenomena.':{'sec':1},'agency.':{'yellow-crowned':1,'chimpanzee':1,'orang-utan':1,'penguins':1,'in':1,'baby':2},'deals':{'with':1,'.':1},'glaciations':{'and':1},'warranties':{'of':2,'or':1},'poisonous':{'snake':2,'species':1},'phoenix':{'electric':1},'moulding':{'effect':1},'blood-fluid':{'or':1},'noted':{'for':1,'that':4},'assemblage':{'of':2},'disclaimer':{'of':1,'or':2},'smaller':{'even':1,'and':1,'telescope':2,'cheek-bones':1,'constituents':1,'less':1,'.':1,'particles':2,'will':1,'electrons':1,'have':1,'globes':1,'magellanic':1,'particles.':1,'than':8},'gripping':{'grappling':1,'the':1,'them':1,'teeth':1},'possum.':{'the':1},'tides--another':{'instance':1},'coldrum':{'in':1},'euphrates':{'.':1},'chauliodus':{'a':1},'fold':{'of':3},'sea-anemones':{'and':1,'147':1,'we':1,'which':1,'on':2,'mask':1,'hermit-crabs':1,'they':1},'unsurpassed.':{'to':1},'protrude':{'greatly':1},'sifting-out':{'process':1},'fermenting':{'vegetation':1},'makers':{'of':1},'folk':{'or':1,'place':2,'two':1,'human':1,'in':1},'unavailable':{'the':1,'.':3,'heat':1,'energy':1,'having':1},'disentangle':{'these':1},'waiting':{'for':1},'chose':{'a':1,'compartment':2},'desires':{'.':1},'kangaroo':{'while':1,'carrying':2},'underwood':{'underwood.':2},'youngest':{'and':1,'.':1},'desired':{'.':1},'grilse.':{'in':1},'separation':{'of':2},'frilled':{'lizard':3,'lips':2},'fifteen-spined':{'stickleback':1},'--carrying':{'with':1},'fruit-eating':{'and':1},'little-brained':{'ants':1},'settling':{'on':1},'evolution--the':{'establishment':1},'survivor':{'of':1},'convolutions.':{'illustration':1},'mauer':{'near':2,'at':1},'ones.':{'various':1},'leaving':{'a':1,'no':2,'perhaps':1,'only':1,'the':2,'its':1},'suggests':{'the':3,'that':2,'motions':1,'.':1},'patagium':{'and':1,'is':1},'oar':{'reduces':1},'breeds':{'of':2,'it':1,'that':1},'hue':{'and':1,'is':1},'pent-up':{'reservoirs':1},'apple':{'.':1},'spy':{'in':1},'egypt':{'and':1,'crete':1,'the':1},'earth-moon':{'system.':1},'facilitating':{'their':1},'apt':{'to':9},'expect':{'great':1,'that':1,'very':1,'there':1,'it':1,'to':2,'much':1},'marmosets':{'and':2},'motor':{'nerve-fibre':2,'nerve-cell.':1,'nerve-cell':1,'nerve-fibres':1,'nerve-cells':2,'answer':1},'newby':{'chief':1},'apply':{'to':1},'repopulation':{'of':1},'segregating':{'their':1},'use':{'and':3,'some':1,'it':1,'at':1,'in':1,'its':1,'for':2,'to':3,'there':1,'when':1,'.':2,'their':2,'has':1,'was':1,'them':1,'unless':1,'very':1,'but':1,'part':1,'a':3,'this':3,'of':14,'carbonic':1,'the':5,'seaweed':1},'fee':{'of':1,'is':1,'as':1,'for':3,'or':2},'from':{'all':3,'being':7,'tip':2,'worms':3,'ignoble':1,'facts':1,'japan':1,'inshore':1,'its':16,'roots':2,'mingling':1,'outer':1,'electricity':1,'masses':1,'behind':1,'forms':1,'to':1,'crest':4,'photographs':2,'donors':1,'them':2,'his':1,'branch':1,'10':2,'very':1,'freezing':1,'within.':1,'five':1,'trough':1,'now':1,'monkeys':1,'sowing':1,'benevolent':1,'hawaii':1,'these':4,'slipping':1,'each':9,'where':1,'side':6,'view':1,'people':1,'generation':2,'intelligence':2,'fish':2,'some':3,'direct':1,'dead':1,'gumboil':1,'year':1,'our':4,'dawn':1,'what':3,'colour-varieties':1,'sun':1,'nebula':1,'asia':1,'your':1,'particles':1,'outside':2,'expressing':1,'public':1,'red':1,'scientific':6,'insects':1,'men':1,'seaweeds':1,'water':5,'protection':1,'great':1,'struggle':1,'others':1,'simpler':1,'both':1,'about':2,'actual':1,'experience':1,'stone':1,'railway':1,'osborn':4,'pre-human':1,'first':2,'among':1,'simple':2,'within':4,'inland':1,'one':23,'pole':2,'learning':1,'ether':1,'cloud':1,'millions':1,'ancient':1,'her':1,'body-cells.':1,'remains':2,'pre-existing':1,'three':2,'sunlight':2,'.':1,'uniting':1,'behind.':1,'which':12,'white':1,'injury':1,'specimens':1,'radium':6,'500':1,'gill-breathing':1,'elsewhere':1,'that':2,'mammals':2,'malay':1,'heat':1,'part':1,'another.':1,'body-cells':1,'atom':4,'infusorians':1,'knife-blade-like':2,'those':1,'fossil':1,'sponge':1,'animals':2,'this':7,'tree':3,'us':3,'air':2,'below':1,'diagrams':1,'more':1,'and':1,'egypt':1,'mexico':2,'certain':1,'modern':1,'india':3,'it':2,'an':2,'states':1,'collision':1,'something':3,'any':6,'sir':1,'different':1,'ancestors':1,'end':1,'negatively-electrified':1,'scotland':1,'innumerable':1,'other':5,'5':2,'copying':1,'ordinary':1,'several':1,'enormous':1,'star':1,'glands':1,'time':3,'hand':1,'eight':1,'two':2,'nothing':1,'such':3,'types':1,'man':2,'a':37,'ingersoll':2,'land':2,'natural':1,'age':3,'their':7,'without':5,'knipe':6,'not-living':2,'every':1,'the':256,'europe.':1},'figure':{'of':1,'is':2,'one':1,'2':1,'ninety-two':1,'in':1,'.':1},'animals--by':{'insects':1},'frog':{'about':1,'showed':1,'discriminates':1,'flying':1,'had':1,'catches':1,'answers':1,'192':1,'1':1,'s':1,'rhacophorus':1,'which':1,'rhinoderma':1,'the':1,'mouth.':1,'merged':1,'lays':1},'few':{'and':1,'insects':1,'years':1,'feet':2,'spiders':1,'protozoa':1,'offspring':1,'lessons':1,'things':3,'ticks':1,'opportunities':1,'astronomers':3,'rivals':1,'other':1,'black':1,'weeks':1,'hundred':2,'minor':1,'inches':1,'that':1,'thousand':1,'days.':1,'records':1,'representative':1,'yards':1,'cases':3,'now':1,'extremely':1,'conspicuous':1,'pounds':1,'of':3,'months':1,'days':4,'cases.':1,'corners':1,'exceptions':1,'minutes':1,'embryonic':1,'illustrations.':1},'apprenticeship--tentative':{'men--primitive':1},'gales':{'will':1},'diving-bell':{'to':1,'full':1},'eagles':{'gather':1},'possession':{'of':2},'grandest':{'and':1,'pictures':1,'as':1},'secretions':{'of':1},'humanly':{'impossible':1},'inclined':{'to':1,'pillar':1,'plane':6,'plane.':1},'rarest':{'type':1},'impress':{'him':1},'steadfastly':{'serving':1},'eagles.':{'similarly':1},'hilger':{'ltd.':2},'rabbit':{'and':1,'squirrel':1,'for':1,'when':1,'.':1,'which':1,'the':1},'scale.':{'sec':1,'if':1},'development--that':{'there':1},'women':{'show':1},'fro.':{'this':1},'us.':{'this':1,'the':1,'races':1,'sec':1},'getting':{'a':1,'on':4,'what':1,'thinner':1,'hotter':1,'into':3,'air':1,'possession':1,'farther':1,'wet':1,'rid':1,'out':1,'away':1,'transport':1,'at':1},'ice.':{'seeing':1},'overlappings':{'.':1},'anywhere':{'at':2,'else':1},'perched':{'on':1},'field--which':{'he':1},'three-chambered.':{'the':1},'dissolve':{'a':1,'the':1},'proof':{'of':12,'that':2},'have--there':{'is':1},'non-growing':{'non-moulting':1},'habitats':{'which':1},'proprietary':{'form':1},'mud-fish':{'protopterus':2},'thirsty':{'and':1},'calculation':{'suggests':1,'as':1,'ought':1},'inaccessible':{'to':1},'tax':{'returns':1,'deductible':1,'identification':1,'treatment':1,'exempt':2},'land-snails':{'representing':1,'for':1},'something':{'associated':1,'less':1,'is':1,'as':1,'beyond':1,'to':1,'which':1,'new':2,'has':1,'more':1,'corresponding':2,'that':3,'very':3,'new--a':1,'but':1,'else':1,'with':1,'simpler':1,'about':1,'like':6,'of':2,'could':1,'the':1},'serial':{'issue':1},'made':{'and':3,'among':1,'polished':1,'rudely':1,'it':5,'an':2,'visible':3,'incandescent':1,'in':6,'luminous':1,'their':1,'out':1,'perfect':1,'bridges':1,'till':1,'of.':1,'.':6,'1':1,'to':7,'pets':1,'man.':1,'lays':2,'do':1,'malaria':1,'that':2,'of':5,'possible':1,'but':1,'forbidding':1,'during':1,'with':1,'by':8,'a':5,'on':1,'great':1,'many':1,'clear':1,'no':1,'up':3,'large':1,'points':1,'so':2,'artificially':1,'january':2,'stone':1,'the':5,'more':1,'at':1},'sir':{'e.':1,'norman':3,'richard':1,'wm':1,'j':7,'william':8,'g':1,'arthur':7,'oliver':3,'w':3,'harry':1,'isaac':5,'ernest':6,'john':3,'george':1,'ray':4},'galls':{'on':1},'counting':{'the':1,'electrons':2},'decaying':{'vegetation--an':1,'leaves':1},'sit':{'on':1},'distinguishable':{'from':1},'justifiable':{'to':2},'past.':{'on':1,'one':1},'struggles':{'there':1,'upward':1},'moods':{'.':1},'fortunate':{'for':1},'brian':{'janes':2},'instead':{'of':8,'strong':1},'struggled':{'.':1},'substances--':{'phosphorescent':1},'tension':{'passes':1,'is':1,'grows':1},'cupboard':{'and':1},'attend':{'the':1,'too':1},'yolk-sac':{'y.s.':1},'slipher':{'of':1},'immersed':{'in':3},'masks':{'the':1},'tack':{'of':2,'however':1},'wrist':{';':1,'which':1},'understanded':{'of':1},'1887':{'michelson':1},'1885':{'another':1},'agglomerations':{'of':1},'superstitions':{'have':1},'are--measuring':{'them':1},'clauses.':{'experimentation':1},'inheritance':{'that':1,'of':1,'.':1,'which':2,'the':1,';':1},'interrupted':{'light':1},'polystomella':{'showing':2},'fortunately':{'fast':1},'ovipositor':{'inside':1},'locomotor':{'agility':1,'triumph':1,'activity':1},'summer.':{'there':1},'irregularity':{'in':1},'preparing':{'our':1,'the':2},'affection.':{'the':1},'spreads':{'sleeping':1,'out':1},'saturated':{'southwards':1},'farming':{'or':1},'minnow':{'and':1,'to':1,'could':1},'mentioned.':{'this':1,'illustration':1},'reptile':{'and':1,'from':1,'breathes':1,'but':1,'total':1,'95':1,'94':1,'at':1},'interpreted':{'to':1,'as':1},'whilst':{'its':1,'an':1},'mathematicians':{'upon':1},'130':{'000':1,'steps':1},'idiosyncrasies':{'crop':1,'.':1},'looks':{'a':1,'like':3,'less':1,'almost':1,'big':1,'after':1,'extraordinarily':1,'.':1,'as':4},'135':{'animal':1},'abstruse':{'speculations':1},'interpreter':{'.':1},'139':{'photo':1},'138':{'the':1,'protective':1},'ease.':{'more':1},'self-fertilisation':{'because':1},'primordial':{'substance':2},'choose':{'to':1},'orange':{'screen':1,'yellow':2},'clusters':{'of':1,'at':1},'receptacles':{'or':1},'forty-five':{'seconds':1,'degrees':1},'crowds':{'of':3},'refracting':{'telescope':3},'originator':{'of':2},'bumbling':{'bittern':1},'forty-one':{'years':1},'orthodox':{'head-on':1},'practice':{'however':1,'or':1},'flew':{'away':1,'round':1,'22':1},'impressing':{'other':1,'itself':1},'emerald':{'hue.':1},'satellites':{'of':3,'miles':1,'like':1},'attaining':{'a':1,'to':1,'various':1,'that':1},'successor':{'rather':1},'viscid':{'threads':2},'articles':{'will':1,'with':1,'are':1},'crumb-of-bread':{'sponge':1},'sleeve':{'.':1},'movements.':{'this':1},'profound':{'idea':1,'abysses':1,'practical':1,'.':1,'calm':1,'moulding':1},'tram':{'or':1},'seashore.':{'illustration':1},'transmitted':{'through':2,'.':1},'trap':{'formed':1,'.':1},'cocoon':{'flies':1,'when':1},'bills':{'and':1,'up':1,'upwards':2},'erratic':{'quantities':1,'scattered':1,'paths':1},'foot-print--an':{'eloquent':1},'fitting':{'their':1},'old-established':{'creature':1},'related':{'to':11,'half-monkeys':1,'fish':1,'which':1},'whitish':{'spots':1},'remove':{'the':1},'82':{'peripatus':1},'83':{'photo':1,'photograph':1},'80':{'per':1},'86':{'photo':1,'an':1},'87':{'animals':1},'ebooks':{'and':1,'unless':1,'.':1,'are':1,'in':1,'with':1},'respects':{'a':2,'very':1,'like':1},'loquacious':{'bird.':1},'cerebral':{'hemispheres':1,'advances':1},'blood-channels':{'and':1},'flattening':{'of':1},'exporting':{'a':1},'20.--comet':{'october':1},'carpo-metacarpus':{'bone':1},'supports':{'them':1},'dive':{'far':1,'neither':1},'despairing':{'of':1},'fun':{'but':1},'zoological':{'gardens.':1,'races':1,'park':1,'haunt':1,'park.':10},'pours':{'out':2},'mussels.':{'the':1},'maintains':{'that':1},'promptly':{'discovered':1},'york':{'and':1,'zoological':10},'waves--light--what':{'the':1},'obliteration':{'.':1},'tenant':{'.':1},'support.':{'project':1},'age-old':{'mystery':1},'weaves':{'its':1},'organic':{'evolution':9,'evolution.':3,'matter':1,'nature':1,'particles':1,'evolution--there':1,'dust':1},'g':{'notice':1,'.':10,'in':1},'musculature':{'integumentary':1},'curlews':{'both':1},'behaviour.':{'a':2,'evolution':1,'illustration':1,'comparing':1,'sec':1,'in':1,'the':2},'chisel-edged':{'teeth':1},'hence':{'a':1,'fall':1,'it':1,'appendicitis':1,'in':1,'the':2,'if':1},'pterosaurs':{'none':1},'californian':{'coast.':1},'incipient':{'race':1,'species':1},'embryo':{'-reptile':1,'there':2,'no':1,'-mammal':1,'is':2,'within':1,'.':3,'while':1,'of':2,'the':1,'has':1,'with':1,'-fish':1,'shows':1},'plainly':{'this':1,'how':1,'that':1},'arcturus':{'43.4':1},'pycraft':{'w':1},'echo':{'of':1},'bonnet':{'monkey':2},'foals':{'and':1,'to':1},'eleventh':{'printing':1,'moon':1},'placental':{'mammals':1},'representations':{'concerning':1},'imperial':{'war':4},'miles--in':{'itself':1},'dispersive':{'effect':1},'salient':{'aspects':1,'features':1,'examples':1},'droop':{'forward':1},'unknown':{'on':1,'gas':1,'but':1,'.':3,'to':1,'manner':1,'in':1,'until':1},'galley':{'hill':1,'.':1},'retreats':{'and':1},'their':{'distances':1,'interpretation':1,'perch':1,'orbits.':1,'boxed-in':1,'brain':1,'attempts':1,'relation':1,'salivary':1,'upturned':1,'speed':3,'lessons':2,'birthplace':2,'doom':1,'resemblance':1,'progeny':1,'masses':1,'possessors':2,'young':6,'opportunities':1,'wings':1,'environment':2,'surroundings':3,'neighbours':1,'bases':1,'parents':2,'marks':1,'resources':1,'appearance--an':1,'borrowed':1,'clutches':1,'fate':1,'distance':1,'food':4,'advances':1,'moons':1,'early':1,'smallness':1,'background':1,'hands':1,'slipperiness':1,'height':1,'day':1,'condition':1,'evolution':1,'success':1,'parrot':1,'course':1,'crops':1,'luminosity':2,'length.':1,'back-teeth':1,'activity':1,'distant':1,'bills':4,'soft':1,'breast-bone':1,'bond':1,'dwindled':1,'burrows':1,'old':1,'mental':1,'weight':1,'life-history':2,'appearance':1,'energy':3,'range.':1,'sifting':1,'relative':2,'rate':1,'individual':1,'year':1,'development':2,'foals':1,'enemies':3,'living':1,'constitution':1,'axes':1,'interference':1,'migrations':2,'artificial':1,'fellows':1,'colours':1,'wave-lengths.':1,'simplest':1,'approach':1,'bearers':1,'scaly':1,'body':2,'variability':1,'toes':1,'transparency':1,'power':3,'importance':1,'argument':1,'kindred':3,'limbs':1,'atoms':2,'behaviour':1,'host':1,'chances':1,'outlying':2,'substance':1,'allies':1,'brilliant':1,'dormancy':1,'insect':3,'discoveries':1,'motion':1,'turn':1,'length':2,'head':1,'youthful':1,'first':1,'origin':2,'golden':3,'own':9,'gizzard--certainly':1,'family':1,'presence':1,'reasons':1,'father':1,'bluish':1,'multiplication':1,'enlarged':1,'names':1,'passage':2,'size':1,'decline':1,'use':1,'palm-bones':1,'chisel-edged':1,'muddy':1,'destination':1,'secret':1,'thinnest':1,'prey':1,'predecessors':1,'way':7,'fixed':2,'repertory':1,'more':2,'function':1,'hue':1,'eyes':1,'tissues':1,'yolk-forming':1,'wits':2,'brains':1,'becoming':1,'back':1,'heat':2,'importance.':1,'lives':1,'adult':1,'impulse':1,'ring-armour.':1,'insect-visitors':1,'homes':1,'characteristic':1,'cells':3,'detachable':1,'ancestral':1,'lips':1,'vocal':1,'temperatures':1,'reproduction':1,'light':3,'photosynthesis':1,'remains':1,'parents.':1,'real':1,'furs':1,'modern':1,'mind':1,'discovery':2,'deep':1,'manner':1,'lifetime':1,'movements':2,'respective':1,'ancestors':1,'variety':1,'lengths':1,'ascent':1,'maximum':1,'arrangement':1,'pectoral':1,'field':1,'relatives':3,'numerous':1,'income':2,'tool':1,'contemporaries':1,'worldwide':1,'polar':1,'material':1,'cupboard':1,'mouths':1,'normal':1,'nest':1,'reach':1,'orbits':1,'counterparts':3,'visitors':1,'significance.':1,'strength':1,'mouth':1,'delicate':1,'ink-bags':2,'hair':1,'foothold':2,'coloration':1,'natural':1,'modes':1,'pigmy':1,'nostrils':1,'eggs':5,'life':3,'posterior':1,'incessant':1,'castings':1,'manipulative':1,'tentacles':1,'smooth':1,'mother':2,'reward':1,'wing':1,'bodies':3,'usual':1},'1500':{'west':1},'delusions':{'yet':1},'behind.':{'there':1,'illustration':1},'embryology':{'--these':1,'of':1},'unstereotyped':{'they':1},'invisibility':{'and':1,'may':1,'coloured':1,'does':1,'at':1,'.':1},'noteworthy.':{'penguins':1},'shell':{'and':3,'very':1,'of':11,'is':4,'tends':1,'against':1,'.':2,'were':1,'in':3,'not':1,'with':1,'or':1},'x-rays':{'and':2,'we':1,'ltd.':4,'were':1,'.':2,'discovered':1,'have':1,'so':1,'are':1,'they':1,'which':3,'not':1,'through':2,';':1},'bromogelatine':{'plates':1},'shelf':{'fringing':1,'around':1},'shallow':{'and':1,'there':1,'well-illumined':1,'.':1,'water':5,'trough':1,'water.':2,'pond':1,'areas':1},'reflecting':{'instrument':1,'telescope--the':1,'telescope':1,'others':1},'constituent':{'colours':1,'of':1,'element':1},'july':{'17':2},'reverses':{'its':1},'blind':{'flat-fish':1,'alley':1,'gut':2},'dynamical':{'principle':1},'succeeded':{'and':1,'sir':1,'or':1,'.':1,'every':1,'in':3,'by':1},'uninterested':{'to':1},'isolation':{'of':1,'from':1,'which':1},'richer':{'evolution':1},'instincts--of':{'insects':1},'dynamo':{'as':1,'does':1,'it':1,'which':1},'individualities':{'arise':1},'dusty':{'the':1},'varied.':{'a':1},'tracts':{'of':1},'safeguarded':{'the':1},'violets':{'would':1},'fowl':{';':1},'gate-posts':{'and':1,'green':1},'sifting.':{'but':1},'endeavour.':{'sec':1,'in':1},'mongolian':{'and':1},'germinal':{'changefulness':1,'variations':1},'siamang':{'.':1},'reaches':{'a':5,'on':1,'of':3,'it':1,'us':1,'which':1,'in':1,'such':1,'the':2,'its':3},'angle':{'and':1,'on':1,'to':2,'.':1},'pollen-tubes':{'grow':1},'agency':{'could':1},'olfactory':{'messages':1},'supplanted':{'by':1},'well-marked':{'chins':1,'breeds':1},'ungirt':{'loin':1},'which':{'all':9,'belong':2,'help':1,'just':1,'produces':2,'captures':1,'probe':1,'vary':1,'gulls':1,'leads':3,'stored':1,'thanks':1,'go':3,'still':1,'birds':1,'causes':4,'seemed':2,'bridges':1,'rapid':1,'depend':1,'had':6,'came':1,'actually':1,'forms':5,'simple':1,'only':1,'behave':1,'extends':2,'helps':1,'sulked':1,'under':1,'attained':2,'covered':1,'circle':1,'has':43,'alter':1,'happened':1,'grip':1,'eventually':1,'his':2,'means':3,'food':2,'breaks':1,'tends':1,'lurk':1,'floated':1,'confines':1,'feels':2,'cannot':5,'nearly':2,'they':19,'progress':1,'not':1,'during':1,'he':7,'now':2,'dr':1,'monkeys':1,'look':1,'indicate':2,'like':1,'did':1,'always':2,'generally':1,'modern':2,'make':4,'admitted':1,'travels':2,'this':5,'persisted':1,'she':1,'turns':1,'become':2,'speculation':1,'freshwater':1,'mount':1,'reaches':1,'often':1,'reference':1,'people':1,'sends':1,'ancestral':1,'some':4,'supplies':1,'recapitulate':1,'constitute':2,'individual':1,'lines':1,'are':66,'pass':1,'our':1,'kant':1,'parachuting':1,'even':1,'delivered':1,'plays':1,'opened':1,'lead':1,'constitutes':2,'rings':1,'its':1,'everything':1,'contained':1,'experiment':1,'huxley':1,'scientists':1,'probably':4,'learned':1,'dilutes':1,'roentgen':1,'can':2,'we':52,'led':4,'nature':2,'climbs':1,'never':2,'atoms':1,'water':2,'credits':1,'were':12,'sink':1,'lasts':1,'put':1,'from':1,'puzzled':1,'come':1,'by':5,'about':1,'enables':2,'rests':1,'deals':1,'could':4,'strikes':1,'contract':1,'mixes':1,'carries':2,'became':1,'stand':1,'professor':1,'swing':1,'usually':1,'disappears':1,'stimulate':1,'comes':1,'feed':2,'emerge':1,'radio-activity':1,'followed':1,'secure':3,'formerly':1,'supply':1,'suddenly':1,'seems':1,'habitual':1,'marked':2,'one':1,'brought':1,'lies':2,'spans':1,'comprises':1,'whalebone':1,'mark':1,'appeared':1,'presents':1,'differ':1,'light':1,'expresses':1,'takes':1,'would':8,'to':3,'there':11,'finally':1,'periodically':1,'rivals':1,'live':4,'spread':3,'slowly':1,'living':1,'grew':2,'was':18,'opens':1,'gives':1,'life':1,'enable':1,'arise':1,'molecules':1,'form':1,'afford':1,'becomes':1,'marks':1,'amphibians':1,'broke':1,'separates':2,'absorbs':1,'almost':1,'reverses':1,'must':4,'plants':2,'pull':1,'made':1,'animals':2,'unfortunately':1,'these':3,'prevents':1,'require':1,'work':1,'lessen':1,'will':7,'attacks':1,'remain':1,'lays':1,'many':1,'already':1,'meet':1,'circulate':1,'dr.':1,'hatch':1,'have':22,'bind':1,'give':3,'frogs':1,'again':1,'is':61,'occupies':1,'thus':1,'it':22,'eats':1,'helped':1,'case':1,'as':3,'lived':1,'protects':1,'at':2,'slip':1,'allowed':1,'regulate':1,'pit':1,'counteract':1,'granules':2,'lie':1,'date':1,'no':4,'suggest':1,'began':2,'holds':1,'when':2,'astronomers':2,'very':1,'take':4,'forces':1,'brings':1,'new':1,'you':2,'grows':1,'neolithic':1,'formed':2,'conveys':1,'attend':1,'though':1,'may':16,'dive':1,'faintly':1,'paid':1,'reflect':1,'most':1,'fell':2,'tackle':1,'two':1,'multiply':1,'infects':1,'grow':1,'man':8,'a':8,'demand':1,'land':2,'in':7,'i':2,'makes':7,'arrange':1,'mask':1,'lasted':1,'thought':1,'used':1,'eurypterids':1,'allow':1,'keeps':1,'masks':1,'the':57,'justify':1,'blend':1,'responded':1,'migrate':1,'once':1},'tree-frogs':{'are':2,'called':1},'spawns':{'in':1},'divers':{'come':1},'vegetation':{'marking':1,'that':1,'of':1,'only':1,'in':1,'probably':1,';':1,'lingering':1,'consisted':1},'hydrostatica':{'related':2},'centre':{'and':4,'of':4,'.':2,'to':1,'only':2,'at':1,'in':1,'or':1},'wind-blown':{'sand':1},'who':{'show':1,'is':3,'soon':1,'anticipating':1,'have':4,'estimated':1,'are':5,'intrude':1,'said':1,'described':1,'had':2,'does':1,'has':1,'lacks':1,'do':1,'knows':1,'found':1,'may':1,'came':1,'gnaw':1,'lives':1,'learns':1,'approach':1,'believe':1,'with':1,'by':2,'concentrated':1,'made':4,'to-day':1,'like':1,'was':1,'think':1,'will':1,'maintain':1,'can':1,'mounts':1,'desire':1,'agree':1,'restored':1,'notifies':1},'cohesion':{'of':1,'between':1},'1.d':{'.':1},'1.e':{'below.':1,'.':1},'microbic':{'or':1},'digestive':{'and':1,'filaments':1,'juice.':1},'1.a':{'.':1},'1.b':{'.':1},'1.c':{'below':1,'.':1},'emancipation':{'of':3,'from':1},'violet.':{'sorting':1},'class':{'a':1,'of':5,'we':1},'deny':{'a':1},'expert':{'opinion':1,'advice':1},'deccan':{'the':1},'wasp-like':{'impression':2},'.001':{'per':1},'pipe':{'to':1,'.':1},'different-lengthed':{'waves':1},'cloaked':{'by':1},'europe.':{'it':1,'illustration':1},'swarming':{'in':1},'goals':{'and':1},'unimpeded':{'five':1},'refund':{'set':1,'from':1,'of':3,'-':1,'.':2,'in':1,'described':1},'terrific':{'cold':1},'insulators':{'because':1,'for':1},'perceptions':{'and':1},'chances':{'of':1,'are':1},'sceptical':{'about':1},'agreed':{'to':1},'tidings':{'from':1},'chapters':{'of':1},'upright':{'forehead':1,'on':1,'nail':1},'purely':{'instinctive':2},'sabre-toothed':{'tiger':1},'seaweed':{'and':3,'for':1,'area':1,'of':1,'nest':1,'continues':1,'but':1,'.':1,'green':1,'nibbles':1,'each':1,'vegetation.':1,'or':1},'changeful':{'surroundings':1,'processes':1,'place':1},'utter':{'darkness--an':1,'sufficient':1,'darkness':1},'fear':{'of':2},'darkest':{'period':1},'feat':{'which':1},'agrees':{'in':1},'nearer':{'a':1,'and':1,'an':1,'to':3,'the':3,'.':1,'than':1},'cave-bear':{'became':1,'cave-lion':1},'implying':{'initiative':1},'cache':{'of':1,'after':1},'gouging':{'out':1},'surroundings':{'on':1,';':1,'like':2,'these':1,'many':1,'.':4,'admits':1,'their':1,'without':1,'including':1,'lighter':1,'in':1,'not':1,'the':4,'rests':1,'must':1},'postulated':{'by':1},'herald':{'the':1,'its':1},'inhabit':{'the':1},'local':{'influence':1,'drying':1,'changes':1,'thickness':1},'combe':{'capelle':1},'snow-capped':{'mountains':1},'dexterities':{'which':1},'helios':{'the':1},'cube':{'of':1},'skims':{'from':1},'watching':{'those':1,'in':1},'d.p.':{'it':1},'displayed':{'performed':1},'primeval.':{'the':1},'intensely':{'hot':1},'words':{'all':1,'as':1,'are':2,'what':1,'to':1,'true':1,'there':2,'.':1,'also':1,'written':1,'meant':1,'we':1,'signifying':1,'but':2,'indicative':1,'such':1,'with':1,'monkeys':1,'animals':1,'of':2,'became':1,'can':1,'positive':1,'become':1,'the':2,'or':1},'please.':{'it':1},'penetrate':{'everywhere':1,'the':1,'through':1},'spur':{'to':2},'burned':{'up':1},'ornithoscatoides':{'decipiens':1},'sweat':{'and':1},'prodigally':{'using':1},'belts':{'which':1},'monsters':{'1892':1},'insectivorous':{'and':1,'plant':1,'bats':1},'quaternary':{'at':1},'waterfalls':{'of':1},'sparrows':{'and':1,'to':1},'generations':{'reached':1,'afterwards--and':1,'yet':1,'to':1},'afterwards--and':{'suffering':1},'unison':{'with':1},'available':{'on':1,'.':1,'with':1,'for':1,'space':1},'ebb':{'of':1},'acquired':{'a':2,'an':1,'its':1,'dexterities':1},'monkeys--in':{'dogs':1},'distantly':{'related':1},'cross-fertilisation.':{'sec':1},'violet':{'then':1,'end':1,'light':1,'colour':1,'.':1,'will':1,'at':1,'the':1},'barrels':{'of':1},'this.':{'the':1},'responses':{';':1,'.':2},'closer':{'examination':1},'closes':{'with':1},'shore-frequenting':{'seals':1},'mentioned':{'that':1,'already.':1,'indicates':1,'part':1,'in':1,'the':1,'is':1},'monstrous':{'tortoise':1},'worship':{'and':1},'genius':{'a':1,'of':1,'.':1,'it':1,'than':1},'converted':{'almost':1,'into':1,'directly':1},'identification':{'number':1,'for':1},'colour-associations':{'.':1},'hebrides':{'southwards':1},'crude':{'flint':1},'limit':{'these':1,'to':1,'the':1,'.':1},'variability':{'on':1,'is':1,'.':1,'to':1,'along':1,';':1},'andromeda':{'messier':2},'ability':{'to':2,'.':1},'opening':{'and':1,'fir':1,'up':1,'to':1,'new':1,'the':2,'more':1},'joy':{'and':1,'.':1},'agencies':{'operating':1,'for':1,'.':1},'podargus':{'a':1,'190':1},'apes':{'and':6,'both':1,'from':1,'show':1,'though':1,'but':1,'.':3,'also':1,'as':2,'diverged':1,'can':1,'165':1,'monkeys':1},'hypothesis':{'that':1,'may':1,'.':3,'therefore':1,'which':1,'one':1,'apart':1},'probing':{'and':1,'its':1},'rhythm.':{'illustration':1},'air-bubble--air':{'entangled':1},'swift':{'stroke':1,'hardly':1,'runners':1,'stream':1},'commands':{'our':1,'such':1},'cliff.':{'energy':1},'acknowledge':{'as':2},'mentone':{'on':1},'grouse':{'and':2,'disease':2,'or':1},'april':{'1922':4},'grain':{'of':8,'contains':1,'planted':1,'.':1},'utilising':{'dry':1},'retrograde':{'direction':1},'canopy':{'over':1},'germ-cells':{'and':1,'do':1,'that':1,'perhaps':1,'is':1,'but':1,'are':1,'have':1,'has':1,'into':1},'mutating':{'mood.':1},'wall':{'of':7,'shown':1,'.':1},'wonder':{'of':2,'then':1},'walk':{'with':2},'walt':{'whitman':1},'subscribe':{'to':1},'heredity':{'is':1,'which':1},'stars--to':{'star':1},'animalcule':{'often':1,'is':1,'which':1,'the':1,'has':1,'or':1},'table':{'suggests':1,'colliding':1,'page':1,'.':2},'investigator':{'noted':1},'mesozoic':{'and':1,'is':1,'era':6,'three':1,'times':1},'provinces':{'and':1},'i.e.':{'eating':1},'cavities':{'in':1},'hunters':{'and':2,'fowlers':1},'trademark':{'and':2,'license':1,'copyright':1,'but':1,'.':3,'as':1,'owner':2},'window':{'.':1},'responds':{'to':1},'ant-eaters':{'lay':1},'reindeer':{'and':2,'wild':1,'men':1,'man':1},'cry':{'uttered':1,'for':1,'.':2},'735':{'years.':1},'bewildering':{'profusion':1},'twenty-nine':{'days':1},'conductors.':{'so':1},'remedies':{'for':1},'1.e.1.':{'1.e.7':1},'painted':{'on':1,'bison':1,'in':2},'sufficient':{'for':1,'supply':1,'of':1,'here':1,'to':6,'heat':1,'sounds':1,'quantity':1,'cause':1,'theoretical':1,'inducement':1,'if':1},'thrusting':{'their':2},'sub-aquatic':{'environment':1},'ensuring':{'that':1},'visible.':{'illustration':1},'present':{'features':1,'point':1,'is':4,'rate':1,'in':6,'our':1,'living':1,'unavailable':1,'when':1,'two':1,'.':2,'day.':1,'state':1,'form':2,'though':1,'after':1,'but':1,'standard':1,'purpose':1,'they':1,'trying':2,'with':1,'day':2,'stage':1,'whereby':1,'value':1,'time':1,'the':4},'inconspicuous':{'24':1,'among':2,'when':1,'against':2,'.':2,'as':1,'amidst':1,'in':2,'by':1},'interstices':{'they':1},'abandoned':{'by':1,'.':2},'unlike':{'the':2},'agreement.':{'illustration':1},'vanilla':{'ascii':2},'will':{'emerge':1,'learn':1,'deal':1,'supply':1,'almost':1,'cover':1,'pass':2,'replace':1,'say':1,'have':1,'measure':1,'radiate':1,'tend':3,'scent':1,'any':1,'select':1,'make':2,'again':1,'gradually':1,'detect':4,'proceed':1,'to':2,'prevail':1,'support':1,'show':1,'deal.':1,'.':1,'start':1,'finally':1,'suffocate':1,'take':2,'then':1,'hatch':1,'surprise':1,'confine':1,'cause':1,'tell':1,'dispute':1,'evolve':1,'notice':1,'enable':1,'return':1,'engender':1,'gnaw':1,'admit':1,'express':1,'stop':1,'rush':1,'bear':1,'intercept':1,'sink':1,'not':9,'last':1,'attract':1,'come':3,'throw':1,'summon':1,'knock':1,'do':3,'rotate':1,'give':2,'consist':1,'be':53,'science':1,'colour':1,'no':1,'liquefy':1,'spontaneously':1,'appear':1,'remain':2,'continue':2,'die':1,'become':1,'the':2,'tap.':1,'explain':1,'travel':1},'inequilibrium':{'results':1},'vastly':{'hotter':1,'greater':1,'more':3},'wild':{'plants':1,'horses':1,'life':1,'animals':1,'rock-dove':1,'nature':2,'mammals':1,'peoples':1,'dog':2,'.':1,'species':2,'wheat':1,'rabbit':1,'cattle':1,'boar':1,'life.':1,'fauna':1,'he':1,'or':2,'cabbage':1,'sheep':1},'2007':{'ebook':1},'tadpoles':{'of':1,'while':1,'are':1,'.':1},'layer':{'of':4,'is':1,'overpowering':1,'or':2,'.':2},'envelope.':{'thus':1},'zostera':{'form':1},'apprehend':{'the':1},'filaments':{'which':1,'in':1},'non':{'profit':1},'encouragement':{'to':1},'meteoritic':{'contributions':1},'life-forms':{'would':1},'perhaps':{'among':1,'all':1,'because':5,'stray':1,'is':2,'it':5,'an':3,'discovered':1,'are':1,'in':1,'25':4,'from':2,'to':1,'twenty':1,'sum':1,'there':2,'when':1,'next':1,'also':2,'too':1,'belong':1,'500':1,'we':1,'increased':1,'that':2,'300':1,'eight':1,'they':3,'100':2,'one':1,'beginning':1,'why':1,'a':6,'thirty':1,'this':2,'professor':1,'wild':1,'the':9,'came':1},'trailing':{'on':1},'cromagnard':{'representative':2,'in':1},'forceps':{'held':1,'the':1,'so':1,'.':1},'unite':{'with':1},'electro-magnetic':{'energy':1,'theory':1,'waves':2},'orionis':{'showing':1,'37':1},'unity':{'and':1,'of':1,'.':2,'at':1,';':1,'or':1},'exuberance':{'of':3},'geographical':{'barriers':1,'distribution':1},'largest':{'and':1,'in':1,'of':4,'flying':1,'refracting':1,'reflecting':1,'waves':1,'telescopes':2},'units':{'of':1,'the':1,'were':2,'or':1,'are':1},'gets':{'up':2,'worn':1,'will':1,'through':1,'the':1,'beyond':1,'its':2},'hammering':{'at':2},'firmament':{'is':1},'spirited':{'pictures':1},'elbows':{'.':1},'slave':{'of':1},'conceived':{'as':1},'overcrowded':{'or':1},'student':{'what':1,'but':1,'in':1},'vapour':{'layers':1,'shoot':1,'of':1,'to':1,'at':1,'out':1},'laborious':{'tasks':1},'collar':{'over':1,'round':1},'warming':{'the':1},'reached.':{'the':1},'banded':{'krait':3},'unpacked':{'the':1},'star-book':{'.':1},'electrified.':{'in':1},'spectator':{'after':1},'sound-waves':{'and':1},'undertaken':{'by':1},'realised':{'the':1,'in':2,'.':1},'tacchini':{'of':1},'heavily':{'armoured':1},'only.':{'3':1},'wren':{'.':1},'multitude':{'of':6},'obtain':{'a':3,'permission':2},'replenish':{'the':1},'batteries':{'of':1,'getting':1,'.':1},'fishing':{'farming':1},'rocked':{'from':1},'inturned':{'margin':1},'cuckoo-spit':{'147':1,'the':2,'on':1},'contractile':{'vacuole':1},'disturbance':{'around':2,'ceases':1,'being':1,'is':1,'which':1,'in':1,'such':1},'host.':{'illustration':1},'supply':{'will':1,'of':6,'the':4,'and':1,'our':1},'smith':{'woodward':1},'pitcher-plant':{'catching':1},'discuss':{'at':1},'book':{'and':1,'on':1,'of':2,'there':2,'it':1,'which':1,'the':1},'galloping':{'boar':2},'usage':{'spread':1,'had':1},'enacted':{'on':1},'unprecedented':{'development':1},'civilisation--coal':{'.':1},'knob':{'on':1},'wont':{'to':1},'diamond-like':{'eyes':1},'branch':{'and':4,'we':1,'after':1,'from':1,'of':3,'is':1,'within':1,'to':2,'at':1,'now':1,'or':1,'out':1},'community':{'at':1,'in':1},'facial':{'characteristics':1,'expressions':1,'expression':2},'denser':{'and':1,'along':1,'masses':1,'than':1},'press':{'professor':1,'copyright':1,'the':2,'agency.':7},'originative':{'stock':1},'feral':{'216':1,'it':1},'safest':{'coloration':1},'perpetual':{'unremitting':1},'loses':{'a':1,'weight.':1,'it':1,'least':1,'its':1},'colonising':{'of':1,'the':1},'vortex':{'may':1,'phenomena':1,'in':1},'james':{'ritchie':1,'s':8,'matter':1},'puzzle-boxes':{'and':2,'with':1},'smoothness':{'of':1},'herons':{'and':1,'storks':1},'exceed':{'20':1},'because':{'they':8,'mind':1,'it':7,'in':1,'sounds':1,'its':3,'to':1,'deeply':1,'there':1,'birds':1,'their':1,'many':2,'we':1,'some':2,'heat':2,'although':1,'he':2,'this':1,'light':1,'obviously':1,'of':8,'the':12},'ages--evolution':{'of':1},'vortices':{'or':1},'elevators':{'in':1},'scottish':{'history':1},'mosquitoes':{'which':2},'eventfulness':{'of':1},'flint-shelled':{'radiolarians':1},'116':{'a':1,'after':1},'113':{'the':1},'faraday':{'he':1},'119':{'sea-horse':1,'photo':1,'an':1},'118':{'greenland':1,'minute':1},'blood-vessel':{'nerve':1,'for':1},'gill-slits':{'of':1,'are':1},'lamprey--a':{'long':1},'leaf':{'and':1,'touches':1,'towards':1,'seventy-five':1,'is':1,'six':1,'when':1,'.':4,'near':1,'without':1,'in':2,'close':1,';':1,'before':1,'must':2},'lead':{'on':1,'has':2,'pencil':1,'these':1,'is':1,'us':3,'one':1,'.':3},'promotion':{'and':1},'high.':{'the':1},'mines':{'of':1},'philosopher':{'and':1,'professor':1},'instantaneous':{'abandonment':1},'arteries':{'of':1},'leap':{'and':2,'over':1,'due':1,'out':1},'glacial':{'climate':1,'time':1,'.':1},'repeopling':{'from':1},'trout':{'go':1,'we':1,'in':1,'or':1,'eluding':1},'locate':{'a':1},'obey':{'this':2,'an':1},'thoroughfare':{'for':1},'astounding':{'fact':2},'analysed':{'tons':1,'.':1,'in':1},'conveyed':{'by':1},'raise':{'a':1,'their':1,'the':2,'it':1},'rare':{'birds':1},'carried':{'to':2,'about':2,'by':3,'for':1,'back':1},'extension':{'of':2,'have':1},'unsurpassable':{';':1},'column':{'of':1},'universe':{'and':3,'transmitting':1,'is':13,'it':1,'an':1,'as':3,'sec':2,'are':1,'in':1,'even':1,'said':1,'opened':1,'remains':1,'tiny':1,'.':11,'how':1,'which':1,'has':1,'was':2,'comparable':1,'may':2,'why':1,'243':1,'than':1,'a':1,'of':1,'can':1,'were':2,'the':1,'or':1},'biscuit':{'from':1,'.':1},'eclipse.':{'this':1},'dependence':{'.':1},'urged':{'that':1},'sea-horse':{'is':1,'puts':2,'in':2},'carries':{'them':2,'many':1,'about':1,'in':1,'the':2,'its':1},'carrier':{'of':1,'pigeons':1,'pigeon':3},'places':{'on':2,'them':1,'for':1,'e.g':1,'of':2,'vary':1,'to':1,'have':1,'the':3,'where':1,'its':1},'wheats':{'.':1},'devouring':{'their':1,'potatoes':1},'warranty':{'or':1,'disclaimer':1},'splash':{'of':1},'own':{'and':3,'beautiful':1,'weight':2,'when':1,'mind':1,'invention':1,'in':1,'lambs':1,'.':7,'reward.':1,'before':1,'dispersive':1,'little':1,'sake':1,'distinctive':2,'definite':1,'system':2,'moon':1,'internal':1,'white':1,'was':1,'day':1,'then':1,'race':1,'that':1,'but':1,'atoms':1,'genealogical':1,'solar':2,';':1,'he':1,'kind':1,'enemies.':1,'planet':1,'circle':1},'polished':{'stones':1,'stone':2},'sugary':{'sap':2},'owe':{'to':3,'them':1,'it':1,'our':1},'habituations':{'and':1},'wearisome':{'reiteration':1},'promise':{'myriads':1,'that':1,'of':2,'is':1,'are':1,'considerable':1},'brush':{'and':1},'registration':{'of':3,';':1},'cell--a':{'fertilised':1},'to-morrow':{'might':1},'prompted':{'by':1,'reliance':1},'linnaeus':{'spoke':1},'van':{'was':1},'miles.':{'these':1},'transfer':{'energy':1,'her':1},'paperwork':{'and':1},'spiral':{'nebulae.':1,'facing':1,'nebulae':8,'nebula':11,'edge-on':1,'arms':2,'having':1,'arms.':1,'to':1,'than':1,'structure':1},'continental':{'islands':1,'masses':1,'elevation':1,'fish':1},'uniting':{'into':1,'with':1},'4.--the':{'great':1},'breeding':{'season':2,'only':1,'calls':1,'time':1},'phosphorus':{'is':1},'mouth.':{'everyone':1,'sec':1,'illustration':4},'limulus':{'may':1},'fundy':{'it':1},'dasypeltis':{'gets':1},'u.s.a.':{'this':1},'incursions':{'of':1},'volume':{'and':1},'larger':{'and':3,'animals':2,'particle':1,'variety':1,'rather':1,'of':1,'area':1,'parasite':1,'than':5,'supply':1,'in':1,'fifteen-spined':1,'.':1,'continent':1,'species':1},'counterparts':{'in':3},'millipedes':{'and':1},'shark-like':{'and':1},'tactics':{'of':1,'are':1},'instructive':{'case':1,'to':2,'because':1,'.':1},'whether':{'all':2,'gravitation':1,'hunting':1,'that':1,'these':1,'it':5,'bird':1,'we':1,'imitation':1,'they':1,'particular':1,'the':6,'astronomy':1,'similar':1,'or':1},'meeting':{'of':1,'the':1,'that':1},'fossilized':{'forests.':1},'moorhen':{'saw':1,'has':1,'dived':1,'in':1},'record':{'of':1,'is':1,'answers':1,'.':2,'how':1,'the':1,'tells':1},'below':{'and':1,'a':1,'this':1,'freezing-point.':1,'.':3,'their':1,'are':1,'freezing-point':1,'the':11},'graphite':{'similarly':1},'demonstrate':{'a':1},'percival':{'lowell':1,'lowell.':1},'arno':{'von':1},'stirring':{'times':1},'unfolding':{'of':1},'cynodonts':{'were':1},'roentgen.':{'discovery':1},'change-producing':{'factors':1},'--1':{'.':1},'pigment-cells':{'chromatophores':1,'change':1},'1781.9':{'84.02':1},'globules':{'of':1},'kind.':{'sec':1},'soft-shell':{'tortoise':1},'domesticated':{'sheep':1,'animals':7,'dog':2,'breeds':1,'type':1,'creature':1},'counteract':{'poisons':1},'limb':{';':1,'or':1},'mutual':{'benefit':1,'gravitation':1,'dependence':1,'assurance':1},'1898.':{'in':1},'incredible':{'refinement':1,'speed':1},'portion':{'consists':1,'of':5,'would':1},'other':{'all':1,'interpretation':1,'words':11,'four':1,'experiments':1,'facts':1,'birds':1,'causes':1,'chemical':1,'apes':2,'group':1,'shifts':1,'physiological':1,'interesting':1,'parts':1,'marsh':1,'main':1,'associations':1,'format':1,'inter-relations':1,'marked':1,'they':1,'new':2,'radio-active':1,'sensational':1,'worlds':1,'backboned':1,'sedimentary':1,'side':6,'investigators':2,'telescope.':1,'thinkers':1,'growths':1,'some':1,'mollusc':1,'sporadic':1,'bacteria':1,'creatures':3,'pigments':1,'organisms':1,'factors':1,'ways':3,'pictures':1,'heavenly':1,'got':1,';':3,'warranties':1,'body':1,'ends':1,'toes':1,'terms':1,'men':2,'atoms':3,'stellar':1,'objects':1,'by':1,'extreme':1,'digits':1,'great':1,'substance':1,'of':1,'haunts':1,'times':3,'thing':1,'s':1,'light--we':1,'host.':1,'useful':1,'features':1,'reasons':1,'intellectual':1,'highly':1,'fishes':1,'seashore':1,'protozoa':1,'sounds':1,'throughout':1,'persons.':1,'trifles':1,'sea-snail':2,'copies':1,'.':14,'way':4,'reptiles':1,'specimens':1,'direction':1,'senses':2,'spiral':1,'form':2,'substances':2,'mammals':7,'immediate':1,'known':1,'branches':1,'cases':9,'than':1,'circumstances':1,'animals':3,'liquid':1,'places':1,'work':2,'theories':1,'project':1,'wild':1,'stages':1,'colour':1,'and':1,'meant':1,'seven':1,'change-producing':1,'is':3,'experiments--indications':1,'it':1,'metals':2,'pieces':1,'medium':1,'universes.':1,'planets':3,'universes':1,'domesticated':1,'orders':1,'cotton':1,'end':2,'in':1,'things':1,'ideas':1,'species':1,'astronomers':2,'instance':1,'became':1,'animal':1,'party':1,'enemies':1,'intelligent':1,'creature':1,'kinds':2,'hand':9,'glimpses':1,'blood':1,'never':1,'authorities':1,'such':1,'acquisitions':1,'amoeboid':1,'modes':1,'consequences':1,'age':1,'obstacles':1,'lines':1,'shafts.':1,'fundamental':2,'mechanical':1,'the':1,'order':1,'bodies':2},'sunrise':{'the':1},'boon':{'to':1},'conclusion':{'we':1,'that':5,'is':2,'what':1,'to':1,'in':1},'supersaturated':{'vapour':1},'kinds':{'forms':1,'of':34,'neoceratodus':1,'with':1,'are':1},'june':{'1922':4},'inherently':{'liable':1},'4.29':{'vega':1},'--i':{'.':1},'supple':{'yet':1},'--a':{'sort':1,'quite':1},'opened':{'a':1,'cones':1,'up':1,'.':1,'with':1,'its':1},'association--why':{'is':1},'ranks':{'of':2},'half-second':{'that':1},'volumes':{'of':1,'g':1},'understand':{'them':1,'that':1,'very':1,'what':1,'why':2,'in':2,'not':1,'the':4,'now':1,'agree':1},'function.':{'interesting':1},'expands':{'as':1},'sun--the':{'surface':1,'planets':1},'sci.':{'volvox':1,'trypanosoma':1}} class Learner: def __init__(self): self.db={} def learn(self,text): replacements1={'[^a-zA-Z0-9\.;:\-]':' ', '\s+':' ',', ':' , ', '\. ':' . ', ': ':' : ','; ':' ; '} for key,value in replacements1.items(): text=re.sub(key,value,text) items=[item.lower() for item in text.split(' ')] for i in range(len(items)-1): item=items[i] nextitem=items[i+1] if not self.db.has_key(item): self.db[item]={} if not self.db[item].has_key(nextitem): self.db[item][nextitem]=1 else: self.db[item][nextitem]+=1 def save(self,filename): cPickle.dump(self.db,open(filename,'wb')) def load(self,filename): self.loadd(cPickle.load(open(filename,'rb'))) def loadd(self,db): self.db=db def generate(self,length=10000,prefix=False): replacements2={' ,':',', ' \.':'.\n', ' :':':', ' ;':';', '\n\s+':'\n' } keys=self.db.keys() key=keys[random.randint(0,len(keys)-1)] words=key words=words.capitalize() regex=re.compile('[a-z]+') for i in range(length): okey=key if not key in self.db: break # should not happen db=self.db[key] s=sum(db.values()) i=random.randint(0,s-1) for key,value in db.items(): if i0.5 elif field.type == 'date': record[fieldname] = \ datetime.date(2009,1,1) - \ datetime.timedelta(days=random.randint(0,365)) elif field.type == 'datetime': record[fieldname] = \ datetime.datetime(2009,1,1) - \ datetime.timedelta(days=random.randint(0,365)) elif field.type == 'time': h = random.randint(0,23) m = 15*random.randint(0,3) record[fieldname] = datetime.time(h,m,0) elif field.type == 'password': record[fieldname] = '' elif field.type == 'upload': record[fieldname] = None elif field.type=='integer' and hasattr(field.requires,'options'): options=field.requires.options(zero=False) if len(options)>0: record[fieldname] = options[random.randint(0,len(options)-1)][0] else: record[fieldname] = None elif field.type=='list:integer' and hasattr(field.requires,'options'): options=field.requires.options(zero=False) if len(options) > 0: vals = [] for i in range(0, random.randint(0,len(options)-1)/2): vals.append(options[random.randint(0,len(options)-1)][0]) record[fieldname] = vals elif field.type in ['integer','double'] or str(field.type).startswith('decimal'): try: record[fieldname] = random.randint(field.requires.minimum,field.requires.maximum-1) except: record[fieldname] = random.randint(0,1000) elif field.type[:10] == 'reference ': tablename = field.type[10:] if not tablename in ids: if table._db._dbname=='gql': ids[tablename] = [x.id for x in table._db(table._db[field.type[10:]].id>0).select()] else: ids[tablename] = [x.id for x in table._db(table._db[field.type[10:]].id>0).select()] n = len(ids[tablename]) if n: record[fieldname] = ids[tablename][random.randint(0,n-1)] else: record[fieldname] = 0 elif field.type[:15] == 'list:reference ': tablename = field.type[15:] if not tablename in ids: if table._db._dbname=='gql': ids[tablename] = [x.id for x in table._db(table._db[field.type[15:]].id>0).select()] else: ids[tablename] = [x.id for x in table._db(table._db[field.type[15:]].id>0).select()] n = len(ids[tablename]) if n: vals = [] for i in range(0, random.randint(0,n-1)/2): vals.append(ids[tablename][random.randint(0,n-1)]) record[fieldname] = vals else: record[fieldname] = 0 elif field.type=='list:string' and hasattr(field.requires,'options'): options=field.requires.options(zero=False) if len(options) > 0: vals = [] for i in range(0, random.randint(0,len(options)-1)/2): vals.append(options[random.randint(0,len(options)-1)][0]) record[fieldname] = vals elif field.type=='string' and hasattr(field.requires,'options'): options=field.requires.options(zero=False) record[fieldname] = options[random.randint(0,len(options)-1)][0] elif field.type=='string' and fieldname.find('url')>=0: record[fieldname] = 'http://%s.example.com' % da_du_ma(4) elif field.type=='string' and fieldname.find('email')>=0: record[fieldname] = '%s@example.com' % da_du_ma(4) elif field.type=='string' and fieldname.find('name')>=0: record[fieldname] = da_du_ma(4).capitalize() elif field.type=='string': record[fieldname] = ell.generate(10, prefix=False)[:field.length].replace('\n',' ') table.insert(**record) table._db.commit() if __name__ == '__main__': ell=Learner() ell.loadd(eval(IUP)) print ell.generate(1000,prefix=None) web2py-1.99.7.orig/gluon/contrib/google_wallet.py0000644000175000017500000000175211724764235020454 0ustar josejosefrom gluon import XML def button(merchant_id="123456789012345", products=[dict(name="shoes", quantity=1, price=23.5, currency='USD', description="running shoes black")]): t = '' list_products = '' for k,product in enumerate(products): for key,value in product.items(): list_products += t % dict(k=k+1,key=key,value=value) button = '%s' % (merchant_id, list_products, merchant_id) return XML(button) web2py-1.99.7.orig/gluon/contrib/AuthorizeNet.py0000755000175000017500000002446411724764235020261 0ustar josejose""" AIM class to credit card payment with authorize.net Fork of authnet code written by John Conde http://www.johnconde.net/blog/integrate-the-authorizenet-aim-api-with-python-3-2/ Unkown license, assuming public domain Modifed by Massimo Di Pierro - ported from Python 3.x run on Python 2.4+ - fixed a couple of bugs - merged with test so single file - namedtuple from http://code.activestate.com/recipes/500261/ """ __all__ = ['AIM'] from operator import itemgetter import urllib _known_tuple_types = {} class NamedTupleBase(tuple): """Base class for named tuples with the __new__ operator set, named tuples yielded by the namedtuple() function will subclass this and add properties.""" def __new__(cls, *args, **kws): """Create a new instance of this fielded tuple""" # May need to unpack named field values here if kws: values = list(args) + [None]*(len(cls._fields) - len(args)) fields = dict((val, idx) for idx, val in enumerate(cls._fields)) for kw, val in kws.iteritems(): assert kw in kws, "%r not in field list" % kw values[fields[kw]] = val args = tuple(values) return tuple.__new__(cls, args) def namedtuple(typename, fieldnames): """ >>> import namedtuples >>> tpl = namedtuples.namedtuple(['a', 'b', 'c']) >>> tpl(1, 2, 3) (1, 2, 3) >>> tpl(1, 2, 3).b 2 >>> tpl(c=1, a=2, b=3) (2, 3, 1) >>> tpl(c=1, a=2, b=3).b 3 >>> tpl(c='pads with nones') (None, None, 'pads with nones') >>> tpl(b='pads with nones') (None, 'pads with nones', None) >>> """ # Split up a string, some people do this if isinstance(fieldnames, basestring): fieldnames = fieldnames.replace(',', ' ').split() # Convert anything iterable that enumerates fields to a tuple now fieldname_tuple = tuple(str(field) for field in fieldnames) # See if we've cached this if fieldname_tuple in _known_tuple_types: return _known_tuple_types[fieldname_tuple] # Make the type new_tuple_type = type(typename, (NamedTupleBase,), {}) # Set the hidden field new_tuple_type._fields = fieldname_tuple # Add the getters for i, field in enumerate(fieldname_tuple): setattr(new_tuple_type, field, property(itemgetter(i))) # Cache _known_tuple_types[fieldname_tuple] = new_tuple_type # Done return new_tuple_type class AIM: class AIMError(Exception): def __init__(self, value): self.parameter = value def __str__(self): return str(self.parameter) def __init__(self, login, transkey, testmode=False): if str(login).strip() == '' or login == None: raise AIM.AIMError('No login name provided') if str(transkey).strip() == '' or transkey == None: raise AIM.AIMError('No transaction key provided') if testmode != True and testmode != False: raise AIM.AIMError('Invalid value for testmode. Must be True or False. "{0}" given.'.format(testmode)) self.testmode = testmode self.proxy = None; self.delimiter = '|' self.results = [] self.error = True self.success = False self.declined = False self.parameters = {} self.setParameter('x_delim_data', 'true') self.setParameter('x_delim_char', self.delimiter) self.setParameter('x_relay_response', 'FALSE') self.setParameter('x_url', 'FALSE') self.setParameter('x_version', '3.1') self.setParameter('x_method', 'CC') self.setParameter('x_type', 'AUTH_CAPTURE') self.setParameter('x_login', login) self.setParameter('x_tran_key', transkey) def process(self): encoded_args = urllib.urlencode(self.parameters) if self.testmode == True: url = 'https://test.authorize.net/gateway/transact.dll' else: url = 'https://secure.authorize.net/gateway/transact.dll' if self.proxy == None: self.results += str(urllib.urlopen(url, encoded_args).read()).split(self.delimiter) else: opener = urllib.FancyURLopener(self.proxy) opened = opener.open(url, encoded_args) try: self.results += str(opened.read()).split(self.delimiter) finally: opened.close() Results = namedtuple('Results', 'ResultResponse ResponseSubcode ResponseCode ResponseText AuthCode \ AVSResponse TransactionID InvoiceNumber Description Amount PaymentMethod \ TransactionType CustomerID CHFirstName CHLastName Company BillingAddress \ BillingCity BillingState BillingZip BillingCountry Phone Fax Email ShippingFirstName \ ShippingLastName ShippingCompany ShippingAddress ShippingCity ShippingState \ ShippingZip ShippingCountry TaxAmount DutyAmount FreightAmount TaxExemptFlag \ PONumber MD5Hash CVVResponse CAVVResponse') self.response = Results(*tuple(r for r in self.results)[0:40]) if self.getResultResponseFull() == 'Approved': self.error = False self.success = True self.declined = False elif self.getResultResponseFull() == 'Declined': self.error = False self.success = False self.declined = True else: raise AIM.AIMError(self.response.ResponseText) def setTransaction(self, creditcard, expiration, total, cvv=None, tax=None, invoice=None): if str(creditcard).strip() == '' or creditcard == None: raise AIM.AIMError('No credit card number passed to setTransaction(): {0}'.format(creditcard)) if str(expiration).strip() == '' or expiration == None: raise AIM.AIMError('No expiration number to setTransaction(): {0}'.format(expiration)) if str(total).strip() == '' or total == None: raise AIM.AIMError('No total amount passed to setTransaction(): {0}'.format(total)) self.setParameter('x_card_num', creditcard) self.setParameter('x_exp_date', expiration) self.setParameter('x_amount', total) if cvv != None: self.setParameter('x_card_code', cvv) if tax != None: self.setParameter('x_tax', tax) if invoice != None: self.setParameter('x_invoice_num', invoice) def setTransactionType(self, transtype=None): types = ['AUTH_CAPTURE', 'AUTH_ONLY', 'PRIOR_AUTH_CAPTURE', 'CREDIT', 'CAPTURE_ONLY', 'VOID'] if transtype.upper() not in types: raise AIM.AIMError('Incorrect Transaction Type passed to setTransactionType(): {0}'.format(transtype)) self.setParameter('x_type', transtype.upper()) def setProxy(self, proxy=None): if str(proxy).strip() == '' or proxy == None: raise AIM.AIMError('No proxy passed to setProxy()') self.proxy = {'http': str(proxy).strip()} def setParameter(self, key=None, value=None): if key != None and value != None and str(key).strip() != '' and str(value).strip() != '': self.parameters[key] = str(value).strip() else: raise AIM.AIMError('Incorrect parameters passed to setParameter(): {0}:{1}'.format(key, value)) def isApproved(self): return self.success def isDeclined(self): return self.declined def isError(self): return self.error def getResultResponseFull(self): responses = ['', 'Approved', 'Declined', 'Error'] return responses[int(self.results[0])] def process(creditcard,expiration,total,cvv=None,tax=None,invoice=None, login='cnpdev4289', transkey='SR2P8g4jdEn7vFLQ',testmode=True): payment = AIM(login,transkey,testmode) expiration = expiration.replace('/','') payment.setTransaction(creditcard, expiration, total, cvv, tax, invoice) try: payment.process() return payment.isApproved() except AIM.AIMError: return False def test(): import socket import sys from time import time creditcard = '4427802641004797' expiration = '122012' total = '1.00' cvv = '123' tax = '0.00' invoice = str(time())[4:10] # get a random invoice number try: payment = AIM('cnpdev4289', 'SR2P8g4jdEn7vFLQ', True) payment.setTransaction(creditcard, expiration, total, cvv, tax, invoice) payment.setParameter('x_duplicate_window', 180) # three minutes duplicate windows payment.setParameter('x_cust_id', '1324') # customer ID payment.setParameter('x_first_name', 'John') payment.setParameter('x_last_name', 'Conde') payment.setParameter('x_company', 'Test Company') payment.setParameter('x_address', '1234 Main Street') payment.setParameter('x_city', 'Townsville') payment.setParameter('x_state', 'NJ') payment.setParameter('x_zip', '12345') payment.setParameter('x_country', 'US') payment.setParameter('x_phone', '800-555-1234') payment.setParameter('x_description', 'Test Transaction') payment.setParameter('x_customer_ip', socket.gethostbyname(socket.gethostname())) payment.setParameter('x_email', 'john@example.com') payment.setParameter('x_email_customer', False) payment.process() if payment.isApproved(): print 'Response Code: ', payment.response.ResponseCode print 'Response Text: ', payment.response.ResponseText print 'Response: ', payment.getResultResponseFull() print 'Transaction ID: ', payment.response.TransactionID print 'CVV Result: ', payment.response.CVVResponse print 'Approval Code: ', payment.response.AuthCode print 'AVS Result: ', payment.response.AVSResponse elif payment.isDeclined(): print 'Your credit card was declined by your bank' elif payment.isError(): raise AIM.AIMError('An uncaught error occurred') except AIM.AIMError, e: print "Exception thrown:", e print 'An error occured' print 'approved',payment.isApproved() print 'declined',payment.isDeclined() print 'error',payment.isError() if __name__=='__main__': test() web2py-1.99.7.orig/gluon/contrib/redis_cache.py0000644000175000017500000001312111724764235020052 0ustar josejose""" Developed by 616d41631bff906704951934ffe4015e Released under web2py license because includes gluon/cache.py source code """ import redis from redis.exceptions import ConnectionError from gluon import current from gluon.cache import CacheAbstract import cPickle as pickle import time import re import logging import thread logger = logging.getLogger("web2py.cache.redis") locker = thread.allocate_lock() def RedisCache(*args, **vars): """ Usage example: put in models from gluon.contrib.redis_cache import RedisCache cache.redis = RedisCache('localhost:6379',db=None, debug=True) cache.redis.stats() return a dictionary with statistics of Redis server with one additional key ('w2p_keys') showing all keys currently set from web2py with their TTL if debug=True additional tracking is activate and another key is added ('w2p_stats') showing total_hits and misses """ locker.acquire() try: if not hasattr(RedisCache, 'redis_instance'): RedisCache.redis_instance = RedisClient(*args, **vars) finally: locker.release() return RedisCache.redis_instance class RedisClient(object): meta_storage = {} MAX_RETRIES = 5 RETRIES = 0 def __init__(self, server='localhost:6379', db=None, debug=False): self.server = server self.db = db or 0 host,port = (self.server.split(':')+['6379'])[:2] port = int(port) self.request = current.request self.debug = debug if self.request: app = self.request.application else: app = '' if not app in self.meta_storage: self.storage = self.meta_storage[app] = { CacheAbstract.cache_stats_name: { 'hit_total': 0, 'misses': 0, }} else: self.storage = self.meta_storage[app] self.r_server = redis.Redis(host=host, port=port, db=self.db) def __call__(self, key, f, time_expire=300): try: if time_expire == None: time_expire = 24*60*60 newKey = self.__keyFormat__(key) value = None obj = self.r_server.get(newKey) ttl = self.r_server.ttl(newKey) or 0 if ttl > time_expire: obj = None if obj: if self.debug: self.r_server.incr('web2py_cache_statistics:hit_total') value = pickle.loads(obj) elif f is None: self.r_server.delete(newKey) else: if self.debug: self.r_server.incr('web2py_cache_statistics:misses') value = f() if time_expire == 0: time_expire = 1 self.r_server.setex(newKey, pickle.dumps(value), time_expire) return value except ConnectionError: return self.retry_call(key, f, time_expire) def retry_call(self, key, f, time_expire): self.RETRIES += 1 if self.RETRIES <= self.MAX_RETRIES: logger.error("sleeping %s seconds before reconnecting" % (2 * self.RETRIES)) time.sleep(2 * self.RETRIES) self.__init__(self.server, self.db, self.debug) return self.__call__(key, f, time_expire) else: self.RETRIES = 0 raise ConnectionError , 'Redis instance is unavailable at %s' % (self.server) def increment(self, key, value=1, time_expire=300): try: newKey = self.__keyFormat__(key) obj = self.r_server.get(newKey) if obj: return self.r_server.incr(newKey, value) else: self.r_server.setex(newKey, value, time_expire) return value except ConnectionError: return self.retry_increment(key, value, time_expire) def retry_increment(self, key, value, time_expire): self.RETRIES += 1 if self.RETRIES <= self.MAX_RETRIES: logger.error("sleeping some seconds before reconnecting") time.sleep(2 * self.RETRIES) self.__init__(self.server, self.db, self.debug) return self.increment(key, value, time_expire) else: self.RETRIES = 0 raise ConnectionError , 'Redis instance is unavailable at %s' % (self.server) def clear(self, regex): """ Auxiliary function called by `clear` to search and clear cache entries """ r = re.compile(regex) prefix = "w2p:%s:" % (self.request.application) pipe = self.r_server.pipeline() for a in self.r_server.keys("%s*" % \ (prefix)): if r.match(str(a).replace(prefix, '', 1)): pipe.delete(a) pipe.execute() def stats(self): statscollector = self.r_server.info() if self.debug: statscollector['w2p_stats'] = dict( hit_total = self.r_server.get( 'web2py_cache_statistics:hit_total'), misses=self.r_server.get('web2py_cache_statistics:misses') ) statscollector['w2p_keys'] = dict() for a in self.r_server.keys("w2p:%s:*" % ( self.request.application)): statscollector['w2p_keys']["%s_expire_in_sec" % (a)] = \ self.r_server.ttl(a) return statscollector def __keyFormat__(self, key): return 'w2p:%s:%s' % (self.request.application, key.replace(' ', '_')) web2py-1.99.7.orig/gluon/contrib/markmin/0000755000175000017500000000000011724764270016706 5ustar josejoseweb2py-1.99.7.orig/gluon/contrib/markmin/__init__.py0000644000175000017500000000000211724764235021010 0ustar josejose web2py-1.99.7.orig/gluon/contrib/markmin/markmin2latex.py0000755000175000017500000002652211724764235022051 0ustar josejose#!/usr/bin/env python # created my Massimo Di Pierro # license MIT/BSD/GPL import re import cgi import sys import doctest from optparse import OptionParser __all__ = ['render','markmin2latex'] META = 'META' regex_newlines = re.compile('(\n\r)|(\r\n)') regex_dd=re.compile('\$\$(?P.*?)\$\$') regex_code = re.compile('('+META+')|(``(?P.*?)``(:(?P\w+))?)',re.S) regex_title = re.compile('^#{1} (?P[^\n]+)',re.M) regex_maps = [ (re.compile('[ \t\r]+\n'),'\n'), (re.compile('[ \t\r]+\n'),'\n'), (re.compile('\*\*(?P[^\s\*]+( +[^\s\*]+)*)\*\*'),'{\\\\bf \g}'), (re.compile("''(?P[^\s']+( +[^\s']+)*)''"),'{\\it \g}'), (re.compile('^#{6} (?P[^\n]+)',re.M),'\n\n{\\\\bf \g}\n'), (re.compile('^#{5} (?P[^\n]+)',re.M),'\n\n{\\\\bf \g}\n'), (re.compile('^#{4} (?P[^\n]+)',re.M),'\n\n\\\\goodbreak\\subsubsection{\g}\n'), (re.compile('^#{3} (?P[^\n]+)',re.M),'\n\n\\\\goodbreak\\subsection{\g}\n'), (re.compile('^#{2} (?P[^\n]+)',re.M),'\n\n\\\\goodbreak\\section{\g}\n'), (re.compile('^#{1} (?P[^\n]+)',re.M),''), (re.compile('^\- +(?P.*)',re.M),'\\\\begin{itemize}\n\\item \g\n\\end{itemize}'), (re.compile('^\+ +(?P.*)',re.M),'\\\\begin{itemize}\n\\item \g\n\\end{itemize}'), (re.compile('\\\\end\{itemize\}\s+\\\\begin\{itemize\}'),'\n'), (re.compile('\n\s+\n'),'\n\n')] regex_table = re.compile('^\-{4,}\n(?P.*?)\n\-{4,}(:(?P\w+))?\n',re.M|re.S) regex_anchor = re.compile('\[\[(?P\S+)\]\]') regex_bibitem = re.compile('\-\s*\[\[(?P\S+)\]\]') regex_image_width = re.compile('\[\[(?P[^\]]*?) +(?P\S+) +(?P

left|right|center) +(?P\d+px)\]\]') regex_image = re.compile('\[\[(?P[^\]]*?) +(?P\S+) +(?P

left|right|center)\]\]') #regex_video = re.compile('\[\[(?P[^\]]*?) +(?P\S+) +video\]\]') #regex_audio = re.compile('\[\[(?P[^\]]*?) +(?P\S+) +audio\]\]') regex_link = re.compile('\[\[(?P[^\]]*?) +(?P\S+)\]\]') regex_auto = re.compile('(?\w+://[\w\.\-\?&%\:]+)',re.M) regex_commas = re.compile('[ ]+(?P[,;\.])') regex_noindent = re.compile('\n\n(?P[a-z])') #regex_quote_left = re.compile('"(?=\w)') #regex_quote_right = re.compile('(?=\w\.)"') def latex_escape(text,pound=True): text=text.replace('\\','{\\textbackslash}') for c in '^_&$%{}': text=text.replace(c,'\\'+c) text=text.replace('\\{\\textbackslash\\}','{\\textbackslash}') if pound: text=text.replace('#','\\#') return text def render(text, extra={}, allowed={}, sep='p', image_mapper=lambda x:x, chapters=False): ############################################################# # replace all blocks marked with ``...``:class with META # store them into segments they will be treated as code ############################################################# text = str(text or '') segments, i = [], 0 text = regex_dd.sub('``\g``:latex ',text) text = regex_newlines.sub('\n',text) while True: item = regex_code.search(text,i) if not item: break if item.group()==META: segments.append((None,None)) text = text[:item.start()]+META+text[item.end():] else: c = item.group('c') or '' if 'code' in allowed and not c in allowed['code']: c = '' code = item.group('t').replace('!`!','`') segments.append((code,c)) text = text[:item.start()]+META+text[item.end():] i=item.start()+3 ############################################################# # do h1,h2,h3,h4,h5,h6,b,i,ol,ul and normalize spaces ############################################################# title = regex_title.search(text) if not title: title='Title' else: title=title.group('t') text = latex_escape(text,pound=False) texts = text.split('## References',1) text = regex_anchor.sub('\\label{\g}', texts[0]) if len(texts)==2: text += '\n\\begin{thebibliography}{999}\n' text += regex_bibitem.sub('\n\\\\bibitem{\g}', texts[1]) text += '\n\\end{thebibliography}\n' text = '\n'.join(t.strip() for t in text.split('\n')) for regex, sub in regex_maps: text = regex.sub(sub,text) text=text.replace('#','\\#') text=text.replace('`',"'") ############################################################# # process tables and blockquotes ############################################################# while True: item = regex_table.search(text) if not item: break c = item.group('c') or '' if 'table' in allowed and not c in allowed['table']: c = '' content = item.group('t') if ' | ' in content: rows = content.replace('\n','\\\\\n').replace(' | ',' & ') row0,row2 = rows.split('\\\\\n',1) cols=row0.count(' & ')+1 cal='{'+''.join('l' for j in range(cols))+'}' tabular = '\\begin{center}\n{\\begin{tabular}'+cal+'\\hline\n' + row0+'\\\\ \\hline\n'+row2 + ' \\\\ \\hline\n\\end{tabular}}\n\\end{center}' if row2.count('\n')>20: tabular='\\newpage\n'+tabular text = text[:item.start()] + tabular + text[item.end():] else: text = text[:item.start()] + '\\begin{quote}' + content + '\\end{quote}' + text[item.end():] ############################################################# # deal with images, videos, audios and links ############################################################# def sub(x): f=image_mapper(x.group('k')) if not f: return None return '\n\\begin{center}\\includegraphics[width=8cm]{%s}\\end{center}\n' % (f) text = regex_image_width.sub(sub,text) text = regex_image.sub(sub,text) text = regex_link.sub('{\\\\footnotesize\\href{\g}{\g}}', text) text = regex_commas.sub('\g',text) text = regex_noindent.sub('\n\\\\noindent \g',text) ### fix paths in images regex=re.compile('\\\\_[\w_]*\.(eps|png|jpg|gif)') while True: match=regex.search(text) if not match: break text=text[:match.start()]+text[match.start()+1:] #text = regex_quote_left.sub('``',text) #text = regex_quote_right.sub("''",text) if chapters: text=text.replace(r'\section*{',r'\chapter*{') text=text.replace(r'\section{',r'\chapter{') text=text.replace(r'subsection{',r'section{') ############################################################# # process all code text ############################################################# parts = text.split(META) text = parts[0] authors = [] for i,(code,b) in enumerate(segments): if code==None: html = META else: if b=='hidden': html='' elif b=='author': author = latex_escape(code.strip()) authors.append(author) html='' elif b=='inxx': html='\inxx{%s}' % latex_escape(code) elif b=='cite': html='~\cite{%s}' % latex_escape(code.strip()) elif b=='ref': html='~\ref{%s}' % latex_escape(code.strip()) elif b=='latex': if '\n' in code: html='\n\\begin{equation}\n%s\n\\end{equation}\n' % code.strip() else: html='$%s$' % code.strip() elif b=='latex_eqnarray': code=code.strip() code='\\\\'.join(x.replace('=','&=&',1) for x in code.split('\\\\')) html='\n\\begin{eqnarray}\n%s\n\\end{eqnarray}\n' % code elif b.startswith('latex_'): key=b[6:] html='\\begin{%s}%s\\end{%s}' % (key,code,key) elif b in extra: if code[:1]=='\n': code=code[1:] if code[-1:]=='\n': code=code[:-1] html = extra[b](code) elif code[:1]=='\n' or code[:-1]=='\n': if code[:1]=='\n': code=code[1:] if code[-1:]=='\n': code=code[:-1] if code.startswith('<') or code.startswith('{{') or code.startswith('http'): html = '\\begin{lstlisting}[keywords={}]\n%s\n\\end{lstlisting}' % code else: html = '\\begin{lstlisting}\n%s\n\\end{lstlisting}' % code else: if code[:1]=='\n': code=code[1:] if code[-1:]=='\n': code=code[:-1] html = '{\\ft %s}' % latex_escape(code) try: text = text+html+parts[i+1] except: text = text + '... WIKI PROCESSING ERROR ...' break text = text.replace(' ~\\cite','~\\cite') return text, title, authors WRAPPER = """ \\documentclass[12pt]{article} \\usepackage{hyperref} \\usepackage{listings} \\usepackage{upquote} \\usepackage{color} \\usepackage{graphicx} \\usepackage{grffile} \\usepackage[utf8x]{inputenc} \\definecolor{lg}{rgb}{0.9,0.9,0.9} \\definecolor{dg}{rgb}{0.3,0.3,0.3} \\def\\ft{\\small\\tt} \\lstset{ basicstyle=\\footnotesize, breaklines=true, basicstyle=\\ttfamily\\color{black}\\footnotesize, keywordstyle=\\bf\\ttfamily, commentstyle=\\it\\ttfamily, stringstyle=\\color{dg}\\it\\ttfamily, numbers=left, numberstyle=\\color{dg}\\tiny, stepnumber=1, numbersep=5pt, backgroundcolor=\\color{lg}, tabsize=4, showspaces=false, showstringspaces=false } \\title{%(title)s} \\author{%(author)s} \\begin{document} \\maketitle \\tableofcontents \\newpage %(body)s \\end{document} """ def markmin2latex(data, image_mapper=lambda x:x, extra={}, wrapper=WRAPPER): body, title, authors = render(data, extra=extra, image_mapper=image_mapper) author = '\n\\and\n'.join(a.replace('\n','\\\\\n\\footnotesize ') for a in authors) return wrapper % dict(title=title, author=author, body=body) if __name__ == '__main__': parser = OptionParser() parser.add_option("-i", "--info", dest="info", help="markmin help") parser.add_option("-t", "--test", dest="test", action="store_true", default=False) parser.add_option("-n", "--no_wrapper", dest="no_wrapper", action="store_true",default=False) parser.add_option("-c", "--chapters", dest="chapters",action="store_true", default=False,help="switch section for chapter") parser.add_option("-w", "--wrapper", dest="wrapper", default=False, help="latex file containing header and footer") (options, args) = parser.parse_args() if options.info: import markmin2html markmin2latex(markmin2html.__doc__) elif options.test: doctest.testmod() else: if options.wrapper: fwrapper = open(options.wrapper,'rb') try: wrapper = fwrapper.read() finally: fwrapper.close() elif options.no_wrapper: wrapper = '%(body)s' else: wrapper = WRAPPER for f in args: fargs = open(f,'r') content_data = [] try: content_data.append(fargs.read()) finally: fargs.close() content = '\n'.join(content_data) output= markmin2latex(content, wrapper=wrapper, chapters=options.chapters) print output web2py-1.99.7.orig/gluon/contrib/markmin/markmin2html.py0000755000175000017500000004317311724764235021701 0ustar josejose#!/usr/bin/env python # created my Massimo Di Pierro # license MIT/BSD/GPL import re import cgi """ TODO: next version should use MathJax """ __all__ = ['render', 'markmin2html'] __doc__ = """ # Markmin markup language ## About This is a new markup language that we call markmin designed to produce high quality scientific papers and books and also put them online. We provide serializers for html, latex and pdf. It is implemented in the ``markmin2html`` function in the ``markmin2html.py``. Example of usage: `` m = "Hello **world** [[link http://web2py.com]]" from markmin2html import markmin2html print markmin2html(m) from markmin2latex import markmin2latex print markmin2latex(m) from markmin2pdf import markmin2pdf # requires pdflatex print markmin2pdf(m) `` ## Why? We wanted a markup language with the following requirements: - less than 100 lines of functional code - easy to read - secure - support table, ul, ol, code - support html5 video and audio elements (html serialization only) - can align images and resize them - can specify class for tables and code elements - can add anchors - does not use _ for markup (since it creates odd behavior) - automatically links urls - fast - easy to extend - supports latex and pdf including references - allows to describe the markup in the markup (this document is generated from markmin syntax) (results depend on text but in average for text ~100K markmin is 30% faster than markdown, for text ~10K it is 10x faster) The [[web2py book http://www.lulu.com/product/paperback/web2py-%283rd-edition%29/12822827]] published by lulu, for example, was entirely generated with markmin2pdf from the online [[web2py wiki http://www.web2py.com/book]] ## Download - http://web2py.googlecode.com/hg/gluon/contrib/markmin/markmin2html.py - http://web2py.googlecode.com/hg/gluon/contrib/markmin/markmin2latex.py - http://web2py.googlecode.com/hg/gluon/contrib/markmin/markmin2pdf.py markmin2html.py and markmin2latex.py are single files and have no web2py dependence. Their license is BSD. ## Examples ### Bold, italic, code and links -------------------------------------------------- **SOURCE** | **OUTPUT** ``# title`` | **title** ``## section`` | **section** ``### subsection`` | **subsection** ``**bold**`` | **bold** ``''italic''`` | ''italic'' ``!`!`verbatim`!`!`` | ``verbatim`` ``http://google.com`` | http://google.com ``[[click me #myanchor]]`` | [[click me #myanchor]] --------------------------------------------------- ### More on links The format is always ``[[title link]]``. Notice you can nest bold, italic and code inside the link title. ### Anchors [[myanchor]] You can place an anchor anywhere in the text using the syntax ``[[name]]`` where ''name'' is the name of the anchor. You can then link the anchor with [[link #myanchor]], i.e. ``[[link #myanchor]]``. ### Images [[some image http://www.web2py.com/examples/static/web2py_logo.png right 200px]] This paragraph has an image aligned to the right with a width of 200px. Its is placed using the code ``[[some image http://www.web2py.com/examples/static/web2py_logo.png right 200px]]``. ### Unordered Lists `` - Dog - Cat - Mouse `` is rendered as - Dog - Cat - Mouse Two new lines between items break the list in two lists. ### Ordered Lists `` + Dog + Cat + Mouse `` is rendered as + Dog + Cat + Mouse ### Tables Something like this `` --------- **A** | **B** | **C** 0 | 0 | X 0 | X | 0 X | 0 | 0 -----:abc `` is a table and is rendered as --------- **A** | **B** | **C** 0 | 0 | X 0 | X | 0 X | 0 | 0 -----:abc Four or more dashes delimit the table and | separates the columns. The ``:abc`` at the end sets the class for the table and it is optional. ### Blockquote A table with a single cell is rendered as a blockquote: ----- Hello world ----- ### Code, ````, escaping and extra stuff `` def test(): return "this is Python code" ``:python Optionally a ` inside a ``!`!`...`!`!`` block can be inserted escaped with !`!. The ``:python`` after the markup is also optional. If present, by default, it is used to set the class of the block. The behavior can be overridden by passing an argument ``extra`` to the ``render`` function. For example: `` markmin2html("!`!!`!aaa!`!!`!:custom", extra=dict(custom=lambda text: 'x'+text+'x')) ``:python generates ``'xaaax'``:python (the ``!`!`...`!`!:custom`` block is rendered by the ``custom=lambda`` function passed to ``render``). ### Html5 support Markmin also supports the

web2py-1.99.7.orig/applications/admin/views/default/edit.html0000644000175000017500000001035311724764235022641 0ustar josejose{{extend 'layout.html'}} {{ def shortcut(combo, description): return XML('
  • %s %s
  • ' % (combo, description)) }} {{if TEXT_EDITOR == 'amy':}} {{include 'default/amy_ajax.html'}} {{else:}} {{pass}} {{block sectionclass}}edit{{end}}

    {{=T('Editing file "%s"',filename)}}

    {{if functions:}}

    {{=B(T('exposes:'))}}{{=XML(', '.join([A(f,_href=URL(a=app,c=controller,f=f)).xml() for f in functions]))}} {{if editviewlinks:}}
    {{=B(T('edit views:'))}} {{=XML(', '.join([v.xml() for v in editviewlinks]))}} {{pass}}

    {{pass}}

    {{if filetype=='python':}} {{=A(SPAN(T('toggle breakpoint')), _value="breakpoint", _name="breakpoint", _onclick="return doToggleBreakpoint('%s','%s://%s%s');" % (filename, request.env['wsgi_url_scheme'], request.env['http_host'], URL(c='debug', f='toggle_breakpoint')), _class="button special")}} {{pass}} {{=button(URL('design',args=request.args[0]), T('back'))}} {{if edit_controller:}} {{=button(edit_controller, T('edit controller'))}} {{pass}} {{if view_link:}} {{=button(view_link, T('try view'))}} {{pass}} {{if request.args[1]=='models':}} {{=T('online designer')}} {{pass}} {{=T('docs')}}

    {{=IMG(_src=URL('static', 'images/save_icon.png'), _alt=T('Save'))}} {{=T('Saved file hash:')}} {{=T('Last saved on:')}} {{if TEXT_EDITOR=='amy':}} {{else:}} {{pass}} {{=T('currently saved or')}} {{=T('to previous version.')}}
    {{if filetype=='html':}}

    Key bindings for ZenCoding Plugin

      {{=shortcut('Ctrl+S', 'Save via Ajax')}} {{=shortcut('Ctrl+,', 'Expand Abbreviation')}} {{=shortcut('Ctrl+M', 'Match Pair')}} {{=shortcut('Ctrl+H', 'Wrap with Abbreviation')}} {{=shortcut('Shift+Ctrl+M', 'Merge Lines')}} {{=shortcut('Ctrl+Shift+←', 'Previous Edit Point')}} {{=shortcut('Ctrl+Shift+→', 'Next Edit Point')}} {{=shortcut('Ctrl+Shift+↑', 'Go to Matching Pair')}}
    {{else:}}

    Key bindings

      {{=shortcut('Ctrl+S', 'Save via Ajax')}}
    {{pass}} web2py-1.99.7.orig/applications/admin/views/default/downgrade_web2py.html0000644000175000017500000000111511724764235025152 0ustar josejose{{extend 'layout.html'}} {{block sectionclass}}upgrade{{end}}

    {{=T('web2py downgrade')}}

    {{=T('ATTENTION:')}} {{=T('This is an experimental feature and it needs more testing. If you decide to downgrade you do it at your own risk')}}
    {{=T('If start the downgrade, be patient, it may take a while to rollback')}}

    {{=FORM(INPUT(_type='submit',_name='nodowngrade',_value=T('Cancel')), _class='inline')}} {{=FORM(INPUT(_type='submit',_name='downgrade',_value=T('Downgrade')), _class='inline')}}
    web2py-1.99.7.orig/applications/admin/views/default/delete_plugin.html0000644000175000017500000000047211724764235024535 0ustar josejose{{extend 'layout.html'}} {{block sectionclass}}delete_plugin{{end}}

    {{=T('Are you sure you want to delete plugin "%s"?', plugin)}}

    {{=FORM(INPUT(_type='submit',_name='nodelete',_value=T('NO')))}}

    {{=FORM(INPUT(_type='submit',_name='delete',_value=T('YES')))}}

    web2py-1.99.7.orig/applications/admin/views/default/design.html0000644000175000017500000002665411724764235023200 0ustar josejose{{extend 'layout.html'}} {{ def all(items): return reduce(lambda a,b:a and b,items,True) def peekfile(path,file): return A(file.replace('\\\\','/'),_href=URL('peek', args=(app, path, file))) def editfile(path,file): return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit', args=(app, path, file))) def testfile(path,file): return A(TAG[''](IMG(_src=URL('static', 'images/test_icon.png'), _alt=T('test')), SPAN(T("Run tests in this file (to run all files, you may also use the button labelled 'test')"))), _class='icon test tooltip',_href=URL('test', args=(app, file))) def editlanguagefile(path,file): return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit_language', args=(app, path, file))) def file_upload_form(location): form=FORM(T("upload file:")," ", INPUT(_type="file",_name="file")," ",T("and rename it:")," ", INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY), INPUT(_type="hidden",_name="location",_value=location), INPUT(_type="hidden",_name="sender",_value=URL('design',args=app)), INPUT(_type="submit",_value=T("upload")),_action=URL('upload_file')) return form def file_create_form(location): form=FORM(T("create file with filename:")," ", INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY), INPUT(_type="hidden",_name="location",_value=location), INPUT(_type="hidden",_name="sender",_value=URL('design',args=app)), INPUT(_type="submit",_value=T("Create")),_action=URL('create_file')) return form def upload_plugin_form(app): form=FORM(T("upload plugin file:")," ", INPUT(_type="file",_name="pluginfile"), INPUT(_type="submit",_value=T("upload"))) return form def deletefile(arglist): return A(TAG[''](IMG(_src=URL('static', 'images/delete_icon.png')), SPAN(T('Delete this file (you will be asked to confirm deletion)'))), _class='icon delete tooltip', _href=URL('delete',args=arglist,vars=dict(sender=request.function+'/'+app))) }} {{block sectionclass}}design{{end}}

    {{=T("Edit application")}} "{{=A(app,_href=URL(app,'default','index'),_target="_blank")}}"

    {{=searchbox('search')}} {{=T("collapse/expand all")}} {{=button('#models', T("models"))}} {{=button('#controllers', T("controllers"))}} {{=button('#views', T("views"))}} {{=button('#languages', T("languages"))}} {{=button('#static', T("static"))}} {{=button('#modules', T("modules"))}} {{=button('#plugins', T("plugins"))}}

    {{=T("Models")}} {{=helpicon()}} {{=T("The data representation, define database tables and sets")}}

    {{if not models:}}

    {{=T("There are no models")}}

    {{else:}}
    {{=button(URL(a=app,c='appadmin',f='index'), T('database administration'))}} {{if os.access(os.path.join(request.folder,'..',app,'databases','sql.log'),os.R_OK):}} {{=button(URL('peek/%s/databases/sql.log'%app), 'sql.log')}} {{pass}}
    {{pass}}
      {{for m in models:}}
    • {{=editfile('models',m)}} {{=deletefile([app, 'models', m])}} {{=peekfile('models',m)}} {{if len(defines[m]):}}{{=T("defines tables")}} {{pass}}{{=XML(', '.join([B(table).xml() for table in defines[m]]))}}
    • {{pass}}
    {{=file_create_form('%s/models/' % app)}}
    {{ controller_functions=[] for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functions[c]] }}

    {{=T("Controllers")}} {{=helpicon()}} {{=T("The application logic, each URL path is mapped in one exposed function in the controller")}}

    {{if not controllers:}}

    {{=T("There are no controllers")}}

    {{else:}}
    {{=button(URL(r=request,c='shell',f='index',args=app), T("shell"))}} {{=button(URL('test',args=app), T("test"))}} {{=button(URL('edit',args=[app,'cron','crontab']), T("crontab"))}}
    {{pass}}
      {{for c in controllers:}}
    • {{=editfile('controllers',c)}} {{=deletefile([app, 'controllers', c])}} {{=testfile('controllers',c)}} {{=peekfile('controllers',c)}} {{if functions[c]:}}{{=T("exposes")}} {{pass}}{{=XML(', '.join([A(f,_href=URL(a=app,c=c[:-3],f=f)).xml() for f in functions[c]]))}}
    • {{pass}}
    {{=file_create_form('%s/controllers/' % app)}}

    {{=T("Views")}} {{=helpicon()}} {{=T("The presentations layer, views are also known as templates")}}

    {{=button(LAYOUTS_APP, T("download layouts"))}}
    {{if not views:}}

    {{=T("There are no views")}}

    {{pass}}
      {{for c in views:}}
    • {{=editfile('views',c)}} {{=deletefile([app, 'views', c])}} {{=peekfile('views',c)}} {{if extend.has_key(c):}}{{=T("extends")}} {{=extend[c]}} {{pass}} {{if include[c]:}}{{=T("includes")}} {{pass}}{{=XML(', '.join([B(f).xml() for f in include[c]]))}}
    • {{pass}}
    {{=file_create_form('%s/views/' % app)}}

    {{=T("Languages")}} {{=helpicon()}} {{=T("Translation strings for the application")}}

    {{=button(URL('update_languages/'+app), T('update all languages'))}}
    {{if not languages:}}

    {{=T("There are no translators, only default language is supported")}}

    {{pass}}
      {{for file in languages:}}
    • {{=editlanguagefile('languages',file)}} {{=deletefile([app, 'languages', file])}} {{=peekfile('languages',file)}}
    • {{pass}}
    {{=file_create_form('%s/languages/' % app)}}{{=T('(something like "it-it")')}}

    {{=T("Static files")}} {{=helpicon()}} {{=T("These files are served without processing, your images go here")}}

    {{if not statics:}}

    {{=T("There are no static files")}}

    {{pass}}
      {{ path=[] for file in statics+['']: items=file.split('/') file_path=items[:-1] filename=items[-1] while path!=file_path: if len(file_path)>=len(path) and all([v==file_path[k] for k,v in enumerate(path)]): path.append(file_path[len(path)]) thispath='static__'+'__'.join(path) }}
    • {{=path[-1]}}/
    • {{ pass pass if filename: }}
    • {{=editfile('static',file)}} {{=deletefile([app,'static',file])}} {{=filename}}
    • {{ pass pass }} {{pass}}
    {{=file_create_form('%s/static/' % app)}} {{=file_upload_form('%s/static/' % app)}}

    {{=T("Modules")}} {{=helpicon()}} {{=T("Additional code for your application")}}

    {{if not modules:}}

    {{=T("There are no modules")}}

    {{pass}}
      {{for m in modules:}}
    • {{=editfile('modules',m)}} {{if m!='__init__.py':}}{{=deletefile([app, 'modules', m])}}{{pass}} {{=peekfile('modules',m)}}
    • {{pass}}
    {{=file_create_form('%s/modules/' % app)}} {{=file_upload_form('%s/modules/' % app)}}

    {{=T("Plugins")}} {{=helpicon()}} {{=T("To create a plugin, name a file/folder plugin_[name]")}}

    {{=button(PLUGINS_APP, T('download plugins'))}}
    {{if plugins:}}
      {{for plugin in plugins:}}
    • {{=A('plugin_%s' % plugin, _class='file', _href=URL('plugin', args=[app, plugin]))}}
    • {{pass}}
    {{else:}}

    {{=T('There are no plugins')}}

    {{pass}}
    {{=upload_plugin_form(app)}}
    web2py-1.99.7.orig/applications/admin/views/default/twitter.load0000644000175000017500000000101011724764235023357 0ustar josejose{{response.headers['web2py-response-flash']=response.flash}} {{ """ Tweet attributes 'iso_language_code', 'to_user_name', 'to_user_id_str', 'profile_image_url_https', 'from_user_id_str', 'text', 'from_user_name', 'in_reply_to_status_id_str', 'profile_image_url', 'id', 'to_user', 'source', 'in_reply_to_status_id', 'id_str', 'from_user', 'from_user_id', 'to_user_id', 'geo', 'created_at', 'metadata' """ }} {{ for t in tweets: }} {{ =DIV(H5(t["from_user_name"])) }} {{ =DIV(t["text"]) }} {{ =BR() }} {{ pass }} web2py-1.99.7.orig/applications/admin/views/default/resolve.html0000644000175000017500000000125211724764235023371 0ustar josejose{{extend 'layout.html'}} {{block sectionclass}}resolve{{end}}

    {{=T('Resolve Conflict file')}} "{{=filename}}"

    {{=diff}}
    web2py-1.99.7.orig/applications/admin/views/default/plugin.html0000644000175000017500000001577011724764235023222 0ustar josejose{{extend 'layout.html'}} {{ import os def all(items): return reduce(lambda a,b:a and b,items,True) def peekfile(path,file): return A(file.replace('\\\\','/'),_href=URL('peek', args=(app, path, file))) def editfile(path,file): return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit', args=(app, path, file))) def testfile(path,file): return A(TAG[''](IMG(_src=URL('static', 'images/test_icon.png'), _alt=T('test')), SPAN(T("Run tests in this file"))), _class='icon test tooltip',_href=URL('test', args=(app, file))) def editlanguagefile(path,file): return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit_language', args=(app, path, file))) def file_upload_form(location): form=FORM(T("upload file:")," ", INPUT(_type="file",_name="file")," ",T("and rename it:")," ", INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY), INPUT(_type="hidden",_name="location",_value=location), INPUT(_type="hidden",_name="sender",_value=URL('design/'+app)), INPUT(_type="submit",_value=T("submit")),_action=URL('upload_file')) return form def file_create_form(location): form=FORM(T("create file with filename:")," ", INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY), INPUT(_type="hidden",_name="location",_value=location), INPUT(_type="hidden",_name="sender",_value=URL('design/'+app)), INPUT(_type="submit",_value=T("submit")),_action=URL('create_file')) return form def upload_plugin_form(app): form=FORM(T("upload plugin file:")," ", INPUT(_type="file",_name="pluginfile"), INPUT(_type="submit",_value=T("submit"))) return form def deletefile(arglist): return A(TAG[''](IMG(_src=URL('static', 'images/delete_icon.png')), SPAN(T('Delete this file (you will be asked to confirm deletion)'))), _class='icon delete tooltip', _href=URL('delete',args=arglist,vars=dict(sender=request.function+'/'+app))) }} {{block sectionclass}}plugin{{end}}

    {{=T('Plugin "%s" in application', request.args(1))}} "{{=app}}"

    {{=T("collapse/expand all")}} {{=button("#models", T("models"))}} {{=button("#controllers", T("controllers"))}} {{=button("#views", T("views"))}} {{=button("#static", T("static"))}} {{=button("#modules", T("modules"))}} {{=sp_button(URL('plugin',args=app), T("back"))}} {{=sp_button(URL('delete_plugin',args=request.args), T("delete plugin"))}} {{=sp_button(URL('pack_plugin',args=request.args), T("pack plugin"))}}

    {{=T("Models")}}

    {{if not models:}}

    {{=T("There are no models")}}

    {{pass}}
      {{for m in models:}}
    • {{=editfile('models',m)}} {{=deletefile([app, 'models', m])}} {{=peekfile('models',m)}} {{if len(defines[m]):}}{{=T("defines tables")}} {{pass}}{{=XML(', '.join([B(table).xml() for table in defines[m]]))}}
    • {{pass}}
    {{ controller_functions=[] for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functions[c]] }}

    {{=T("Controllers")}}

    {{if not controllers:}}

    {{=T("There are no controllers")}}

    {{pass}}
      {{for c in controllers:}}
    • {{=editfile('controllers',c)}} {{=deletefile([app,'controllers',c])}} {{=testfile('controllers',c)}} {{=peekfile('controllers',c)}} {{if functions[c]:}}{{=T("exposes")}} {{pass}}{{=XML(', '.join([A(f,_href=URL(a=app,c=c[:-3],f=f)).xml() for f in functions[c]]))}}
    • {{pass}}

    {{=T("Views")}}

    {{if not views:}}

    {{=T("There are no views")}}

    {{pass}}
      {{for c in views:}}
    • {{=editfile('views',c)}} {{=deletefile([app,'views',c])}} {{=peekfile('views',c)}} {{if extend.has_key(c):}}{{=T("extends")}} {{=extend[c]}} {{pass}} {{if include[c]:}}{{=T("includes")}} {{pass}}{{=XML(', '.join([B(f).xml() for f in include[c]]))}}
    • {{pass}}

    {{=T("Static files")}}

    {{if not statics:}}

    {{=T("There are no static files")}}

    {{pass}}
      {{ path=[] for file in statics+['']: items=file.split('/') file_path=items[:-1] filename=items[-1] while path!=file_path: if len(file_path)>=len(path) and all([v==file_path[k] for k,v in enumerate(path)]): path.append(file_path[len(path)]) thispath='static__'+'__'.join(path) }}
    • {{=path[-1]}}/
    • {{ pass pass if filename: }}
    • {{=editfile('static',file)}} {{=deletefile([app,'static',file])}} {{=filename}}
    • {{ pass pass }} {{pass}}

    {{=T("Modules")}}

    {{if not modules:}}

    {{=T("There are no modules")}}

    {{pass}}
      {{for m in modules:}}
    • {{=editfile('modules',m)}} {{if m!='__init__.py':}}{{=T("delete")}}{{pass}} {{=peekfile('modules',m)}}
    • {{pass}}
    web2py-1.99.7.orig/applications/admin/views/default/change_password.html0000644000175000017500000000022111724764235025054 0ustar josejose{{extend 'layout.html'}} {{block sectionclass}}change_password{{end}}

    Change Admin Password

    {{=form}}
    web2py-1.99.7.orig/applications/admin/views/default/site.html0000644000175000017500000001222211724764235022655 0ustar josejose{{extend 'layout.html'}} {{import os, glob}} {{block sectionclass}}site{{end}}

    {{=T("Installed applications")}}

      {{for a in apps:}}
    • {{if a==request.application:}}

      {{=a}} ({{=T('currently running')}})

      {{else:}}

      {{=A(a,_href=URL(a,'default','index'))}}

      {{if MULTI_USER_MODE and db.app(name=a):}}(created by {{="%(first_name)s %(last_name)s" % db.auth_user[db.app(name=a).owner]}}){{pass}}

      {{if not os.path.exists('applications/%s/compiled' % a):}} {{=sp_button(URL('design',args=a), T("Edit"))}} {{else:}} {{=button(URL(a,'appadmin','index'), T("appadmin"))}} {{pass}} {{=button(URL('about',args=a), T("About"))}} {{pass}} {{=button(URL('errors',args=a), T("Errors"))}} {{=button(URL('cleanup',args=a), T("Clean"))}} {{=button(URL('pack',args=a), T("Pack all"))}} {{if not os.path.exists('applications/%s/compiled' % a):}} {{=button(URL('compile_app',args=a), T("Compile"))}} {{else:}} {{=button(URL('pack',args=(a, 'compiled')), T("Pack compiled"))}} {{if glob.glob('applications/%s/controllers/*.py' % a):}} {{=button(URL('remove_compiled_app',args=a), T("Remove compiled"))}} {{pass}} {{pass}} {{if a!=request.application:}} {{=button(URL('uninstall',args=a), T("Uninstall"))}} {{=button_enable(URL('enable',args=a), a)}} {{pass}}

    • {{pass}}
    web2py-1.99.7.orig/applications/admin/views/debug/0000755000175000017500000000000011724764235020466 5ustar josejoseweb2py-1.99.7.orig/applications/admin/views/debug/breakpoints.html0000644000175000017500000000525011724764235023677 0ustar josejose{{extend 'layout.html'}} {{block sectionclass}}debug{{end}}

    {{=T("Breakpoints")}}



    {{for bp in breakpoints:}} {{pass}}
    {{=T("Delete")}} {{=T("Filename")}} {{=T("LineNo")}} {{=T("Temporary")}} {{=T("Condition")}} {{=T("Hits")}}
    {{=bp['filename']}} {{=A(bp['lineno'],_href="#",_onclick="collapse('%s');" % bp['number'])}} {{=bp['temporary']}} {{=bp['condition']}} {{=bp['hits']}}
    {{=CODE(open(bp['path']).read(), language='python', link=None, highlight_line=bp['lineno'], context_lines=10)}}
    • You can also set and remove breakpoint in the edit window, using the Toggle Breakpoint button
    web2py-1.99.7.orig/applications/admin/views/debug/index.html0000644000175000017500000000702311724764235022465 0ustar josejose{{extend 'layout.html'}} {{block sectionclass}}shell{{end}}
    >>>
    Type PDB debugger command in here and hit Return (Enter) to execute it.
    • Using the shell may lock the database to other users of this app.
    web2py-1.99.7.orig/applications/admin/views/debug/interact.html0000644000175000017500000001541311724764235023171 0ustar josejose{{extend 'layout.html'}} {{block sectionclass}}debug{{end}}

    {{=T("web2py online debugger")}}

    {{if filename:}}

    {{=T("Interaction at %s line %s") % (filename, lineno)}}

    {{if exception:}}

    {{=T("Exception %s", exception['title'])}}

    {{pass}}
    Code listing
    {{if lines:}}
    {{=CODE('\n'.join([x[1] for x in sorted(lines.items(),key=lambda x: x[0])]),
                    language='python', link=None, counter=min(lines.keys()), 
                    highlight_line=lineno, context_lines=10)}}
    {{pass}}
    • Your application will be blocked until you click an action button (next, step, continue, etc.)
    • Your can inspect variables using the console bellow

    {{=T("Interactive console")}}

    >>>
    Type python statement in here and hit Return (Enter) to execute it.
    {{elif request.env.get('wsgi_multiprocess') or not request.env.get('wsgi_multithread'):}}

    {{=T("Unsupported webserver working mode: %s") % request.env.get('server_software', '')}}

  • WARNING: This debugger may not work properly if you don't have a threaded webserver or you're using multiple daemon processes.
  • In development, use the default Rocket webserver that is currently supported by this debugger.
  • On production, you'll have to configure your webserver to use one process and multiple threads to use this debugger.
  • {{#=BEAUTIFY(request.env)}} {{else:}}

    {{=T("No Interaction yet")}}

    • You need to set up and reach a {{=A("breakpoint", _href=URL('breakpoints'))}} to use the debugger!
    • To emulate a breakpoint programatically, write: {{=CODE("from gluon.debug import dbg\n" "dbg.set_trace() # stop here!\n", counter=None)}}
    • Please {{=A("refresh", _href=URL('interact'))}} this page to see if a breakpoint was hit and debug interaction is required.
    {{pass}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/0000755000175000017500000000000011724764235022272 5ustar josejoseweb2py-1.99.7.orig/applications/admin/views/default.mobile/ticket.load0000644000175000017500000001124311724764235024417 0ustar josejose{{block sectionclass}}ticket{{end}}

    {{=T('Error ticket')}} for "{{=app}}"

    {{=T('Ticket ID')}}

    {{=ticket}}

    {{if output:}}

    {{=output}}

    {{pass}}

    {{=T('Version')}}

    web2py™ {{=myversion}}
    Python {{=snapshot.get('pyver','')}}

    {{=T('Traceback')}}

    {{=traceback}}
    {{if snapshot:}} {{try:}}

    {{=T('Error snapshot')}} {{=helpicon()}} {{=T('Detailed traceback description')}}

    {{=snapshot['etype']}}({{=snapshot['evalue']}})

    {{=T('inspect attributes')}}

    {{=T("Exception instance attributes")}}
    {{for k,v in snapshot['exception'].items():}} {{pass}}
    {{=k}} {{=v}}

    {{=T('Frames')}}

      {{for i, frame in enumerate(snapshot['frames']):}}
    • {{is_hidden = (i != len(snapshot['frames'])-1 and 'hide' or 'inspect')}}

      File {{="%s in %s at line %s" % (frame['file'], frame['func'], frame['lnum'])}} {{=T("code")}} {{=T("arguments")}} {{=T("variables")}}

      Function argument list

      {{=frame['call']}}

      Code listing
      {{if frame['lines']:}}
      {{=CODE('\n'.join([x[1] for x in sorted(frame['lines'].items(),key=lambda x: x[0])]), 
                          language='python', link=None, counter=min(frame['lines'].keys()), highlight_line=frame['lnum'])}}
      {{pass}}
      Variables
      {{for k,v in frame['dump'].items():}} {{pass}}
      {{=k}} {{=v}}
    • {{pass}}

    Context

    {{=T('locals')}} {{=T('request')}} {{=T('session')}} {{=T('response')}}

    locals
    {{=BEAUTIFY(snapshot['locals'])}}
    request
    {{=BEAUTIFY(snapshot['request'])}}
    session
    {{=BEAUTIFY(snapshot['session'])}}
    response
    {{=BEAUTIFY(snapshot['response'])}}
    {{except Exception, e:}} {{import traceback;tb=traceback.format_exc().replace("\n","\\n") }} {{pass}} {{pass}}

    In file: {{=layer}}

    {{=CODE(code.replace('\r',''),language='python',link='/examples/global/vars/')}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/edit_language.html0000644000175000017500000000056311724764235025754 0ustar josejose{{extend 'default.mobile/layout.html'}} {{block sectionclass}}edit_language{{end}}

    {{=T('Editing Language file')}} "{{=filename}}"

    {{=form}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/user.html0000644000175000017500000000113511724764235024136 0ustar josejose{{extend 'default.mobile/layout.html'}}

    {{=T( request.args(0).replace('_',' ').capitalize() )}}

    {{=form}} {{if request.args(0)=='login':}} {{if not 'register' in auth.settings.actions_disabled:}}
    register {{pass}} {{if not 'request_reset_password' in auth.settings.actions_disabled:}}
    lost password {{pass}} {{pass}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/amy_ajax.html0000644000175000017500000000436211724764235024756 0ustar josejose {{if request.args[1]=="views":}} {{else:}} {{pass}} web2py-1.99.7.orig/applications/admin/views/default.mobile/uninstall.html0000644000175000017500000000050011724764235025164 0ustar josejose{{extend 'default.mobile/layout.html'}}

    {{=T('Are you sure you want to uninstall application "%s"?', app)}}

    {{=FORM(INPUT(_type='submit',_name='nodelete',_value=T('Abort')))}} {{=FORM(INPUT(_type='submit',_name='delete',_value=T('Uninstall')))}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/peek.html0000644000175000017500000000060311724764235024103 0ustar josejose{{extend 'default.mobile/layout.html'}} {{block sectionclass}}peek{{end}}

    {{=T("Peeking at file")}} "{{=filename}}"

    {{=button(URL('design',args=request.args[0]), T('back'))}} {{=button(URL('edit',args=request.args), T('Edit'))}}

    {{ if filename[-3:]=='.py': language='python' else: language='html' }} {{=CODE(data,language=language,link='/examples/global/vars/')}} web2py-1.99.7.orig/applications/admin/views/default.mobile/errors.html0000644000175000017500000001141311724764235024474 0ustar josejose{{extend 'default.mobile/layout.html'}} {{import os, stat, time}} {{block sectionclass}}errors{{end}} {{if db_ready['status'] == False: switchurl = db_ready['errmessage'] switchbutton = XML("""switch to : db""" % dict(href=switchurl, title=db_ready['errmessage'])) else: switchurl = URL(args=[app, 'dbnew']) switchbutton = XML("""switch to : db""" % (switchurl)) pass}}

    {{=T('Error logs for "%(app)s"',dict(app=app))}}



    {{ if 'new' in method: }} {{base_url = 'db' in method and 'ticketdb' or 'ticket' }}

    {{=T('Click row to expand traceback')}}

    {{if 'db' in method:}} source : db switch to : filesystem lists by ticket {{else:}} source : filesystem {{=switchbutton}} lists by ticket {{pass}}

    {{for e in errors:}} {{pass}}
    {{=T("Delete")}} {{=T("Count")}} {{=T("File")}} {{=T("Error")}}
    {{=e['count']}} {{=e['causer']}} {{=A(e['last_line'],_href="#",_onclick="collapse('%s');"%e['hash'])}} + {{=A(T('details'),_href=URL(base_url,args=[app,e['ticket']]))}}
    {{=CODE(e['pickel']['traceback'])}}
    {{ else: }}

    {{=T('Click row to view a ticket')}}

    {{if 'db' in method:}} source : db switch to : filesystem lists by exception {{else:}} source : filesystem {{=switchbutton}} lists by exception {{pass}}

    {{for ticket in tickets:}} {{if 'db' in method:}} {{else:}} {{pass}} {{pass}}
    {{=T("Delete")}} {{=T("Ticket")}} {{=T("Date and Time")}}
    {{=ticket}} {{=time.strftime('%Y-%m-%d %H:%M:%S',times[ticket].timetuple())}}{{=ticket}} {{=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(os.stat(os.path.join(request.folder,'../%s/errors/%s' % (app,ticket)))[stat.ST_CTIME]))}}
    {{ pass }}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/index.html0000644000175000017500000000102011724764235024260 0ustar josejose{{extend 'default.mobile/layout.html'}}

    web2py™ {{=T('Web Framework')}}

    {{=T('Login to the Administrative Interface')}}

    {{=T('Administrator Password:')}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/delete.html0000644000175000017500000000067111724764235024426 0ustar josejose{{extend 'default.mobile/layout.html'}} {{block sectionclass}}delete{{end}}

    {{=T('Are you sure you want to delete file "%s"?', filename)}}

    {{=FORM(INPUT(_type='submit',_name='nodelete',_value=T('Abort')),INPUT(_type='hidden',_name='sender',_value=sender), _class="inline")}}{{=FORM(INPUT(_type='submit',_name='delete',_value=T('Delete')),INPUT(_type='hidden',_name='sender',_value=sender), _class="inline")}}

    web2py-1.99.7.orig/applications/admin/views/default.mobile/upgrade_web2py.html0000644000175000017500000000104611724764235026100 0ustar josejose{{extend 'default.mobile/layout.html'}} {{block sectionclass}}upgrade{{end}}

    {{=T('web2py upgrade')}}

    {{=T('ATTENTION:')}} {{=T('This is an experimental feature and it needs more testing. If you decide to upgrade you do it at your own risk')}}
    {{=T('If start the upgrade, be patient, it may take a while to download')}}

    {{=FORM(INPUT(_type='submit',_name='noupgrade',_value=T('Cancel')), _class='inline')}} {{=FORM(INPUT(_type='submit',_name='upgrade',_value=T('Upgrade')), _class='inline')}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/test.html0000644000175000017500000000172311724764235024142 0ustar josejose{{extend 'default.mobile/layout.html'}} {{block sectionclass}}test{{end}}

    {{=T('Testing application')}} "{{=app}}"

    {{for controller in sorted(controllers):}}

    Testing controller "{{=controller}}"... please wait!

    {{pass}}

    {{=T("""If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code. A green title indicates that all tests (if defined) passed. In this case test results are not shown.""")}}

    {{=T('Functions with no doctests will result in [passed] tests.')}}

    {{=T('ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.')}}

    web2py-1.99.7.orig/applications/admin/views/default.mobile/ticket.html0000644000175000017500000001076211724764235024451 0ustar josejose{{extend 'default.mobile/layout.html'}} {{block sectionclass}}ticket{{end}}

    {{=T('Error ticket')}} for "{{=app}}"

    {{=T('Ticket ID')}}

    {{=ticket}}

    {{if output:}}

    {{=output}}

    {{pass}}

    {{=T('Version')}}

    web2py™ {{=myversion}}
    Python {{=snapshot.get('pyver','')}}

    {{=T('Traceback')}}

    {{=traceback}}
    {{if snapshot:}} {{try:}}

    {{=T('Error snapshot')}}{{=T('Detailed traceback description')}}

    {{=snapshot['etype']}}({{=snapshot['evalue']}})

    {{=T('inspect attributes')}}

    {{=T("Exception instance attributes")}}
    {{for k,v in snapshot['exception'].items():}} {{pass}}
    {{=k}} {{=v}}

    {{=T('Frames')}}

      {{for i, frame in enumerate(snapshot['frames']):}}
    • {{is_hidden = (i != len(snapshot['frames'])-1 and 'hide' or 'inspect')}}

      File {{="%s in %s at line %s" % (frame['file'], frame['func'], frame['lnum'])}} {{=T("code")}} {{=T("arguments")}} {{=T("variables")}}

      Function argument list

      {{=frame['call']}}

      Code listing
      {{if frame['lines']:}}
      {{=CODE('\n'.join([x[1] for x in sorted(frame['lines'].items(),key=lambda x: x[0])]),
                          language='python', link=None, counter=min(frame['lines'].keys()), highlight_line=frame['lnum'])}}
      {{pass}}
      Variables
      {{for k,v in frame['dump'].items():}} {{pass}}
      {{=k}} {{=v}}
    • {{pass}}

    Context

    {{=T('locals')}} {{=T('request')}} {{=T('session')}} {{=T('response')}}

    locals
    {{=BEAUTIFY(snapshot['locals'])}}
    request
    {{=BEAUTIFY(snapshot['request'])}}
    session
    {{=BEAUTIFY(snapshot['session'])}}
    response
    {{=BEAUTIFY(snapshot['response'])}}
    {{except Exception, e:}} {{import traceback;tb=traceback.format_exc().replace("\n","\\n") }} {{pass}} {{pass}}

    In file: {{=layer}}

    {{=CODE(code.replace('\r',''),language='python',link='/examples/global/vars/')}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/about.html0000644000175000017500000000056611724764235024301 0ustar josejose{{extend 'default.mobile/layout.html'}} {{block sectionclass}}about{{end}}

    {{=T("About application")}} "{{=app}}"

    {{=T("About")}} {{=app}}

    {{=button(URL('edit/%s/ABOUT' % (app)), T('Edit'))}}

    {{=about}}

    {{=T('License for')}} {{=app}}

    {{=button(URL('edit/%s/LICENSE' % (app)), T('Edit'))}}

    {{=license}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/edit.html0000644000175000017500000000502611724764235024110 0ustar josejose{{extend 'default.mobile/layout.html'}} {{ def shortcut(combo, description): return XML('
  • %s %s
  • ' % (combo, description)) }} {{if TEXT_EDITOR == 'amy':}} {{include 'default/amy_ajax.html'}} {{else:}} {{pass}} {{block sectionclass}}edit {{filename}}{{end}} {{if functions:}}

    {{=B(T('exposes:'))}}{{=XML(', '.join([A(f,_href=URL(a=app,c=controller,f=f)).xml() for f in functions]))}} {{if editviewlinks:}}
    {{=B(T('edit views:'))}} {{=XML(', '.join([v.xml() for v in editviewlinks]))}} {{pass}}

    {{pass}}
    {{=IMG(_src=URL('static', 'images/save_icon.png'), _alt=T('Save'))}} {{=T('Saved file hash:')}} {{=T('Last saved on:')}} {{if TEXT_EDITOR=='amy':}} {{else:}} {{pass}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/downgrade_web2py.html0000644000175000017500000000106211724764235026421 0ustar josejose{{extend 'default.mobile/layout.html'}} {{block sectionclass}}upgrade{{end}}

    {{=T('web2py downgrade')}}

    {{=T('ATTENTION:')}} {{=T('This is an experimental feature and it needs more testing. If you decide to downgrade you do it at your own risk')}}
    {{=T('If start the downgrade, be patient, it may take a while to rollback')}}

    {{=FORM(INPUT(_type='submit',_name='nodowngrade',_value=T('Cancel')), _class='inline')}} {{=FORM(INPUT(_type='submit',_name='downgrade',_value=T('Downgrade')), _class='inline')}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/delete_plugin.html0000644000175000017500000000047211724764235026003 0ustar josejose{{extend 'default.mobile/layout.html'}} {{block sectionclass}}delete_plugin{{end}}

    {{=T('Are you sure you want to delete plugin "%s"?', plugin)}}

    {{=FORM(INPUT(_type='submit',_name='nodelete',_value=T('NO')))}}

    {{=FORM(INPUT(_type='submit',_name='delete',_value=T('YES')))}}

    web2py-1.99.7.orig/applications/admin/views/default.mobile/layout.html0000644000175000017500000001115111724764235024474 0ustar josejose web2py mobile admin {{include 'web2py_ajax.html'}}

    web2py mobile admin/{{block sectionclass}}{{end}}

    {{block header}} {{if 'auth' in globals():}} {{if not auth.user:}} Login {{else:}} Logout {{pass}} {{pass}} {{=T("Home")}} {{end}}
    {{if response.flash:}}
    {{=response.flash}}
    {{pass}} {{if response.menu:}}
    • {{=T("Main Menu")}}
    • {{for _ in response.menu:}}
    • {{=_[0]}}
    • {{pass}}
    {{pass}} {{include}}
    {{block footer}} powered by web2py - @2011 {{end}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/design.html0000644000175000017500000001776411724764235024450 0ustar josejose{{extend 'default.mobile/layout.html'}} {{ def A_info(*a,**b): b['_data-role'] = 'button' b['_data-icon'] = 'info' b['_data-theme'] = 'b' return A(*a,**b) def A_gear(*a,**b): b['_data-role'] = 'button' b['_data-icon'] = 'gear' return A(*a,**b) def A_delete(*a,**b): b['_data-role'] = 'button' b['_data-icon'] = 'delete' return A(*a,**b) def A_check(*a,**b): b['_data-role'] = 'button' b['_data-icon'] = 'check' return A(*a,**b) def all(items): return reduce(lambda a,b:a and b,items,True) def peekfile(path,file): return A_info(file.replace('\\\\','/'),_href=URL('peek', args=(app, path, file))) def editfile(path,file): return A_gear(SPAN(T('Edit')),_href=URL('edit', args=(app, path, file))) def testfile(path,file): return A_check(SPAN(T('Run tests')), _href=URL('test', args=(app, file))) def editlanguagefile(path,file): return A_gear(SPAN(T('Edit')),_href=URL('edit_language', args=(app, path, file))) def file_upload_form(location): form=FORM(T("upload file:")," ", INPUT(_type="file",_name="file")," ",T("and rename it:")," ", INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY), INPUT(_type="hidden",_name="location",_value=location), INPUT(_type="hidden",_name="sender",_value=URL('design',args=app)), INPUT(_type="submit",_value=T("upload")),_action=URL('upload_file')) return form def file_create_form(location): form=FORM(T("create file with filename:")," ", INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY), INPUT(_type="hidden",_name="location",_value=location), INPUT(_type="hidden",_name="sender",_value=URL('design',args=app)), INPUT(_type="submit",_value=T("Create")),_action=URL('create_file')) return form def upload_plugin_form(app): form=FORM(T("upload plugin file:")," ", INPUT(_type="file",_name="pluginfile"), INPUT(_type="submit",_value=T("upload"))) return form def deletefile(arglist): return A_delete(SPAN(T('Delete')), _href=URL('delete',args=arglist,vars=dict(sender=request.function+'/'+app))) }} {{block sectionclass}}design {{=app}}{{end}}

    {{=T("Models")}}

    {{if not models:}}

    {{=T("There are no models")}}

    {{else:}}
    {{=button(URL(a=app,c='appadmin',f='index'), T('database administration'))}} {{if os.access(os.path.join(request.folder,'..',app,'databases','sql.log'),os.R_OK):}} {{=button(URL('peek/%s/databases/sql.log'%app), 'sql.log')}} {{pass}}
    {{pass}} {{for m in models:}} {{=peekfile('models',m)}} {{=editfile('models',m)}} {{=deletefile([app, 'models', m])}}
    {{pass}}
    {{=file_create_form('%s/models/' % app)}}
    {{ controller_functions=[] for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functions[c]] }}

    {{=T("Controllers")}}

    {{if not controllers:}}

    {{=T("There are no controllers")}}

    {{else:}}
    {{=button(URL(r=request,c='shell',f='index',args=app), T("shell"))}} {{=button(URL('test',args=app), T("test"))}} {{=button(URL('edit',args=[app,'cron','crontab']), T("crontab"))}}
    {{pass}} {{for c in controllers:}} {{=peekfile('controllers',c)}} {{=editfile('controllers',c)}} {{=deletefile([app, 'controllers', c])}} {{=testfile('controllers',c)}}
    {{pass}}
    {{=file_create_form('%s/controllers/' % app)}}

    {{=T("Views")}}

    {{=button(LAYOUTS_APP, T("download layouts"))}}
    {{if not views:}}

    {{=T("There are no views")}}

    {{pass}} {{for c in views:}} {{=peekfile('views',c)}} {{=editfile('views',c)}} {{=deletefile([app, 'views', c])}}
    {{pass}}
    {{=file_create_form('%s/views/' % app)}}

    {{=T("Languages")}}

    {{=button(URL('update_languages/'+app), T('update all languages'))}}
    {{if not languages:}}

    {{=T("There are no translators")}}

    {{pass}} {{for file in languages:}} {{=peekfile('languages',file)}} {{=editlanguagefile('languages',file)}} {{=deletefile([app, 'languages', file])}}
    {{pass}}
    {{=file_create_form('%s/languages/' % app)}}

    {{=T("Static files")}}

    {{if not statics:}}

    {{=T("There are no static files")}}

    {{pass}}
      {{ tree={} for file in statics+['']: items=file.partition('/') if not items[0] in tree: tree[items[0]] = [] pass tree[items[0]].append(items[2]) pass }} {{for k, v in sorted(tree.items()):}} {{if k:}}
    • {{=k}}

        {{if len(v) == 1 and v[0] =='':}} {{=peekfile('static', k)}} {{=editfile('static', k)}} {{=deletefile([app, 'static', k])}}
      {{continue}} {{for f in v:}} {{=peekfile('static/'+k, f)}} {{=editfile('static/'+k, f)}} {{=deletefile([app, 'static/'+k, f])}}
      {{pass}}
    {{pass}} {{pass}}
    {{=file_create_form('%s/static/' % app)}} {{=file_upload_form('%s/static/' % app)}}

    {{=T("Modules")}}

    {{if not modules:}}

    {{=T("There are no modules")}}

    {{pass}} {{for m in modules:}} {{=peekfile('modules',m)}} {{=editfile('modules',m)}} {{if m!='__init__.py':}}{{=deletefile([app, 'modules', m])}}{{pass}} {{pass}}
    {{=file_create_form('%s/modules/' % app)}} {{=file_upload_form('%s/modules/' % app)}}

    {{=T("Plugins")}}

    {{=button(PLUGINS_APP, T('download plugins'))}}
    {{if plugins:}}
    {{for plugin in plugins:}} {{=button(URL('plugin', args=[app, plugin]), 'plugin_%s' % plugin)}} {{pass}}
    {{else:}}

    {{=T('There are no plugins')}}

    {{pass}}
    {{=upload_plugin_form(app)}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/resolve.html0000644000175000017500000000127111724764235024640 0ustar josejose{{extend 'default.mobile/layout.html'}} {{block sectionclass}}resolve{{end}}

    {{=T('Resolve Conflict file')}} "{{=filename}}"

    {{=diff}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/plugin.html0000644000175000017500000001412011724764235024454 0ustar josejose{{extend 'default.mobile/layout.html'}} {{ import os def A_info(*a,**b): b['_data-role'] = 'button' b['_data-icon'] = 'info' b['_data-theme'] = 'b' return A(*a,**b) def A_gear(*a,**b): b['_data-role'] = 'button' b['_data-icon'] = 'gear' return A(*a,**b) def A_delete(*a,**b): b['_data-role'] = 'button' b['_data-icon'] = 'delete' return A(*a,**b) def A_check(*a,**b): b['_data-role'] = 'button' b['_data-icon'] = 'check' return A(*a,**b) def all(items): return reduce(lambda a,b:a and b,items,True) def peekfile(path,file): return A_info(file.replace('\\\\','/'),_href=URL('peek', args=(app, path, file))) def editfile(path,file): return A_gear(SPAN(T('Edit')),_href=URL('edit', args=(app, path, file))) def testfile(path,file): return A_check(SPAN(T('Run tests')), _href=URL('test', args=(app, file))) def editlanguagefile(path,file): return A_gear(SPAN(T('Edit')),_href=URL('edit_language', args=(app, path, file))) def file_upload_form(location): form=FORM(T("upload file:")," ", INPUT(_type="file",_name="file")," ",T("and rename it:")," ", INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY), INPUT(_type="hidden",_name="location",_value=location), INPUT(_type="hidden",_name="sender",_value=URL('design/'+app)), INPUT(_type="submit",_value=T("submit")),_action=URL('upload_file')) return form def file_create_form(location): form=FORM(T("create file with filename:")," ", INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY), INPUT(_type="hidden",_name="location",_value=location), INPUT(_type="hidden",_name="sender",_value=URL('design/'+app)), INPUT(_type="submit",_value=T("submit")),_action=URL('create_file')) return form def upload_plugin_form(app): form=FORM(T("upload plugin file:")," ", INPUT(_type="file",_name="pluginfile"), INPUT(_type="submit",_value=T("submit"))) return form def deletefile(arglist): return A_delete(SPAN(T('Delete')), _href=URL('delete',args=arglist,vars=dict(sender=request.function+'/'+app))) }} {{block sectionclass}}plugin{{end}}

    {{=T('Plugin "%s" in application', request.args(1))}} "{{=app}}"

    {{=sp_button(URL('plugin',args=app), T("back"))}} {{=sp_button(URL('delete_plugin',args=request.args), T("delete plugin"))}} {{=sp_button(URL('pack_plugin',args=request.args), T("pack plugin"))}}

    {{=T("Models")}}

    {{if not models:}}

    {{=T("There are no models")}}

    {{pass}} {{for m in models:}} {{=editfile('models',m)}} {{=deletefile([app, 'models', m])}} {{=peekfile('models',m)}} {{pass}}
    {{ controller_functions=[] for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functions[c]] }}

    {{=T("Controllers")}}

    {{if not controllers:}}

    {{=T("There are no controllers")}}

    {{pass}} {{for c in controllers:}} {{=editfile('controllers',c)}} {{=deletefile([app,'controllers',c])}} {{=testfile('controllers',c)}} {{=peekfile('controllers',c)}} {{pass}}

    {{=T("Views")}}

    {{if not views:}}

    {{=T("There are no views")}}

    {{pass}} {{for c in views:}} {{=peekfile('views',c)}} {{=editfile('views',c)}} {{=deletefile([app,'views',c])}} {{pass}}

    {{=T("Static files")}}

    {{if not statics:}}

    {{=T("There are no static files")}}

    {{pass}}
      {{ from collections import OrderedDict tree=OrderedDict() for file in statics+['']: items=file.partition('/') if not items[0] in tree: tree[items[0]] = [] pass tree[items[0]].append(items[2]) pass }} {{for k, v in tree.iteritems():}} {{if k:}}
    • {{=k}}

        {{if len(v) == 1 and v[0] =='':}} {{=peekfile('static', k)}} {{=editfile('static', k)}} {{=deletefile([app, 'static', k])}}
      {{continue}} {{for f in v:}} {{=peekfile('static/'+k, f)}} {{=editfile('static/'+k, f)}} {{=deletefile([app, 'static/'+k, f])}}
      {{pass}}
    {{pass}} {{pass}}

    {{=T("Modules")}}

    {{if not modules:}}

    {{=T("There are no modules")}}

    {{pass}} {{for m in modules:}} {{=peekfile('modules',m)}} {{=editfile('modules',m)}} {{if m!='__init__.py':}}{{=T("delete")}}{{pass}} {{pass}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/change_password.html0000644000175000017500000000022111724764235026322 0ustar josejose{{extend 'default.mobile/layout.html'}} {{block sectionclass}}change_password{{end}}

    Change Admin Password

    {{=form}}
    web2py-1.99.7.orig/applications/admin/views/default.mobile/site.html0000644000175000017500000000307111724764235024125 0ustar josejose{{extend 'default.mobile/layout.html'}} {{import os, glob}} {{block sectionclass}}site{{end}}

    {{=T("Installed applications")}}

      {{for a in apps:}}
    • {{if a==request.application:}}

      {{=a}} ({{=T('currently running')}})

      {{else:}}

      {{=a}}

      {{if MULTI_USER_MODE and db.app(name=a):}}

      created by {{="%(first_name)s %(last_name)s" % db.auth_user[db.app(name=a).owner]}}

      {{pass}} {{pass}}
        {{if a!=request.application:}} {{=LI(A(T('Goto'),_rel="external",_href=URL(a,'default','index')))}} {{if not os.path.exists('applications/%s/compiled' % a):}} {{=LI(A(T('Edit'),_href=URL('design',args=a)))}} {{else:}} {{=LI(A(T('appadmin'),_rel="external",_href=URL(a,'appadmin','index')))}} {{pass}} {{=LI(A(T('About'),_href=URL('about',args=a)))}} {{pass}} {{=LI(A(T('Errors'),_href=URL('errors',args=a)))}} {{=LI(A(T('Clean'),_href=URL('cleanup',args=a)))}} {{if not os.path.exists('applications/%s/compiled' % a):}} {{=LI(A(T('Compile'),_href=URL('compile_app',args=a)))}} {{else:}} {{=LI(A(T('Pack compiled'),_href=URL('pack',args=(a, 'compiled'))))}} {{if glob.glob('applications/%s/controllers/*.py' % a):}} {{=LI(A(T('Remove compiled'),_href=URL('remove_compiled_app',args=a)))}} {{pass}} {{pass}} {{if a!=request.application:}} {{=LI(A(T('Uninstall'),_href=URL('uninstall',args=a)))}} {{=LI(button_enable(URL('enable',args=a), a))}} {{pass}}
    • {{pass}}
    web2py-1.99.7.orig/applications/admin/views/toolbar/0000755000175000017500000000000011724764235021042 5ustar josejoseweb2py-1.99.7.orig/applications/admin/views/toolbar/index.html0000644000175000017500000000132611724764235023041 0ustar josejose {{response.files.append(URL('static','js/jquery.js'))}} {{include 'web2py_ajax.html'}}
    URL: {{=URL(app,'default','index')}}
    web2py-1.99.7.orig/applications/admin/views/generic.html0000644000175000017500000000064611724764235021710 0ustar josejose{{extend 'layout.html'}} {{""" You should not modify this file. It is used as default when a view is not provided for your controllers """}}

    {{=' '.join(x.capitalize() for x in request.function.split('_'))}}

    {{if len(response._vars)==1:}} {{=BEAUTIFY(response._vars.values()[0])}} {{elif len(response._vars)>1:}} {{=BEAUTIFY(response._vars)}} {{pass}} {{if request.is_local:}} {{=response.toolbar()}} {{pass}} web2py-1.99.7.orig/applications/admin/views/layout.html0000644000175000017500000000402211724764235021601 0ustar josejose {{=response.title or URL()}} {{response.files.append(URL('static','css/styles.css'))}} {{include 'web2py_ajax.html'}}
    {{=response.flash or ''}}
    {{include}}
    web2py-1.99.7.orig/applications/admin/views/mercurial/0000755000175000017500000000000011724764235021363 5ustar josejoseweb2py-1.99.7.orig/applications/admin/views/mercurial/commit.html0000644000175000017500000000131211724764235023536 0ustar josejose{{extend 'layout.html'}} {{import time}}

    Mercurial Version Control System Interface
    for application "{{=request.args[0]}}"

    Commit form

    {{=form}} {{if repo['.'].rev()>=0:}}

    Last Revision

    Revision:{{=repo['.'].rev()}}
    Node:{{=repo['.']}}
    Created by:{{=repo['.'].user()}}
    Created on:{{=time.ctime(repo['.'].date()[0])}}
    Description:{{=repo['.'].description()}}

    Past revisions

    {{=changes}}
    {{if files:}}

    Committed files

    {{=files}}
    {{pass}} {{pass}} web2py-1.99.7.orig/applications/admin/views/mercurial/revision.html0000644000175000017500000000030311724764235024103 0ustar josejose{{extend 'layout.html'}}

    Revision {{=rev}}

    {{=form}}

    Changelog

    {{=desc}}

    Files added

    {{=TABLE(*[TR(f) for f in files])}} web2py-1.99.7.orig/applications/admin/views/plugin_jqmobile/0000755000175000017500000000000011724764235022560 5ustar josejoseweb2py-1.99.7.orig/applications/admin/views/plugin_jqmobile/index.html0000644000175000017500000000152011724764235024553 0ustar josejose{{extend 'plugin_jqmobile/layout.html'}} {{block header}} {{if 'auth' in globals():}} {{if not auth.user:}} Login {{else:}} Logout {{pass}} {{pass}} {{=T("Home")}} {{end}}
    Search results for tag: {{='tag'}}
      {{if True:}}
    • Pages
    • {{for child in ('dog','cat','mouse'):}} {{title = child}}
    • {{=child}}
    • {{pass}} {{pass}}
    {{for tag in ('dog','cat','mouse'):}} {{=tag}} {{pass}}
    web2py-1.99.7.orig/applications/admin/views/plugin_jqmobile/about.html0000644000175000017500000000345411724764235024566 0ustar josejose jQuery Mobile Plugin for web2py

    web2py plugin

    for jQuery Mobile

    Try click on a button on the left, it is a demo!

    License

    MIT (same as jQuery Mobile)

    Instructions

    • Download and install the plugin in a web2py app.
    • Replace extend "layout.html" with extend "plugin_jqmobile/layout.html" in all your views.
    • Only link pages that extend this layout.
    • Link external pages with <a rel="external" ...>.
    • Optional: make a different response.menu for each action.

    Created by

    • Jason Blum
    • Timothy Stockman
    • Harkirat Singh
    • Massimo Di Pierro
    web2py-1.99.7.orig/applications/admin/views/plugin_jqmobile/layout.html0000644000175000017500000001115011724764235024761 0ustar josejose {{=response.title or request.application}} {{include 'web2py_ajax.html'}}

    {{=response.title}}

    {{block header}} {{if 'auth' in globals():}} {{if not auth.user:}} Login {{else:}} Logout {{pass}} {{pass}} {{=T("Home")}} {{end}}
    {{if response.flash:}}
    {{=response.flash}}
    {{pass}} {{if response.menu:}}
    • {{=T("Main Menu")}}
    • {{for _ in response.menu:}}
    • {{=_[0]}}
    • {{pass}}
    {{pass}} {{include}}
    {{block footer}} powered by web2py - @2011 {{end}}
    web2py-1.99.7.orig/applications/admin/views/appadmin.html0000644000175000017500000002125411724764235022063 0ustar josejose{{extend 'layout.html'}} {{if request.function=='index':}}

    {{=T("Available databases and tables")}}

    {{if not databases:}}{{=T("No databases in this application")}}{{pass}} {{for db in sorted(databases):}} {{for table in databases[db].tables:}} {{qry='%s.%s.id>0'%(db,table)}} {{tbl=databases[db][table]}} {{if hasattr(tbl,'_primarykey'):}} {{if tbl._primarykey:}} {{firstkey=tbl[tbl._primarykey[0]]}} {{if firstkey.type in ['string','text']:}} {{qry='%s.%s.%s!=""'%(db,table,firstkey.name)}} {{else:}} {{qry='%s.%s.%s>0'%(db,table,firstkey.name)}} {{pass}} {{else:}} {{qry=''}} {{pass}} {{pass}}

    {{=A("%s.%s" % (db,table),_href=URL('select',args=[db],vars=dict(query=qry)))}}

    [ {{=A(str(T('insert new'))+' '+table,_href=URL('insert',args=[db,table]))}} ]

    {{pass}} {{pass}} {{elif request.function=='select':}}

    {{=XML(str(T("database %s select"))%A(request.args[0],_href=URL('index'))) }}

    {{if table:}} [ {{=A(str(T('insert new %s'))%table,_href=URL('insert',args=[request.args[0],table]))}} ]

    {{=T("Rows in table")}}


    {{else:}}

    {{=T("Rows selected")}}


    {{pass}} {{=form}}

    {{=T('The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.')}}
    {{=T('Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.')}}
    {{=T('"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN')}}



    {{=nrows}} {{=T("selected")}}

    {{if start>0:}}[ {{=A(T('previous 100 rows'),_href=URL('select',args=request.args[0],vars=dict(start=start-100)))}} ]{{pass}} {{if stop {{linkto=URL('update',args=request.args[0])}} {{upload=URL('download',args=request.args[0])}} {{=SQLTABLE(rows,linkto,upload,orderby=True,_class='sortable')}}
    {{pass}}

    {{=T("Import/Export")}}


    [ {{=T("export as csv file")}} ] {{if table:}} {{=FORM(str(T('or import from csv file'))+" ",INPUT(_type='file',_name='csvfile'),INPUT(_type='hidden',_value=table,_name='table'),INPUT(_type='submit',_value='import'))}} {{pass}} {{elif request.function=='insert':}}

    {{=T("database")}} {{=A(request.args[0],_href=URL('index'))}} {{if hasattr(table,'_primarykey'):}} {{fieldname=table._primarykey[0]}} {{dbname=request.args[0]}} {{tablename=request.args[1]}} {{cond = table[fieldname].type in ['string','text'] and '!=""' or '>0'}} {{=T("table")}} {{=A(tablename,_href=URL('select',args=dbname,vars=dict(query='%s.%s.%s%s'%(dbname,tablename,fieldname,cond))))}} {{else:}} {{=T("table")}} {{=A(request.args[1],_href=URL('select',args=request.args[0],vars=dict(query='%s.%s.id>0'%tuple(request.args[:2]))))}} {{pass}}

    {{=T("New Record")}}


    {{=form}} {{elif request.function=='update':}}

    {{=T("database")}} {{=A(request.args[0],_href=URL('index'))}} {{if hasattr(table,'_primarykey'):}} {{fieldname=request.vars.keys()[0]}} {{dbname=request.args[0]}} {{tablename=request.args[1]}} {{cond = table[fieldname].type in ['string','text'] and '!=""' or '>0'}} {{=T("table")}} {{=A(tablename,_href=URL('select',args=dbname,vars=dict(query='%s.%s.%s%s'%(dbname,tablename,fieldname,cond))))}} {{=T("record")}} {{=A('%s=%s'%request.vars.items()[0],_href=URL('update',args=request.args[:2],vars=request.vars))}} {{else:}} {{=T("table")}} {{=A(request.args[1],_href=URL('select',args=request.args[0],vars=dict(query='%s.%s.id>0'%tuple(request.args[:2]))))}} {{=T("record id")}} {{=A(request.args[2],_href=URL('update',args=request.args[:3]))}} {{pass}}

    {{=T("Edit current record")}}



    {{=form}} {{elif request.function=='state':}}

    {{=T("Internal State")}}

    {{=T("Current request")}}

    {{=BEAUTIFY(request)}}

    {{=T("Current response")}}

    {{=BEAUTIFY(response)}}

    {{=T("Current session")}}

    {{=BEAUTIFY(session)}} {{elif request.function == 'ccache':}}

    Cache

    Statistics

    Overview

    Number of entries: {{=total['entries']}} {{if total['entries'] > 0:}}

    Hit Ratio: {{=total['ratio']}}% ({{=total['hits']}} hits and {{=total['misses']}} misses)

    Size of cache: {{if object_stats:}} {{=total['objects']}} items, {{=total['bytes']}} bytes {{if total['bytes'] > 524287:}} ({{="%.0d" % (total['bytes'] / 1048576)}} MB) {{pass}} {{else:}} not available (requires the Python guppy library) {{pass}}

    Cache contains items up to {{="%02d" % total['oldest'][0]}} hours {{="%02d" % total['oldest'][1]}} minutes {{="%02d" % total['oldest'][2]}} seconds old.

    {{=BUTTON(T('Cache Keys'), _onclick='jQuery("#all_keys").toggle();')}}
    {{pass}}

    RAM

    Number of entries: {{=ram['entries']}} {{if ram['entries'] > 0:}}

    Hit Ratio: {{=ram['ratio']}}% ({{=ram['hits']}} hits and {{=ram['misses']}} misses)

    Size of cache: {{if object_stats:}} {{=ram['objects']}} items, {{=ram['bytes']}} bytes {{if ram['bytes'] > 524287:}} ({{=ram['bytes'] / 1048576}} MB) {{pass}} {{else:}} not available (requires the Python guppy library) {{pass}}

    RAM contains items up to {{="%02d" % ram['oldest'][0]}} hours {{="%02d" % ram['oldest'][1]}} minutes {{="%02d" % ram['oldest'][2]}} seconds old.

    {{=BUTTON(T('RAM Cache Keys'), _onclick='jQuery("#ram_keys").toggle();')}}
    {{pass}}

    DISK

    Number of entries: {{=disk['entries']}} {{if disk['entries'] > 0:}}

    Hit Ratio: {{=disk['ratio']}}% ({{=disk['hits']}} hits and {{=disk['misses']}} misses)

    Size of cache: {{if object_stats:}} {{=disk['objects']}} items, {{=disk['bytes']}} bytes {{if disk['bytes'] > 524287:}} ({{=disk['bytes'] / 1048576}} MB) {{pass}} {{else:}} not available (requires the Python guppy library) {{pass}}

    DISK contains items up to {{="%02d" % disk['oldest'][0]}} hours {{="%02d" % disk['oldest'][1]}} minutes {{="%02d" % disk['oldest'][2]}} seconds old.

    {{=BUTTON(T('Disk Cache Keys'), _onclick='jQuery("#disk_keys").toggle();')}}
    {{pass}}

    Manage Cache

    {{=form}}

    {{pass}} web2py-1.99.7.orig/applications/admin/LICENSE0000644000175000017500000001525211724764235017255 0ustar josejose## Web2py License Web2py is Licensed under the LGPL license version 3 (http://www.gnu.org/licenses/lgpl.html) Copyrighted (c) by Massimo Di Pierro (2007-2011) ### On Commercial Redistribution In accordance with LGPL you may: - redistribute web2py with your apps (including official web2py binary versions) - release your applications which use official web2py libraries under any license you wish But you must: - make clear in the documentation that your application uses web2py - release any modification of the web2py libraries under the LGPLv3 license THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. (Earlier versions of web2py, 1.0.*-1.90.*, were released under the GPL2 license plus a commercial exception which, for practical purposes, was very similar to the current LPGLv3) ### Licenses for third party contributed software web2py contains third party software under the gluon/contrib/ folder. Each file/module in contrib is distributed with web2py under its original license. Here we list some of them. #### gluon.contrib.simplejson LICENSE Copyright (c) 2006 Bob Ippolito - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #### gluon.contrib.rss2.py (originally PyRSS2Gen) LICENSE This is copyright (c) by Dalke Scientific Software, LLC and released under the BSD license. See the file LICENSE in the distribution or for details. #### gluon.contrib.markdown (markdown2) LICENSE MIT License from from #### gluon.contrib.feedparser LICENSE Copyright (c) 2002-2005, Mark Pilgrim All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #### gluon.wsgiserver.py LICENSE (borrowed from cherrypy) Copyright (c) 2004, CherryPy Team (team@cherrypy.org) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the CherryPy Team nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #### gluon.contrib.pam LICENSE Copyright (C) 2007-2009 Chris AtLee Licensed under the MIT license #### gluon.contrib.shell LICENSE Copyright (C) by Google inc. Apache 2.0 Lincense #### The javascript licenses are in the code itself web2py-1.99.7.orig/applications/admin/cron/0000755000175000017500000000000011724764235017204 5ustar josejoseweb2py-1.99.7.orig/applications/admin/cron/expire_sessions.py0000644000175000017500000000150311724764235022777 0ustar josejoseEXPIRATION_MINUTES=60 DIGITS=('0','1','2','3','4','5','6','7','8','9') import os, time, stat, cPickle, logging path=os.path.join(request.folder,'sessions') if not os.path.exists(path): os.mkdir(path) now=time.time() for filename in os.listdir(path): fullpath=os.path.join(path,filename) if os.path.isfile(fullpath) and filename.startswith(DIGITS): try: filetime = os.stat(fullpath)[stat.ST_MTIME] # get it before our io try: session_data = cPickle.load(open(fullpath, 'rb+')) expiration = session_data['auth']['expiration'] except: expiration = EXPIRATION_MINUTES * 60 if (now - filetime) > expiration: os.unlink(fullpath) except: logging.exception('failure to check %s'%fullpath) web2py-1.99.7.orig/applications/admin/cron/crontab0000644000175000017500000000007611724764235020562 0ustar josejose10 * * * * root **applications/admin/cron/expire_sessions.py web2py-1.99.7.orig/applications/admin/languages/0000755000175000017500000000000011724764235020211 5ustar josejoseweb2py-1.99.7.orig/applications/admin/languages/pl-pl.py0000644000175000017500000003434511724764235021620 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Uaktualnij" jest dodatkowym wyrażeniem postaci "pole1=\'nowawartość\'". Nie możesz uaktualnić lub usunąć wyników z JOIN:', '%Y-%m-%d': '%Y-%m-%d', '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', '%s rows deleted': 'Wierszy usuniętych: %s', '%s rows updated': 'Wierszy uaktualnionych: %s', '(requires internet access)': '(requires internet access)', '(something like "it-it")': '(coś podobnego do "it-it")', 'A new version of web2py is available': 'Nowa wersja web2py jest dostępna', 'A new version of web2py is available: %s': 'A new version of web2py is available: %s', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'UWAGA: Wymagane jest bezpieczne (HTTPS) połączenie lub połączenia z lokalnego adresu.', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.', 'ATTENTION: you cannot edit the running application!': 'UWAGA: nie można edytować uruchomionych aplikacji!', 'About': 'Informacje o', 'About application': 'Informacje o aplikacji', 'Admin is disabled because insecure channel': 'Admin is disabled because insecure channel', 'Admin is disabled because unsecure channel': 'Panel administracyjny wyłączony z powodu braku bezpiecznego połączenia', 'Admin language': 'Admin language', 'Administrator Password:': 'Hasło administratora:', 'Application name:': 'Application name:', 'Are you sure you want to delete file "%s"?': 'Czy na pewno chcesz usunąć plik "%s"?', 'Are you sure you want to delete plugin "%s"?': 'Are you sure you want to delete plugin "%s"?', 'Are you sure you want to uninstall application "%s"': 'Czy na pewno chcesz usunąć aplikację "%s"', 'Are you sure you want to uninstall application "%s"?': 'Czy na pewno chcesz usunąć aplikację "%s"?', 'Are you sure you want to upgrade web2py now?': 'Are you sure you want to upgrade web2py now?', 'Available databases and tables': 'Dostępne bazy danych i tabele', 'Cannot be empty': 'Nie może być puste', 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Nie można skompilować: w Twojej aplikacji są błędy . Znajdź je, popraw a następnie spróbój ponownie.', 'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:', 'Check to delete': 'Zaznacz aby usunąć', 'Checking for upgrades...': 'Checking for upgrades...', 'Controllers': 'Kontrolery', 'Create new simple application': 'Utwórz nową aplikację', 'Current request': 'Aktualne żądanie', 'Current response': 'Aktualna odpowiedź', 'Current session': 'Aktualna sesja', 'DESIGN': 'PROJEKTUJ', 'Date and Time': 'Data i godzina', 'Delete': 'Usuń', 'Delete:': 'Usuń:', 'Deploy on Google App Engine': 'Umieść na Google App Engine', 'Design for': 'Projekt dla', 'EDIT': 'EDYTUJ', 'Edit application': 'Edycja aplikacji', 'Edit current record': 'Edytuj aktualny rekord', 'Editing Language file': 'Editing Language file', 'Editing file': 'Edycja pliku', 'Editing file "%s"': 'Edycja pliku "%s"', 'Enterprise Web Framework': 'Enterprise Web Framework', 'Error logs for "%(app)s"': 'Wpisy błędów dla "%(app)s"', 'Exception instance attributes': 'Exception instance attributes', 'Functions with no doctests will result in [passed] tests.': 'Functions with no doctests will result in [passed] tests.', 'Hello World': 'Witaj Świecie', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.', 'Import/Export': 'Importuj/eksportuj', 'Installed applications': 'Zainstalowane aplikacje', 'Internal State': 'Stan wewnętrzny', 'Invalid Query': 'Błędne zapytanie', 'Invalid action': 'Błędna akcja', 'Language files (static strings) updated': 'Language files (static strings) updated', 'Languages': 'Tłumaczenia', 'Last saved on:': 'Ostatnio zapisany:', 'License for': 'Licencja dla', 'Login': 'Zaloguj', 'Login to the Administrative Interface': 'Logowanie do panelu administracyjnego', 'Models': 'Modele', 'Modules': 'Moduły', 'NO': 'NIE', 'New Record': 'Nowy rekord', 'New application wizard': 'New application wizard', 'New simple application': 'New simple application', 'No databases in this application': 'Brak baz danych w tej aplikacji', 'Original/Translation': 'Oryginał/tłumaczenie', 'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here', 'Peeking at file': 'Podgląd pliku', 'Plugin "%s" in application': 'Plugin "%s" in application', 'Plugins': 'Plugins', 'Powered by': 'Powered by', 'Query:': 'Zapytanie:', 'Resolve Conflict file': 'Resolve Conflict file', 'Rows in table': 'Wiersze w tabeli', 'Rows selected': 'Wierszy wybranych', 'Saved file hash:': 'Suma kontrolna zapisanego pliku:', 'Static files': 'Pliki statyczne', 'Sure you want to delete this object?': 'Czy na pewno chcesz usunąć ten obiekt?', 'TM': 'TM', 'Testing application': 'Testing application', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Zapytanie" jest warunkiem postaci "db.tabela1.pole1==\'wartość\'". Takie coś jak "db.tabela1.pole1==db.tabela2.pole2" oznacza SQL JOIN.', 'There are no controllers': 'Brak kontrolerów', 'There are no models': 'Brak modeli', 'There are no modules': 'Brak modułów', 'There are no static files': 'Brak plików statycznych', 'There are no translators, only default language is supported': 'Brak plików tłumaczeń, wspierany jest tylko domyślny język', 'There are no views': 'Brak widoków', 'This is the %(filename)s template': 'To jest szablon %(filename)s', 'Ticket': 'Bilet', 'To create a plugin, name a file/folder plugin_[name]': 'To create a plugin, name a file/folder plugin_[name]', 'Unable to check for upgrades': 'Nie można sprawdzić aktualizacji', 'Unable to download': 'Nie można ściągnąć', 'Unable to download app because:': 'Unable to download app because:', 'Unable to download because': 'Unable to download because', 'Update:': 'Uaktualnij:', 'Upload & install packed application': 'Upload & install packed application', 'Upload a package:': 'Upload a package:', 'Upload existing application': 'Wyślij istniejącą aplikację', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Użyj (...)&(...) jako AND, (...)|(...) jako OR oraz ~(...) jako NOT do tworzenia bardziej skomplikowanych zapytań.', 'Use an url:': 'Use an url:', 'Version': 'Version', 'Views': 'Widoki', 'Welcome to web2py': 'Witaj w web2py', 'YES': 'TAK', 'About': 'informacje', 'additional code for your application': 'dodatkowy kod Twojej aplikacji', 'admin disabled because no admin password': 'panel administracyjny wyłączony z powodu braku hasła administracyjnego', 'admin disabled because not supported on google app engine': 'admin disabled because not supported on google apps engine', 'admin disabled because unable to access password file': 'panel administracyjny wyłączony z powodu braku dostępu do pliku z hasłem', 'administrative interface': 'administrative interface', 'and rename it (required):': 'i nadaj jej nową nazwę (wymagane):', 'and rename it:': 'i nadaj mu nową nazwę:', 'appadmin': 'administracja aplikacji', 'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel', 'application "%s" uninstalled': 'aplikacja "%s" została odinstalowana', 'application compiled': 'aplikacja została skompilowana', 'application is compiled and cannot be designed': 'aplikacja jest skompilowana i nie może być projektowana', 'arguments': 'arguments', 'back': 'back', 'cache': 'cache', 'cache, errors and sessions cleaned': 'pamięć podręczna, bilety błędów oraz pliki sesji zostały wyczyszczone', 'cannot create file': 'nie można utworzyć pliku', 'cannot upload file "%(filename)s"': 'nie można wysłać pliku "%(filename)s"', 'Change admin password': 'change admin password', 'check all': 'zaznacz wszystko', 'Check for upgrades': 'check for upgrades', 'Clean': 'oczyść', 'click here for online examples': 'kliknij aby przejść do interaktywnych przykładów', 'click here for the administrative interface': 'kliknij aby przejść do panelu administracyjnego', 'click to check for upgrades': 'kliknij aby sprawdzić aktualizacje', 'code': 'code', 'Compile': 'skompiluj', 'compiled application removed': 'skompilowana aplikacja została usunięta', 'controllers': 'kontrolery', 'Create': 'create', 'create file with filename:': 'utwórz plik o nazwie:', 'create new application:': 'utwórz nową aplikację:', 'created by': 'created by', 'crontab': 'crontab', 'currently running': 'currently running', 'currently saved or': 'aktualnie zapisany lub', 'data uploaded': 'dane wysłane', 'database': 'baza danych', 'database %s select': 'wybór z bazy danych %s', 'database administration': 'administracja bazy danych', 'db': 'baza danych', 'defines tables': 'zdefiniuj tabele', 'delete': 'usuń', 'delete all checked': 'usuń wszystkie zaznaczone', 'delete plugin': 'delete plugin', 'Deploy': 'deploy', 'design': 'projektuj', 'direction: ltr': 'direction: ltr', 'done!': 'zrobione!', 'Edit': 'edytuj', 'edit controller': 'edytuj kontroler', 'edit views:': 'edit views:', 'Errors': 'błędy', 'export as csv file': 'eksportuj jako plik csv', 'exposes': 'eksponuje', 'extends': 'rozszerza', 'failed to reload module': 'nie udało się przeładować modułu', 'failed to reload module because:': 'failed to reload module because:', 'file "%(filename)s" created': 'plik "%(filename)s" został utworzony', 'file "%(filename)s" deleted': 'plik "%(filename)s" został usunięty', 'file "%(filename)s" uploaded': 'plik "%(filename)s" został wysłany', 'file "%(filename)s" was not deleted': 'plik "%(filename)s" nie został usunięty', 'file "%s" of %s restored': 'plik "%s" z %s został odtworzony', 'file changed on disk': 'plik na dysku został zmieniony', 'file does not exist': 'plik nie istnieje', 'file saved on %(time)s': 'plik zapisany o %(time)s', 'file saved on %s': 'plik zapisany o %s', 'Help': 'pomoc', 'htmledit': 'edytuj HTML', 'includes': 'zawiera', 'insert new': 'wstaw nowy rekord tabeli', 'insert new %s': 'wstaw nowy rekord do tabeli %s', 'Install': 'install', 'internal error': 'wewnętrzny błąd', 'invalid password': 'błędne hasło', 'invalid request': 'błędne zapytanie', 'invalid ticket': 'błędny bilet', 'language file "%(filename)s" created/updated': 'plik tłumaczeń "%(filename)s" został utworzony/uaktualniony', 'languages': 'pliki tłumaczeń', 'languages updated': 'pliki tłumaczeń zostały uaktualnione', 'loading...': 'wczytywanie...', 'login': 'zaloguj', 'Logout': 'wyloguj', 'merge': 'merge', 'models': 'modele', 'modules': 'moduły', 'new application "%s" created': 'nowa aplikacja "%s" została utworzona', 'new plugin installed': 'new plugin installed', 'new record inserted': 'nowy rekord został wstawiony', 'next 100 rows': 'następne 100 wierszy', 'no match': 'no match', 'or import from csv file': 'lub zaimportuj z pliku csv', 'or provide app url:': 'or provide app url:', 'or provide application url:': 'lub podaj url aplikacji:', 'Overwrite installed app': 'overwrite installed app', 'Pack all': 'spakuj wszystko', 'Pack compiled': 'spakuj skompilowane', 'pack plugin': 'pack plugin', 'password changed': 'password changed', 'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" deleted', 'previous 100 rows': 'poprzednie 100 wierszy', 'record': 'record', 'record does not exist': 'rekord nie istnieje', 'record id': 'id rekordu', 'Remove compiled': 'usuń skompilowane', 'restore': 'odtwórz', 'revert': 'przywróć', 'save': 'zapisz', 'selected': 'zaznaczone', 'session expired': 'sesja wygasła', 'shell': 'powłoka', 'Site': 'strona główna', 'some files could not be removed': 'niektóre pliki nie mogły zostać usunięte', 'Start wizard': 'start wizard', 'state': 'stan', 'static': 'pliki statyczne', 'submit': 'submit', 'table': 'tabela', 'test': 'testuj', 'the application logic, each URL path is mapped in one exposed function in the controller': 'logika aplikacji, każda ścieżka URL jest mapowana na jedną z funkcji eksponowanych w kontrolerze', 'the data representation, define database tables and sets': 'reprezentacja danych, definicje zbiorów i tabel bazy danych', 'the presentations layer, views are also known as templates': 'warstwa prezentacji, widoki zwane są również szablonami', 'these files are served without processing, your images go here': 'pliki obsługiwane bez interpretacji, to jest miejsce na Twoje obrazy', 'to previous version.': 'do poprzedniej wersji.', 'translation strings for the application': 'ciągi tłumaczeń dla aplikacji', 'try': 'spróbój', 'try something like': 'spróbój czegos takiego jak', 'unable to create application "%s"': 'nie można utworzyć aplikacji "%s"', 'unable to delete file "%(filename)s"': 'nie można usunąć pliku "%(filename)s"', 'unable to delete file plugin "%(plugin)s"': 'unable to delete file plugin "%(plugin)s"', 'unable to parse csv file': 'nie można sparsować pliku csv', 'unable to uninstall "%s"': 'nie można odinstalować "%s"', 'unable to upgrade because "%s"': 'unable to upgrade because "%s"', 'uncheck all': 'odznacz wszystko', 'Uninstall': 'odinstaluj', 'update': 'uaktualnij', 'update all languages': 'uaktualnij wszystkie pliki tłumaczeń', 'upgrade web2py now': 'upgrade web2py now', 'upload application:': 'wyślij plik aplikacji:', 'upload file:': 'wyślij plik:', 'upload plugin file:': 'upload plugin file:', 'variables': 'variables', 'versioning': 'versioning', 'view': 'widok', 'views': 'widoki', 'web2py Recent Tweets': 'najnowsze tweety web2py', 'web2py is up to date': 'web2py jest aktualne', 'web2py upgraded; please restart it': 'web2py upgraded; please restart it', } web2py-1.99.7.orig/applications/admin/languages/it-it.py0000644000175000017500000003417611724764235021624 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" è un\'espressione opzionale come "campo1=\'nuovo valore\'". Non si può fare "update" o "delete" dei risultati di un JOIN ', '%Y-%m-%d': '%d/%m/%Y', '%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S', '%s rows deleted': '%s righe ("record") cancellate', '%s rows updated': '%s righe ("record") modificate', '(requires internet access)': '(requires internet access)', '(something like "it-it")': '(qualcosa simile a "it-it")', 'A new version of web2py is available: %s': 'È disponibile una nuova versione di web2py: %s', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': "ATTENZIONE: L'accesso richiede una connessione sicura (HTTPS) o l'esecuzione di web2py in locale (connessione su localhost)", 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTZIONE: NON ESEGUIRE PIÙ TEST IN PARALLELO (I TEST NON SONO "THREAD SAFE")', 'ATTENTION: you cannot edit the running application!': "ATTENZIONE: non puoi modificare l'applicazione correntemente in uso ", 'About': 'Informazioni', 'About application': "Informazioni sull'applicazione", 'Admin is disabled because insecure channel': 'amministrazione disabilitata: comunicazione non sicura', 'Administrator Password:': 'Password Amministratore:', 'Application name:': 'Application name:', 'Are you sure you want to delete file "%s"?': 'Confermi di voler cancellare il file "%s"?', 'Are you sure you want to delete plugin "%s"?': 'Confermi di voler cancellare il plugin "%s"?', 'Are you sure you want to uninstall application "%s"?': 'Confermi di voler disinstallare l\'applicazione "%s"?', 'Are you sure you want to upgrade web2py now?': 'Confermi di voler aggiornare web2py ora?', 'Available databases and tables': 'Database e tabelle disponibili', 'Cannot be empty': 'Non può essere vuoto', 'Cannot compile: there are errors in your app:': "Compilazione fallita: ci sono errori nell'applicazione.", 'Check to delete': 'Seleziona per cancellare', 'Checking for upgrades...': 'Controllo aggiornamenti in corso...', 'Controller': 'Controller', 'Controllers': 'Controllers', 'Copyright': 'Copyright', 'Create new simple application': 'Crea nuova applicazione', 'Current request': 'Richiesta (request) corrente', 'Current response': 'Risposta (response) corrente', 'Current session': 'Sessione (session) corrente', 'DB Model': 'Modello di DB', 'Database': 'Database', 'Date and Time': 'Data and Ora', 'Delete': 'Cancella', 'Delete:': 'Cancella:', 'Deploy on Google App Engine': 'Installa su Google App Engine', 'EDIT': 'MODIFICA', 'Edit': 'Modifica', 'Edit This App': 'Modifica questa applicazione', 'Edit application': 'Modifica applicazione', 'Edit current record': 'Modifica record corrente', 'Editing Language file': 'Modifica file linguaggio', 'Editing file "%s"': 'Modifica del file "%s"', 'Enterprise Web Framework': 'Enterprise Web Framework', 'Error logs for "%(app)s"': 'Log degli errori per "%(app)s"', 'Exception instance attributes': 'Exception instance attributes', 'Functions with no doctests will result in [passed] tests.': 'I test delle funzioni senza "doctests" risulteranno sempre [passed].', 'Hello World': 'Salve Mondo', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.', 'Import/Export': 'Importa/Esporta', 'Index': 'Indice', 'Installed applications': 'Applicazioni installate', 'Internal State': 'Stato interno', 'Invalid Query': 'Richiesta (query) non valida', 'Invalid action': 'Azione non valida', 'Language files (static strings) updated': 'Linguaggi (documenti con stringhe statiche) aggiornati', 'Languages': 'Linguaggi', 'Last saved on:': 'Ultimo salvataggio:', 'Layout': 'Layout', 'License for': 'Licenza relativa a', 'Login': 'Accesso', 'Login to the Administrative Interface': "Accesso all'interfaccia amministrativa", 'Main Menu': 'Menu principale', 'Menu Model': 'Menu Modelli', 'Models': 'Modelli', 'Modules': 'Moduli', 'NO': 'NO', 'New Record': 'Nuovo elemento (record)', 'New application wizard': 'New application wizard', 'New simple application': 'New simple application', 'No databases in this application': 'Nessun database presente in questa applicazione', 'Original/Translation': 'Originale/Traduzione', 'PAM authenticated user, cannot change password here': 'utente autenticato tramite PAM, impossibile modificare password qui', 'Peeking at file': 'Uno sguardo al file', 'Plugin "%s" in application': 'Plugin "%s" nell\'applicazione', 'Plugins': 'I Plugins', 'Powered by': 'Powered by', 'Query:': 'Richiesta (query):', 'Resolve Conflict file': 'File di risoluzione conflitto', 'Rows in table': 'Righe nella tabella', 'Rows selected': 'Righe selezionate', 'Saved file hash:': 'Hash del file salvato:', 'Static files': 'Files statici', 'Stylesheet': 'Foglio di stile (stylesheet)', 'Sure you want to delete this object?': 'Vuoi veramente cancellare questo oggetto?', 'TM': 'TM', 'Testing application': 'Test applicazione in corsg', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La richiesta (query) è una condizione come ad esempio "db.tabella1.campo1==\'valore\'". Una condizione come "db.tabella1.campo1==db.tabella2.campo2" produce un "JOIN" SQL.', 'There are no controllers': 'Non ci sono controller', 'There are no models': 'Non ci sono modelli', 'There are no modules': 'Non ci sono moduli', 'There are no static files': 'Non ci sono file statici', 'There are no translators, only default language is supported': 'Non ci sono traduzioni, viene solo supportato il linguaggio di base', 'There are no views': 'Non ci sono viste ("view")', 'This is the %(filename)s template': 'Questo è il template %(filename)s', 'Ticket': 'Ticket', 'To create a plugin, name a file/folder plugin_[name]': 'Per creare un plugin, chiamare un file o cartella plugin_[nome]', 'Unable to check for upgrades': 'Impossibile controllare presenza di aggiornamenti', 'Unable to download app because:': 'Impossibile scaricare applicazione perché', 'Unable to download because': 'Impossibile scaricare perché', 'Update:': 'Aggiorna:', 'Upload & install packed application': 'Carica ed installa pacchetto con applicazione', 'Upload a package:': 'Upload a package:', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Per costruire richieste (query) più complesse si usano (...)&(...) come "e" (AND), (...)|(...) come "o" (OR), e ~(...) come negazione (NOT).', 'Use an url:': 'Use an url:', 'Version': 'Versione', 'View': 'Vista', 'Views': 'viste', 'Welcome %s': 'Benvenuto %s', 'Welcome to web2py': 'Benvenuto su web2py', 'YES': 'SI', 'About': 'informazioni', 'additional code for your application': 'righe di codice aggiuntive per la tua applicazione', 'admin disabled because no admin password': 'amministrazione disabilitata per mancanza di password amministrativa', 'admin disabled because not supported on google app engine': 'amministrazione non supportata da Google Apps Engine', 'admin disabled because unable to access password file': 'amministrazione disabilitata per impossibilità di leggere il file delle password', 'administrative interface': 'administrative interface', 'and rename it (required):': 'e rinominala (obbligatorio):', 'and rename it:': 'e rinominala:', 'appadmin': 'appadmin ', 'appadmin is disabled because insecure channel': 'amministrazione app (appadmin) disabilitata: comunicazione non sicura', 'application "%s" uninstalled': 'applicazione "%s" disinstallata', 'application compiled': 'applicazione compilata', 'application is compiled and cannot be designed': "l'applicazione è compilata e non si può modificare", 'arguments': 'arguments', 'back': 'indietro', 'cache': 'cache', 'cache, errors and sessions cleaned': 'pulitura cache, errori and sessioni ', 'cannot create file': 'impossibile creare il file', 'cannot upload file "%(filename)s"': 'impossibile caricare il file "%(filename)s"', 'Change admin password': 'change admin password', 'change password': 'cambia password', 'check all': 'controlla tutto', 'Check for upgrades': 'check for upgrades', 'Clean': 'pulisci', 'click here for online examples': 'clicca per vedere gli esempi', 'click here for the administrative interface': "clicca per l'interfaccia amministrativa", 'click to check for upgrades': 'clicca per controllare presenza di aggiornamenti', 'code': 'code', 'Compile': 'compila', 'compiled application removed': "rimosso il codice compilato dell'applicazione", 'controllers': 'controllers', 'Create': 'crea', 'create file with filename:': 'crea un file col nome:', 'create new application:': 'create new application:', 'created by': 'creato da', 'crontab': 'crontab', 'currently running': 'currently running', 'currently saved or': 'attualmente salvato o', 'customize me!': 'Personalizzami!', 'data uploaded': 'dati caricati', 'database': 'database', 'database %s select': 'database %s select', 'database administration': 'amministrazione database', 'db': 'db', 'defines tables': 'defininisce le tabelle', 'delete': 'Cancella', 'delete all checked': 'cancella tutti i selezionati', 'delete plugin': 'cancella plugin', 'Deploy': 'deploy', 'design': 'progetta', 'direction: ltr': 'direction: ltr', 'done!': 'fatto!', 'Edit': 'modifica', 'edit controller': 'modifica controller', 'edit profile': 'modifica profilo', 'edit views:': 'modifica viste (view):', 'Errors': 'errori', 'export as csv file': 'esporta come file CSV', 'exposes': 'espone', 'extends': 'estende', 'failed to reload module because:': 'ricaricamento modulo fallito perché:', 'file "%(filename)s" created': 'creato il file "%(filename)s"', 'file "%(filename)s" deleted': 'cancellato il file "%(filename)s"', 'file "%(filename)s" uploaded': 'caricato il file "%(filename)s"', 'file "%s" of %s restored': 'ripristinato "%(filename)s"', 'file changed on disk': 'il file ha subito una modifica su disco', 'file does not exist': 'file inesistente', 'file saved on %(time)s': "file salvato nell'istante %(time)s", 'file saved on %s': 'file salvato: %s', 'Help': 'aiuto', 'htmledit': 'modifica come html', 'includes': 'include', 'insert new': 'inserisci nuovo', 'insert new %s': 'inserisci nuovo %s', 'Install': 'installa', 'internal error': 'errore interno', 'invalid password': 'password non valida', 'invalid request': 'richiesta non valida', 'invalid ticket': 'ticket non valido', 'language file "%(filename)s" created/updated': 'file linguaggio "%(filename)s" creato/aggiornato', 'languages': 'linguaggi', 'loading...': 'caricamento...', 'login': 'accesso', 'Logout': 'uscita', 'merge': 'unisci', 'models': 'modelli', 'modules': 'moduli', 'new application "%s" created': 'creata la nuova applicazione "%s"', 'new plugin installed': 'installato nuovo plugin', 'new record inserted': 'nuovo record inserito', 'next 100 rows': 'prossime 100 righe', 'no match': 'nessuna corrispondenza', 'or import from csv file': 'oppure importa da file CSV', 'or provide app url:': "oppure fornisci url dell'applicazione:", 'Overwrite installed app': 'sovrascrivi applicazione installata', 'Pack all': 'crea pacchetto', 'Pack compiled': 'crea pacchetto del codice compilato', 'pack plugin': 'crea pacchetto del plugin', 'password changed': 'password modificata', 'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" cancellato', 'previous 100 rows': '100 righe precedenti', 'record': 'record', 'record does not exist': 'il record non esiste', 'record id': 'ID del record', 'register': 'registrazione', 'Remove compiled': 'rimozione codice compilato', 'restore': 'ripristino', 'revert': 'versione precedente', 'selected': 'selezionato', 'session expired': 'sessions scaduta', 'shell': 'shell', 'Site': 'sito', 'some files could not be removed': 'non è stato possibile rimuovere alcuni files', 'Start wizard': 'start wizard', 'state': 'stato', 'static': 'statico', 'submit': 'invia', 'table': 'tabella', 'test': 'test', 'the application logic, each URL path is mapped in one exposed function in the controller': 'logica dell\'applicazione, ogni percorso "URL" corrisponde ad una funzione esposta da un controller', 'the data representation, define database tables and sets': 'rappresentazione dei dati, definizione di tabelle di database e di "set" ', 'the presentations layer, views are also known as templates': 'Presentazione dell\'applicazione, viste (views, chiamate anche "templates")', 'these files are served without processing, your images go here': 'questi files vengono serviti così come sono, le immagini vanno qui', 'to previous version.': 'torna a versione precedente', 'translation strings for the application': "stringhe di traduzioni per l'applicazione", 'try': 'prova', 'try something like': 'prova qualcosa come', 'unable to create application "%s"': 'impossibile creare applicazione "%s"', 'unable to delete file "%(filename)s"': 'impossibile rimuovere file "%(plugin)s"', 'unable to delete file plugin "%(plugin)s"': 'impossibile rimuovere file di plugin "%(plugin)s"', 'unable to parse csv file': 'non riesco a decodificare questo file CSV', 'unable to uninstall "%s"': 'impossibile disinstallare "%s"', 'unable to upgrade because "%s"': 'impossibile aggiornare perché "%s"', 'uncheck all': 'smarca tutti', 'Uninstall': 'disinstalla', 'update': 'aggiorna', 'update all languages': 'aggiorna tutti i linguaggi', 'upgrade web2py now': 'upgrade web2py now', 'upload application:': 'carica applicazione:', 'upload file:': 'carica file:', 'upload plugin file:': 'carica file di plugin:', 'variables': 'variables', 'versioning': 'sistema di versioni', 'view': 'vista', 'views': 'viste', 'web2py Recent Tweets': 'Tweets recenti per web2py', 'web2py is up to date': 'web2py è aggiornato', 'web2py upgraded; please restart it': 'web2py aggiornato; prego riavviarlo', } web2py-1.99.7.orig/applications/admin/languages/pl.py0000644000175000017500000003702111724764235021201 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Uaktualnij" jest dodatkowym wyrażeniem postaci "pole1=\'nowawartość\'". Nie możesz uaktualnić lub usunąć wyników z JOIN:', '%Y-%m-%d': '%Y-%m-%d', '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', '%s rows deleted': 'Wierszy usuniętych: %s', '%s rows updated': 'Wierszy uaktualnionych: %s', '(requires internet access)': '(requires internet access)', '(something like "it-it")': '(coś podobnego do "it-it")', 'A new version of web2py is available': 'Nowa wersja web2py jest dostępna', 'A new version of web2py is available: %s': 'Nowa wersja web2py jest dostępna: %s', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'UWAGA: Wymagane jest bezpieczne (HTTPS) połączenie lub połączenie z lokalnego adresu.', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'UWAGA: TESTOWANIE NIE JEST BEZPIECZNE W ŚRODOWISKU WIELOWĄTKOWYM, TAK WIĘC NIE URUCHAMIAJ WIELU TESTÓW JEDNOCZEŚNIE.', 'ATTENTION: you cannot edit the running application!': 'UWAGA: nie można edytować uruchomionych aplikacji!', 'About': 'Informacje o', 'About application': 'Informacje o aplikacji', 'Additional code for your application': 'Additional code for your application', 'Admin is disabled because insecure channel': 'Panel administracyjny wyłączony z powodu braku bezpiecznego połączenia', 'Admin is disabled because unsecure channel': 'Panel administracyjny wyłączony z powodu braku bezpiecznego połączenia', 'Administrator Password:': 'Hasło administratora:', 'Application name:': 'Application name:', 'Are you sure you want to delete file "%s"?': 'Czy na pewno chcesz usunąć plik "%s"?', 'Are you sure you want to delete plugin "%s"?': 'Czy na pewno chcesz usunąć wtyczkę "%s"?', 'Are you sure you want to uninstall application "%s"': 'Czy na pewno chcesz usunąć aplikację "%s"', 'Are you sure you want to uninstall application "%s"?': 'Czy na pewno chcesz usunąć aplikację "%s"?', 'Are you sure you want to upgrade web2py now?': 'Are you sure you want to upgrade web2py now?', 'Available databases and tables': 'Dostępne bazy danych i tabele', 'Cannot be empty': 'Nie może być puste', 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Nie można skompilować: w Twojej aplikacji są błędy . Znajdź je, popraw a następnie spróbój ponownie.', 'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:', 'Check to delete': 'Zaznacz aby usunąć', 'Checking for upgrades...': 'Sprawdzanie aktualizacji...', 'Controllers': 'Kontrolery', 'Create new simple application': 'Utwórz nową aplikację', 'Current request': 'Aktualne żądanie', 'Current response': 'Aktualna odpowiedź', 'Current session': 'Aktualna sesja', 'DESIGN': 'PROJEKTUJ', 'Date and Time': 'Data i godzina', 'Delete': 'Usuń', 'Delete:': 'Usuń:', 'Deploy on Google App Engine': 'Umieść na Google App Engine', 'Design for': 'Projekt dla', 'EDIT': 'EDYTUJ', 'Edit application': 'Edycja aplikacji', 'Edit current record': 'Edytuj aktualny rekord', 'Editing Language file': 'Edytuj plik tłumaczeń', 'Editing file': 'Edycja pliku', 'Editing file "%s"': 'Edycja pliku "%s"', 'Enterprise Web Framework': 'Enterprise Web Framework', 'Error logs for "%(app)s"': 'Wpisy błędów dla "%(app)s"', 'Exception instance attributes': 'Exception instance attributes', 'Functions with no doctests will result in [passed] tests.': 'Funkcje bez doctestów będą dołączone do [zaliczonych] testów.', 'Hello World': 'Witaj Świecie', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Jeżeli powyższy raport zawiera numer biletu błędu, oznacza to błąd podczas wykonywania kontrolera przez próbą uruchomienia doctestów. Zazwyczaj jest to spowodowane nieprawidłowymi wcięciami linii kodu lub błędami w module poza ciałem funkcji.\nTytuł w kolorze zielonym oznacza, ze wszystkie (zdefiniowane) testy zakończyły się sukcesem. W tej sytuacji ich wyniki nie są pokazane.', 'Import/Export': 'Importuj/eksportuj', 'Installed applications': 'Zainstalowane aplikacje', 'Internal State': 'Stan wewnętrzny', 'Invalid Query': 'Błędne zapytanie', 'Invalid action': 'Błędna akcja', 'Language files (static strings) updated': 'Pliki tłumaczeń (ciągi statyczne) zostały uaktualnione', 'Languages': 'Tłumaczenia', 'Last saved on:': 'Ostatnio zapisany:', 'License for': 'Licencja dla', 'Login': 'Zaloguj', 'Login to the Administrative Interface': 'Logowanie do panelu administracyjnego', 'Models': 'Modele', 'Modules': 'Moduły', 'NO': 'NIE', 'New Record': 'Nowy rekord', 'New application wizard': 'New application wizard', 'New simple application': 'New simple application', 'No databases in this application': 'Brak baz danych w tej aplikacji', 'Original/Translation': 'Oryginał/tłumaczenie', 'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here', 'Peeking at file': 'Podgląd pliku', 'Plugin "%s" in application': 'Wtyczka "%s" w aplikacji', 'Plugins': 'Wtyczki', 'Powered by': 'Zasilane przez', 'Query:': 'Zapytanie:', 'Resolve Conflict file': 'Rozwiąż konflikt plików', 'Rows in table': 'Wiersze w tabeli', 'Rows selected': 'Wierszy wybranych', 'Saved file hash:': 'Suma kontrolna zapisanego pliku:', 'Searching:': 'Searching:', 'Static files': 'Pliki statyczne', 'Sure you want to delete this object?': 'Czy na pewno chcesz usunąć ten obiekt?', 'TM': 'TM', 'Testing application': 'Testowanie aplikacji', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Zapytanie" jest warunkiem postaci "db.tabela1.pole1==\'wartość\'". Takie coś jak "db.tabela1.pole1==db.tabela2.pole2" oznacza SQL JOIN.', 'The application logic, each URL path is mapped in one exposed function in the controller': 'The application logic, each URL path is mapped in one exposed function in the controller', 'The data representation, define database tables and sets': 'The data representation, define database tables and sets', 'The presentations layer, views are also known as templates': 'The presentations layer, views are also known as templates', 'There are no controllers': 'Brak kontrolerów', 'There are no models': 'Brak modeli', 'There are no modules': 'Brak modułów', 'There are no plugins': 'There are no plugins', 'There are no static files': 'Brak plików statycznych', 'There are no translators, only default language is supported': 'Brak plików tłumaczeń, wspierany jest tylko domyślny język', 'There are no views': 'Brak widoków', 'These files are served without processing, your images go here': 'These files are served without processing, your images go here', 'This is the %(filename)s template': 'To jest szablon %(filename)s', 'Ticket': 'Bilet', 'To create a plugin, name a file/folder plugin_[name]': 'Aby utworzyć wtyczkę, nazwij plik/katalog plugin_[nazwa]', 'Translation strings for the application': 'Translation strings for the application', 'Unable to check for upgrades': 'Nie można sprawdzić aktualizacji', 'Unable to download': 'Nie można ściągnąć', 'Unable to download app': 'Nie można ściągnąć aplikacji', 'Unable to download app because:': 'Unable to download app because:', 'Unable to download because': 'Unable to download because', 'Update:': 'Uaktualnij:', 'Upload & install packed application': 'Upload & install packed application', 'Upload a package:': 'Upload a package:', 'Upload existing application': 'Wyślij istniejącą aplikację', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Użyj (...)&(...) jako AND, (...)|(...) jako OR oraz ~(...) jako NOT do tworzenia bardziej skomplikowanych zapytań.', 'Use an url:': 'Use an url:', 'Version': 'Wersja', 'Views': 'Widoki', 'Welcome to web2py': 'Witaj w web2py', 'YES': 'TAK', 'About': 'informacje', 'additional code for your application': 'dodatkowy kod Twojej aplikacji', 'admin disabled because no admin password': 'panel administracyjny wyłączony z powodu braku hasła administracyjnego', 'admin disabled because not supported on google app engine': 'panel administracyjny wyłączony z powodu braku wsparcia na google apps engine', 'admin disabled because unable to access password file': 'panel administracyjny wyłączony z powodu braku dostępu do pliku z hasłem', 'administrative interface': 'administrative interface', 'and rename it (required):': 'i nadaj jej nową nazwę (wymagane):', 'and rename it:': 'i nadaj mu nową nazwę:', 'appadmin': 'administracja aplikacji', 'appadmin is disabled because insecure channel': 'administracja aplikacji wyłączona z powodu braku bezpiecznego połączenia', 'application "%s" uninstalled': 'aplikacja "%s" została odinstalowana', 'application compiled': 'aplikacja została skompilowana', 'application is compiled and cannot be designed': 'aplikacja jest skompilowana i nie może być projektowana', 'arguments': 'arguments', 'back': 'wstecz', 'cache': 'cache', 'cache, errors and sessions cleaned': 'pamięć podręczna, bilety błędów oraz pliki sesji zostały wyczyszczone', 'cannot create file': 'nie można utworzyć pliku', 'cannot upload file "%(filename)s"': 'nie można wysłać pliku "%(filename)s"', 'Change admin password': 'change admin password', 'check all': 'zaznacz wszystko', 'Check for upgrades': 'check for upgrades', 'Clean': 'oczyść', 'click here for online examples': 'kliknij aby przejść do interaktywnych przykładów', 'click here for the administrative interface': 'kliknij aby przejść do panelu administracyjnego', 'click to check for upgrades': 'kliknij aby sprawdzić aktualizacje', 'code': 'code', 'collapse/expand all': 'collapse/expand all', 'Compile': 'skompiluj', 'compiled application removed': 'skompilowana aplikacja została usunięta', 'controllers': 'kontrolery', 'Create': 'create', 'create file with filename:': 'utwórz plik o nazwie:', 'create new application:': 'utwórz nową aplikację:', 'created by': 'utworzone przez', 'crontab': 'crontab', 'currently running': 'currently running', 'currently saved or': 'aktualnie zapisany lub', 'data uploaded': 'dane wysłane', 'database': 'baza danych', 'database %s select': 'wybór z bazy danych %s', 'database administration': 'administracja bazy danych', 'db': 'baza danych', 'defines tables': 'zdefiniuj tabele', 'delete': 'usuń', 'delete all checked': 'usuń wszystkie zaznaczone', 'delete plugin': 'usuń wtyczkę', 'Deploy': 'deploy', 'design': 'projektuj', 'direction: ltr': 'direction: ltr', 'done!': 'zrobione!', 'download layouts': 'download layouts', 'download plugins': 'download plugins', 'Edit': 'edytuj', 'edit controller': 'edytuj kontroler', 'edit views:': 'edit views:', 'Errors': 'błędy', 'export as csv file': 'eksportuj jako plik csv', 'exposes': 'eksponuje', 'extends': 'rozszerza', 'failed to reload module': 'nie udało się przeładować modułu', 'failed to reload module because:': 'failed to reload module because:', 'file "%(filename)s" created': 'plik "%(filename)s" został utworzony', 'file "%(filename)s" deleted': 'plik "%(filename)s" został usunięty', 'file "%(filename)s" uploaded': 'plik "%(filename)s" został wysłany', 'file "%(filename)s" was not deleted': 'plik "%(filename)s" nie został usunięty', 'file "%s" of %s restored': 'plik "%s" z %s został odtworzony', 'file changed on disk': 'plik na dysku został zmieniony', 'file does not exist': 'plik nie istnieje', 'file saved on %(time)s': 'plik zapisany o %(time)s', 'file saved on %s': 'plik zapisany o %s', 'files': 'files', 'filter': 'filter', 'Help': 'pomoc', 'htmledit': 'edytuj HTML', 'includes': 'zawiera', 'insert new': 'wstaw nowy rekord tabeli', 'insert new %s': 'wstaw nowy rekord do tabeli %s', 'Install': 'install', 'internal error': 'wewnętrzny błąd', 'invalid password': 'błędne hasło', 'invalid request': 'błędne zapytanie', 'invalid ticket': 'błędny bilet', 'language file "%(filename)s" created/updated': 'plik tłumaczeń "%(filename)s" został utworzony/uaktualniony', 'languages': 'pliki tłumaczeń', 'languages updated': 'pliki tłumaczeń zostały uaktualnione', 'loading...': 'wczytywanie...', 'login': 'zaloguj', 'Logout': 'wyloguj', 'merge': 'zespól', 'models': 'modele', 'modules': 'moduły', 'new application "%s" created': 'nowa aplikacja "%s" została utworzona', 'new plugin installed': 'nowa wtyczka została zainstalowana', 'new record inserted': 'nowy rekord został wstawiony', 'next 100 rows': 'następne 100 wierszy', 'no match': 'no match', 'or import from csv file': 'lub zaimportuj z pliku csv', 'or provide app url:': 'or provide app url:', 'or provide application url:': 'lub podaj url aplikacji:', 'Overwrite installed app': 'overwrite installed app', 'Pack all': 'spakuj wszystko', 'Pack compiled': 'spakuj skompilowane', 'pack plugin': 'spakuj wtyczkę', 'password changed': 'password changed', 'plugin "%(plugin)s" deleted': 'wtyczka "%(plugin)s" została usunięta', 'plugins': 'plugins', 'previous 100 rows': 'poprzednie 100 wierszy', 'record': 'rekord', 'record does not exist': 'rekord nie istnieje', 'record id': 'ID rekordu', 'Remove compiled': 'usuń skompilowane', 'restore': 'odtwórz', 'revert': 'przywróć', 'save': 'zapisz', 'selected': 'zaznaczone', 'session expired': 'sesja wygasła', 'shell': 'powłoka', 'Site': 'strona główna', 'some files could not be removed': 'niektóre pliki nie mogły zostać usunięte', 'Start wizard': 'start wizard', 'state': 'stan', 'static': 'pliki statyczne', 'submit': 'wyślij', 'table': 'tabela', 'test': 'testuj', 'the application logic, each URL path is mapped in one exposed function in the controller': 'logika aplikacji, każda ścieżka URL jest mapowana na jedną z funkcji eksponowanych w kontrolerze', 'the data representation, define database tables and sets': 'reprezentacja danych, definicje zbiorów i tabel bazy danych', 'the presentations layer, views are also known as templates': 'warstwa prezentacji, widoki zwane są również szablonami', 'these files are served without processing, your images go here': 'pliki obsługiwane bez interpretacji, to jest miejsce na Twoje obrazy', 'to previous version.': 'do poprzedniej wersji.', 'translation strings for the application': 'ciągi tłumaczeń dla aplikacji', 'try': 'spróbój', 'try something like': 'spróbój czegos takiego jak', 'unable to create application "%s"': 'nie można utworzyć aplikacji "%s"', 'unable to delete file "%(filename)s"': 'nie można usunąć pliku "%(filename)s"', 'unable to delete file plugin "%(plugin)s"': 'nie można usunąc pliku wtyczki "%(plugin)s"', 'unable to parse csv file': 'nie można sparsować pliku csv', 'unable to uninstall "%s"': 'nie można odinstalować "%s"', 'unable to upgrade because "%s"': 'unable to upgrade because "%s"', 'uncheck all': 'odznacz wszystko', 'Uninstall': 'odinstaluj', 'update': 'uaktualnij', 'update all languages': 'uaktualnij wszystkie pliki tłumaczeń', 'upgrade web2py now': 'upgrade web2py now', 'upload': 'upload', 'upload application:': 'wyślij plik aplikacji:', 'upload file:': 'wyślij plik:', 'upload plugin file:': 'wyślij plik wtyczki:', 'variables': 'variables', 'versioning': 'versioning', 'view': 'widok', 'views': 'widoki', 'web2py Recent Tweets': 'najnowsze tweety web2py', 'web2py is up to date': 'web2py jest aktualne', 'web2py upgraded; please restart it': 'web2py upgraded; please restart it', } web2py-1.99.7.orig/applications/admin/languages/pt-br.py0000644000175000017500000004124311724764235021613 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" é uma expressão opcional como "campo1=\'novo_valor\'". Não é permitido atualizar ou apagar resultados de um JOIN', '%Y-%m-%d': '%d/%m/%Y', '%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S', '%s rows deleted': '%s registros apagados', '%s rows updated': '%s registros atualizados', '(requires internet access)': '(requer acesso a internet)', '(something like "it-it")': '(algo como "it-it")', 'A new version of web2py is available': 'Está disponível uma nova versão do web2py', 'A new version of web2py is available: %s': 'Está disponível uma nova versão do web2py: %s', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENÇÃO o login requer uma conexão segura (HTTPS) ou executar de localhost.', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATENÇÃO OS TESTES NÃO THREAD SAFE, NÃO EFETUE MÚLTIPLOS TESTES AO MESMO TEMPO.', 'ATTENTION: you cannot edit the running application!': 'ATENÇÃO: Não pode modificar a aplicação em execução!', 'About': 'Sobre', 'About application': 'Sobre a aplicação', 'Additional code for your application': 'Additional code for your application', 'Admin is disabled because insecure channel': 'Admin desabilitado pois o canal não é seguro', 'Admin is disabled because unsecure channel': 'Admin desabilitado pois o canal não é seguro', 'Admin language': 'Linguagem do Admin', 'Administrator Password:': 'Senha de administrador:', 'Application name:': 'Nome da aplicação:', 'Are you sure you want to delete file "%s"?': 'Tem certeza que deseja apagar o arquivo "%s"?', 'Are you sure you want to delete plugin "%s"?': 'Tem certeza que deseja apagar o plugin "%s"?', 'Are you sure you want to uninstall application "%s"': 'Tem certeza que deseja apagar a aplicação "%s"?', 'Are you sure you want to uninstall application "%s"?': 'Tem certeza que deseja apagar a aplicação "%s"?', 'Are you sure you want to upgrade web2py now?': 'Tem certeza que deseja atualizar o web2py agora?', 'Available databases and tables': 'Bancos de dados e tabelas disponíveis', 'Cannot be empty': 'Não pode ser vazio', 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Não é possível compilar: Existem erros em sua aplicação. Depure, corrija os errros e tente novamente', 'Cannot compile: there are errors in your app:': 'Não é possível compilar: Existem erros em sua aplicação', 'Change Password': 'Trocar Senha', 'Check to delete': 'Marque para apagar', 'Checking for upgrades...': 'Buscando atualizações...', 'Click row to expand traceback': 'Clique em uma coluna para expandir o log do erro', 'Client IP': 'IP do cliente', 'Controllers': 'Controladores', 'Count': 'Contagem', 'Create new application using the Wizard': 'Criar nova aplicação utilizando o assistente', 'Create new simple application': 'Crie uma nova aplicação', 'Current request': 'Requisição atual', 'Current response': 'Resposta atual', 'Current session': 'Sessão atual', 'DESIGN': 'Projeto', 'Date and Time': 'Data e Hora', 'Delete': 'Apague', 'Delete:': 'Apague:', 'Deploy on Google App Engine': 'Publicar no Google App Engine', 'Description': 'Descrição', 'Design for': 'Projeto de', 'Detailed traceback description': 'Detailed traceback description', 'E-mail': 'E-mail', 'EDIT': 'EDITAR', 'Edit Profile': 'Editar Perfil', 'Edit application': 'Editar aplicação', 'Edit current record': 'Editar o registro atual', 'Editing Language file': 'Editando arquivo de linguagem', 'Editing file': 'Editando arquivo', 'Editing file "%s"': 'Editando arquivo "%s"', 'Enterprise Web Framework': 'Framework web empresarial', 'Error': 'Erro', 'Error logs for "%(app)s"': 'Logs de erro para "%(app)s"', 'Error snapshot': 'Error snapshot', 'Error ticket': 'Error ticket', 'Exception instance attributes': 'Atributos da instancia de excessão', 'File': 'Arquivo', 'First name': 'Nome', 'Frames': 'Frames', 'Functions with no doctests will result in [passed] tests.': 'Funções sem doctests resultarão em testes [aceitos].', 'Group ID': 'ID do Grupo', 'Hello World': 'Olá Mundo', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Se o relatório acima contém um número de ticket, isso indica uma falha no controlador em execução, antes de tantar executar os doctests. Isto acontece geralmente por erro de endentação ou erro fora do código da função.\nO titulo em verde indica que os testes (se definidos) passaram. Neste caso os testes não são mostrados.', 'Import/Export': 'Importar/Exportar', 'Installed applications': 'Aplicações instaladas', 'Internal State': 'Estado Interno', 'Invalid Query': 'Consulta inválida', 'Invalid action': 'Ação inválida', 'Invalid email': 'E-mail inválido', 'Language files (static strings) updated': 'Arquivos de linguagem (textos estáticos) atualizados', 'Languages': 'Linguagens', 'Last name': 'Sobrenome', 'Last saved on:': 'Salvo em:', 'License for': 'Licença para', 'Login': 'Entrar', 'Login to the Administrative Interface': 'Entrar na interface adminitrativa', 'Logout': 'Sair', 'Lost Password': 'Senha perdida', 'Models': 'Modelos', 'Modules': 'Módulos', 'NO': 'NÃO', 'Name': 'Nome', 'New Record': 'Novo registro', 'New application wizard': 'Assistente para novas aplicações ', 'New simple application': 'Nova aplicação básica', 'No databases in this application': 'Não existem bancos de dados nesta aplicação', 'Origin': 'Origem', 'Original/Translation': 'Original/Tradução', 'PAM authenticated user, cannot change password here': 'usuario autenticado por PAM, não pode alterar a senha por aqui', 'Password': 'Senha', 'Peeking at file': 'Visualizando arquivo', 'Plugin "%s" in application': 'Plugin "%s" na aplicação', 'Plugins': 'Plugins', 'Powered by': 'Este site utiliza', 'Query:': 'Consulta:', 'Record ID': 'ID do Registro', 'Register': 'Registrar-se', 'Registration key': 'Chave de registro', 'Resolve Conflict file': 'Arquivo de resolução de conflito', 'Role': 'Papel', 'Rows in table': 'Registros na tabela', 'Rows selected': 'Registros selecionados', 'Saved file hash:': 'Hash do arquivo salvo:', 'Searching:': 'Searching:', 'Static files': 'Arquivos estáticos', 'Sure you want to delete this object?': 'Tem certeza que deseja apaagr este objeto?', 'TM': 'MR', 'Table name': 'Nome da tabela', 'Testing application': 'Testando a aplicação', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'A "consulta" é uma condição como "db.tabela.campo1==\'valor\'". Algo como "db.tabela1.campo1==db.tabela2.campo2" resulta em um JOIN SQL.', 'The application logic, each URL path is mapped in one exposed function in the controller': 'The application logic, each URL path is mapped in one exposed function in the controller', 'The data representation, define database tables and sets': 'The data representation, define database tables and sets', 'The presentations layer, views are also known as templates': 'The presentations layer, views are also known as templates', 'There are no controllers': 'Não existem controllers', 'There are no models': 'Não existem modelos', 'There are no modules': 'Não existem módulos', 'There are no plugins': 'There are no plugins', 'There are no static files': 'Não existem arquicos estáticos', 'There are no translators, only default language is supported': 'Não há traduções, somente a linguagem padrão é suportada', 'There are no views': 'Não existem visões', 'These files are served without processing, your images go here': 'These files are served without processing, your images go here', 'This is the %(filename)s template': 'Este é o template %(filename)s', 'Ticket': 'Ticket', 'Ticket ID': 'Ticket ID', 'Timestamp': 'Data Atual', 'To create a plugin, name a file/folder plugin_[name]': 'Para criar um plugin, nomeio um arquivo/pasta como plugin_[nome]', 'Traceback': 'Traceback', 'Translation strings for the application': 'Translation strings for the application', 'Unable to check for upgrades': 'Não é possível checar as atualizações', 'Unable to download': 'Não é possível efetuar o download', 'Unable to download app': 'Não é possível baixar a aplicação', 'Unable to download app because:': 'Não é possível baixar a aplicação porque:', 'Unable to download because': 'Não é possível baixar porque', 'Update:': 'Atualizar:', 'Upload & install packed application': 'Faça upload e instale uma aplicação empacotada', 'Upload a package:': 'Faça upload de um pacote:', 'Upload existing application': 'Faça upload de uma aplicação existente', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) para AND, (...)|(...) para OR, y ~(...) para NOT, para criar consultas mais complexas.', 'Use an url:': 'Use uma url:', 'User ID': 'ID do Usuario', 'Version': 'Versão', 'Views': 'Visões', 'Welcome to web2py': 'Bem-vindo ao web2py', 'YES': 'SIM', 'About': 'sobre', 'additional code for your application': 'código adicional para sua aplicação', 'admin disabled because no admin password': ' admin desabilitado por falta de senha definida', 'admin disabled because not supported on google app engine': 'admin dehabilitado, não é soportado no GAE', 'admin disabled because unable to access password file': 'admin desabilitado, não foi possível ler o arquivo de senha', 'administrative interface': 'interface administrativa', 'and rename it (required):': 'e renomeie (requerido):', 'and rename it:': ' e renomeie:', 'appadmin': 'appadmin', 'appadmin is disabled because insecure channel': 'admin desabilitado, canal inseguro', 'application "%s" uninstalled': 'aplicação "%s" desinstalada', 'application compiled': 'aplicação compilada', 'application is compiled and cannot be designed': 'A aplicação está compilada e não pode ser modificada', 'arguments': 'argumentos', 'back': 'voltar', 'browse': 'buscar', 'cache': 'cache', 'cache, errors and sessions cleaned': 'cache, erros e sessões eliminadas', 'cannot create file': 'Não é possível criar o arquivo', 'cannot upload file "%(filename)s"': 'não é possível fazer upload do arquivo "%(filename)s"', 'Change admin password': 'mudar senha de administrador', 'check all': 'marcar todos', 'Check for upgrades': 'checar por atualizações', 'Clean': 'limpar', 'click here for online examples': 'clique para ver exemplos online', 'click here for the administrative interface': 'Clique aqui para acessar a interface administrativa', 'click to check for upgrades': 'clique aqui para checar por atualizações', 'click to open': 'clique para abrir', 'code': 'código', 'collapse/expand all': 'collapse/expand all', 'commit (mercurial)': 'commit (mercurial)', 'Compile': 'compilar', 'compiled application removed': 'aplicação compilada removida', 'controllers': 'controladores', 'Create': 'criar', 'create file with filename:': 'criar um arquivo com o nome:', 'create new application:': 'nome da nova aplicação:', 'created by': 'criado por', 'crontab': 'crontab', 'currently running': 'Executando', 'currently saved or': 'Atualmente salvo ou', 'customize me!': 'Modifique-me', 'data uploaded': 'Dados enviados', 'database': 'banco de dados', 'database %s select': 'Seleção no banco de dados %s', 'database administration': 'administração de banco de dados', 'db': 'db', 'defines tables': 'define as tabelas', 'delete': 'apagar', 'delete all checked': 'apagar marcados', 'delete plugin': 'apagar plugin', 'Deploy': 'publicar', 'design': 'modificar', 'direction: ltr': 'direção: ltr', 'done!': 'feito!', 'download layouts': 'download layouts', 'download plugins': 'download plugins', 'Edit': 'editar', 'edit controller': 'editar controlador', 'edit views:': 'editar visões:', 'Errors': 'erros', 'export as csv file': 'exportar como arquivo CSV', 'exposes': 'expõe', 'extends': 'estende', 'failed to reload module': 'Falha ao recarregar o módulo', 'failed to reload module because:': 'falha ao recarregar o módulo por:', 'file "%(filename)s" created': 'arquivo "%(filename)s" criado', 'file "%(filename)s" deleted': 'arquivo "%(filename)s" apagado', 'file "%(filename)s" uploaded': 'arquivo "%(filename)s" enviado', 'file "%(filename)s" was not deleted': 'arquivo "%(filename)s" não foi apagado', 'file "%s" of %s restored': 'arquivo "%s" de %s restaurado', 'file changed on disk': 'arquivo modificado no disco', 'file does not exist': 'arquivo não existe', 'file saved on %(time)s': 'arquivo salvo em %(time)s', 'file saved on %s': 'arquivo salvo em %s', 'files': 'files', 'filter': 'filter', 'Help': 'ajuda', 'htmledit': 'htmledit', 'includes': 'inclui', 'insert new': 'inserir novo', 'insert new %s': 'inserir novo %s', 'inspect attributes': 'inspect attributes', 'Install': 'instalar', 'internal error': 'erro interno', 'invalid password': 'senha inválida', 'invalid request': 'solicitação inválida', 'invalid ticket': 'ticket inválido', 'language file "%(filename)s" created/updated': 'arquivo de linguagem "%(filename)s" criado/atualizado', 'languages': 'linguagens', 'languages updated': 'linguagens atualizadas', 'loading...': 'carregando...', 'locals': 'locals', 'login': 'inicio de sessão', 'Logout': 'finalizar sessão', 'manage': 'gerenciar', 'merge': 'juntar', 'models': 'modelos', 'modules': 'módulos', 'new application "%s" created': 'nova aplicação "%s" criada', 'new plugin installed': 'novo plugin instalado', 'new record inserted': 'novo registro inserido', 'next 100 rows': 'próximos 100 registros', 'no match': 'não encontrado', 'or import from csv file': 'ou importar de um arquivo CSV', 'or provide app url:': 'ou forneça a url de uma aplicação:', 'or provide application url:': 'ou forneça a url de uma aplicação:', 'Overwrite installed app': 'sobrescrever aplicação instalada', 'Pack all': 'criar pacote', 'Pack compiled': 'criar pacote compilado', 'pack plugin': 'empacotar plugin', 'password changed': 'senha alterada', 'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" eliminado', 'plugins': 'plugins', 'previous 100 rows': '100 registros anteriores', 'record': 'registro', 'record does not exist': 'o registro não existe', 'record id': 'id do registro', 'Remove compiled': 'eliminar compilados', 'request': 'request', 'response': 'response', 'restore': 'restaurar', 'revert': 'reverter', 'save': 'salvar', 'selected': 'selecionado(s)', 'session': 'session', 'session expired': 'sessão expirada', 'shell': 'Terminal', 'Site': 'site', 'some files could not be removed': 'alguns arquicos não puderam ser removidos', 'Start wizard': 'iniciar assistente', 'state': 'estado', 'static': 'estáticos', 'submit': 'enviar', 'table': 'tabela', 'test': 'testar', 'the application logic, each URL path is mapped in one exposed function in the controller': 'A lógica da aplicação, cada URL é mapeada para uma função exposta pelo controlador', 'the data representation, define database tables and sets': 'A representação dos dadps, define tabelas e estruturas de dados', 'the presentations layer, views are also known as templates': 'A camada de apresentação, As visões também são chamadas de templates', 'these files are served without processing, your images go here': 'Estes arquivos são servidos sem processamento, suas imagens ficam aqui', 'to previous version.': 'para a versão anterior.', 'translation strings for the application': 'textos traduzidos para a aplicação', 'try': 'tente', 'try something like': 'tente algo como', 'unable to create application "%s"': 'não é possível criar a aplicação "%s"', 'unable to delete file "%(filename)s"': 'não é possível criar o arquico "%(filename)s"', 'unable to delete file plugin "%(plugin)s"': 'não é possível criar o plugin "%(plugin)s"', 'unable to parse csv file': 'não é possível analisar o arquivo CSV', 'unable to uninstall "%s"': 'não é possível instalar "%s"', 'unable to upgrade because "%s"': 'não é possível atualizar porque "%s"', 'uncheck all': 'desmarcar todos', 'Uninstall': 'desinstalar', 'update': 'atualizar', 'update all languages': 'atualizar todas as linguagens', 'upgrade web2py now': 'atualize o web2py agora', 'upload': 'upload', 'upload application:': 'Fazer upload de uma aplicação:', 'upload file:': 'Enviar arquivo:', 'upload plugin file:': 'Enviar arquivo de plugin:', 'variables': 'variáveis', 'versioning': 'versionamento', 'view': 'visão', 'views': 'visões', 'web2py Recent Tweets': 'Tweets Recentes de @web2py', 'web2py is up to date': 'web2py está atualizado', 'web2py upgraded; please restart it': 'web2py atualizado; favor reiniciar', } web2py-1.99.7.orig/applications/admin/languages/he.py0000644000175000017500000004035611724764235021167 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"עדכן" הוא ביטוי אופציונאלי, כגון "field1=newvalue". אינך יוכל להשתמש בjoin, בעת שימוש ב"עדכן" או "מחק".', '%Y-%m-%d': '%Y-%m-%d', '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', '%s rows deleted': '%s רשומות נמחקו', '%s rows updated': '%s רשומות עודכנו', '(requires internet access)': '(requires internet access)', '(something like "it-it")': '(למשל "it-it")', 'A new version of web2py is available: %s': 'גירסא חדשה של web2py זמינה: %s', 'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\n': 'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\r\n', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'לתשומת ליבך: ניתן להתחבר רק בערוץ מאובטח (HTTPS) או מlocalhost', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'לתשומת ליבך: אין לערוך מספר בדיקות במקביל, שכן הן עשויות להפריע זו לזו', 'ATTENTION: you cannot edit the running application!': 'לתשומת ליבך: לא ניתן לערוך אפליקציה בזמן הרצתה', 'About': 'אודות', 'About application': 'אודות אפליקציה', 'Additional code for your application': 'Additional code for your application', 'Admin is disabled because insecure channel': 'ממשק האדמין נוטרל בשל גישה לא מאובטחת', 'Admin language': 'Admin language', 'Administrator Password:': 'סיסמת מנהל', 'Application name:': 'Application name:', 'Are you sure you want to delete file "%s"?': 'האם אתה בטוח שברצונך למחוק את הקובץ "%s"?', 'Are you sure you want to delete plugin "%s"?': 'האם אתה בטוח שברצונך למחוק את התוסף "%s"?', 'Are you sure you want to uninstall application "%s"?': 'האם אתה בטוח שברצונך להסיר את האפליקציה "%s"?', 'Are you sure you want to upgrade web2py now?': 'האם אתה בטוח שאתה רוצה לשדרג את web2py עכשיו?', 'Available databases and tables': 'מסדי נתונים וטבלאות זמינים', 'Cannot be empty': 'אינו יכול להישאר ריק', 'Cannot compile: there are errors in your app:': 'לא ניתן לקמפל: ישנן שגיאות באפליקציה שלך:', 'Check to delete': 'סמן כדי למחוק', 'Checking for upgrades...': 'מחפש עדכונים', 'Controllers': 'בקרים', 'Create new simple application': 'צור אפליקציה חדשה', 'Current request': 'בקשה נוכחית', 'Current response': 'מענה נוכחי', 'Current session': 'סשן זה', 'Date and Time': 'תאריך ושעה', 'Delete': 'מחק', 'Delete:': 'מחק:', 'Deploy on Google App Engine': 'העלה ל Google App Engine', 'Detailed traceback description': 'Detailed traceback description', 'EDIT': 'ערוך!', 'Edit application': 'ערוך אפליקציה', 'Edit current record': 'ערוך רשומה נוכחית', 'Editing Language file': 'עורך את קובץ השפה', 'Editing file "%s"': 'עורך את הקובץ "%s"', 'Enterprise Web Framework': 'סביבת הפיתוח לרשת', 'Error logs for "%(app)s"': 'דו"ח שגיאות עבור אפליקציה "%(app)s"', 'Error snapshot': 'Error snapshot', 'Error ticket': 'Error ticket', 'Exception instance attributes': 'נתוני החריגה', 'Frames': 'Frames', 'Functions with no doctests will result in [passed] tests.': 'פונקציות שלא הוגדר להן doctest ירשמו כבדיקות ש[עברו בהצלחה].', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'אם בדו"ח לעיל מופיע מספר דו"ח שגיאה, זה מצביע על שגיאה בבקר, עוד לפני שניתן היה להריץ את הdoctest. לרוב מדובר בשגיאת הזחה, או שגיאה שאינה בקוד של הפונקציה.\r\nכותרת ירוקה מצביע על כך שכל הבדיקות (אם הוגדרו) עברו בהצלחה, במידה ותוצאות הבדיקה אינן מופיעות.', 'Import/Export': 'יבא\יצא', 'Installed applications': 'אפליקציות מותקנות', 'Internal State': 'מצב מובנה', 'Invalid Query': 'שאילתה לא תקינה', 'Invalid action': 'הוראה לא קיימת', 'Language files (static strings) updated': 'קובץ השפה (מחרוזות סטאטיות) עודכן', 'Languages': 'שפות', 'Last saved on:': 'לאחרונה נשמר בתאריך:', 'License for': 'רשיון עבור', 'Login': 'התחבר', 'Login to the Administrative Interface': 'התחבר לממשק המנהל', 'Models': 'מבני נתונים', 'Modules': 'מודולים', 'NO': 'לא', 'New Record': 'רשומה חדשה', 'New application wizard': 'New application wizard', 'New simple application': 'New simple application', 'No databases in this application': 'אין מסדי נתונים לאפליקציה זו', 'Original/Translation': 'מקור\תרגום', 'PAM authenticated user, cannot change password here': 'שינוי סיסמא באמצעות PAM אינו יכול להתבצע כאן', 'Peeking at file': 'מעיין בקובץ', 'Plugin "%s" in application': 'פלאגין "%s" של אפליקציה', 'Plugins': 'תוספים', 'Powered by': 'מופעל ע"י', 'Query:': 'שאילתה:', 'Resolve Conflict file': 'הסר קובץ היוצר קונפליקט', 'Rows in table': 'רשומות בטבלה', 'Rows selected': 'רשומות נבחרו', 'Saved file hash:': 'גיבוב הקובץ השמור:', 'Static files': 'קבצים סטאטיים', 'Sure you want to delete this object?': 'האם אתה בטוח שברצונך למחוק אובייקט זה?', 'TM': 'סימן רשום', 'Testing application': 'בודק את האפליקציה', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"שאליתה" היא תנאי כגון "db1.table1.filed1=\'value\'" ביטוי כמו db.table1.field1=db.table2.field1 יחולל join', 'The application logic, each URL path is mapped in one exposed function in the controller': 'The application logic, each URL path is mapped in one exposed function in the controller', 'The data representation, define database tables and sets': 'The data representation, define database tables and sets', 'The presentations layer, views are also known as templates': 'The presentations layer, views are also known as templates', 'There are no controllers': 'אין בקרים', 'There are no models': 'אין מבני נתונים', 'There are no modules': 'אין מודולים', 'There are no plugins': 'There are no plugins', 'There are no static files': 'אין קבצים סטאטיים', 'There are no translators, only default language is supported': 'אין תרגומים. רק שפת ברירת המחדל נתמכת', 'There are no views': 'אין קבצי תצוגה', 'These files are served without processing, your images go here': 'These files are served without processing, your images go here', 'This is the %(filename)s template': 'זוהי תבנית הקובץ %(filename)s ', 'Ticket': 'דו"ח שגיאה', 'Ticket ID': 'Ticket ID', 'To create a plugin, name a file/folder plugin_[name]': 'כדי ליצור תוסף, קרא לקובץ או סיפריה בשם לפי התבנית plugin_[name]', 'Traceback': 'Traceback', 'Translation strings for the application': 'Translation strings for the application', 'Unable to check for upgrades': 'לא ניתן היה לבדוק אם יש שדרוגים', 'Unable to download app because:': 'לא ניתן היה להוריד את האפליקציה כי:', 'Unable to download because': 'לא הצלחתי להוריד כי', 'Update:': 'עדכן:', 'Upload & install packed application': 'העלה והתקן אפליקציה ארוזה', 'Upload a package:': 'Upload a package:', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'השתמש ב (...)&(...) עבור תנאי AND, (...)|(...) עבור תנאי OR ו~(...) עבור תנאי NOT ליצירת שאילתות מורכבות', 'Use an url:': 'Use an url:', 'Version': 'גירסא', 'Views': 'מראה', 'YES': 'כן', 'About': 'אודות', 'additional code for your application': 'קוד נוסף עבור האפליקציה שלך', 'admin disabled because no admin password': 'ממשק המנהל מנוטרל כי לא הוגדרה סיסמת מנהל', 'admin disabled because not supported on google app engine': 'ממשק המנהל נוטרל, כי אין תמיכה בGoogle app engine', 'admin disabled because unable to access password file': 'ממשק מנהל נוטרל, כי לא ניתן לגשת לקובץ הסיסמאות', 'administrative interface': 'administrative interface', 'and rename it (required):': 'ושנה את שמו (חובה):', 'and rename it:': 'ושנה את שמו:', 'appadmin': 'מנהל מסד הנתונים', 'appadmin is disabled because insecure channel': 'מנהל מסד הנתונים נוטרל בשל ערוץ לא מאובטח', 'application "%s" uninstalled': 'אפליקציה "%s" הוסרה', 'application compiled': 'אפליקציה קומפלה', 'application is compiled and cannot be designed': 'לא ניתן לערוך אפליקציה מקומפלת', 'arguments': 'פרמטרים', 'back': 'אחורה', 'cache': 'מטמון', 'cache, errors and sessions cleaned': 'מטמון, שגיאות וסשן נוקו', 'cannot create file': 'לא מצליח ליצור קובץ', 'cannot upload file "%(filename)s"': 'לא הצלחתי להעלות את הקובץ "%(filename)s"', 'Change admin password': 'סיסמת מנהל שונתה', 'check all': 'סמן הכל', 'Check for upgrades': 'check for upgrades', 'Clean': 'נקה', 'click to check for upgrades': 'לחץ כדי לחפש עדכונים', 'code': 'קוד', 'collapse/expand all': 'collapse/expand all', 'Compile': 'קמפל', 'compiled application removed': 'אפליקציה מקומפלת הוסרה', 'controllers': 'בקרים', 'Create': 'צור', 'create file with filename:': 'צור קובץ בשם:', 'create new application:': 'צור אפליקציה חדשה:', 'created by': 'נוצר ע"י', 'crontab': 'משימות מתוזמנות', 'currently running': 'currently running', 'currently saved or': 'נשמר כעת או', 'data uploaded': 'המידע הועלה', 'database': 'מסד נתונים', 'database %s select': 'מסד הנתונים %s נבחר', 'database administration': 'ניהול מסד נתונים', 'db': 'מסד נתונים', 'defines tables': 'הגדר טבלאות', 'delete': 'מחק', 'delete all checked': 'סמן הכל למחיקה', 'delete plugin': 'מחק תוסף', 'Deploy': 'deploy', 'design': 'עיצוב', 'direction: ltr': 'direction: rtl', 'done!': 'הסתיים!', 'download layouts': 'download layouts', 'download plugins': 'download plugins', 'Edit': 'ערוך', 'edit controller': 'ערוך בקר', 'edit views:': 'ערוך קיבצי תצוגה:', 'Errors': 'שגיאות', 'export as csv file': 'יצא לקובץ csv', 'exposes': 'חושף את', 'extends': 'הרחבה של', 'failed to reload module because:': 'נכשל בטעינה חוזרת של מודול בגלל:', 'file "%(filename)s" created': 'הקובץ "%(filename)s" נוצר', 'file "%(filename)s" deleted': 'הקובץ "%(filename)s" נמחק', 'file "%(filename)s" uploaded': 'הקובץ "%(filename)s" הועלה', 'file "%s" of %s restored': 'הקובץ "%s" of %s שוחזר', 'file changed on disk': 'קובץ שונה על גבי הדיסק', 'file does not exist': 'קובץ לא נמצא', 'file saved on %(time)s': 'הקובץ נשמר בשעה %(time)s', 'file saved on %s': 'הקובץ נשמר ב%s', 'filter': 'filter', 'Help': 'עזרה', 'htmledit': 'עורך ויזואלי', 'includes': 'מכיל', 'insert new': 'הכנס נוסף', 'insert new %s': 'הכנס %s נוסף', 'inspect attributes': 'inspect attributes', 'Install': 'התקן', 'internal error': 'שגיאה מובנית', 'invalid password': 'סיסמא שגויה', 'invalid request': 'בקשה לא תקינה', 'invalid ticket': 'דו"ח שגיאה לא קיים', 'language file "%(filename)s" created/updated': 'קובץ השפה "%(filename)s" נוצר\עודכן', 'languages': 'שפות', 'loading...': 'טוען...', 'locals': 'locals', 'login': 'התחבר', 'Logout': 'התנתק', 'merge': 'מזג', 'models': 'מבני נתונים', 'modules': 'מודולים', 'new application "%s" created': 'האפליקציה "%s" נוצרה', 'new plugin installed': 'פלאגין חדש הותקן', 'new record inserted': 'הרשומה נוספה', 'next 100 rows': '100 הרשומות הבאות', 'no match': 'לא נמצאה התאמה', 'or import from csv file': 'או יבא מקובץ csv', 'or provide app url:': 'או ספק כתובת url של אפליקציה', 'Overwrite installed app': 'התקן על גבי אפלקציה מותקנת', 'Pack all': 'ארוז הכל', 'Pack compiled': 'ארוז מקומפל', 'pack plugin': 'ארוז תוסף', 'password changed': 'סיסמא שונתה', 'plugin "%(plugin)s" deleted': 'תוסף "%(plugin)s" נמחק', 'plugins': 'plugins', 'previous 100 rows': '100 הרשומות הקודמות', 'record': 'רשומה', 'record does not exist': 'הרשומה אינה קיימת', 'record id': 'מזהה רשומה', 'Remove compiled': 'הסר מקומפל', 'request': 'request', 'response': 'response', 'restore': 'שחזר', 'revert': 'חזור לגירסא קודמת', 'selected': 'נבחרו', 'session': 'session', 'session expired': 'תם הסשן', 'shell': 'שורת פקודה', 'Site': 'אתר', 'some files could not be removed': 'לא ניתן היה להסיר חלק מהקבצים', 'Start wizard': 'start wizard', 'state': 'מצב', 'static': 'קבצים סטאטיים', 'submit': 'שלח', 'table': 'טבלה', 'test': 'בדיקות', 'the application logic, each URL path is mapped in one exposed function in the controller': 'הלוגיקה של האפליקציה, כל url ממופה לפונקציה חשופה בבקר', 'the data representation, define database tables and sets': 'ייצוג המידע, בו מוגדרים טבלאות ומבנים', 'the presentations layer, views are also known as templates': 'שכבת התצוגה, המכונה גם template', 'these files are served without processing, your images go here': 'אלו הם קבצים הנשלחים מהשרת ללא עיבוד. הכנס את התמונות כאן', 'to previous version.': 'אין גירסא קודמת', 'translation strings for the application': 'מחרוזות תרגום עבור האפליקציה', 'try': 'נסה', 'try something like': 'נסה משהו כמו', 'unable to create application "%s"': 'נכשל ביצירת האפליקציה "%s"', 'unable to delete file "%(filename)s"': 'נכשל במחיקת הקובץ "%(filename)s"', 'unable to delete file plugin "%(plugin)s"': 'נכשל במחיקת התוסף "%(plugin)s"', 'unable to parse csv file': 'לא הצלחתי לנתח את הקלט של קובץ csv', 'unable to uninstall "%s"': 'לא ניתן להסיר את "%s"', 'unable to upgrade because "%s"': 'לא ניתן היה לשדרג כי "%s"', 'uncheck all': 'הסר סימון מהכל', 'Uninstall': 'הסר התקנה', 'update': 'עדכן', 'update all languages': 'עדכן את כלל קיבצי השפה', 'upgrade now': 'upgrade now', 'upgrade web2py now': 'שדרג את web2py עכשיו', 'upload': 'upload', 'upload application:': 'העלה אפליקציה:', 'upload file:': 'העלה קובץ:', 'upload plugin file:': 'העלה קובץ תוסף:', 'variables': 'משתנים', 'versioning': 'מנגנון גירסאות', 'view': 'הצג', 'views': 'מראה', 'web2py Recent Tweets': 'ציוצים אחרונים של web2py', 'web2py is up to date': 'web2py מותקנת בגירסתה האחרונה', 'web2py upgraded; please restart it': 'web2py שודרגה; נא אתחל אותה', } web2py-1.99.7.orig/applications/admin/languages/de-de.py0000644000175000017500000004414211724764235021546 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Update" ist ein optionaler Ausdruck wie "Feld1 = \'newvalue". JOIN Ergebnisse können nicht aktualisiert oder gelöscht werden', '%Y-%m-%d': '%Y-%m-%d', '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', '%s rows deleted': '%s Zeilen gelöscht', '%s rows updated': '%s Zeilen aktualisiert', '(requires internet access)': '(requires internet access)', '(something like "it-it")': '(so etwas wie "it-it")', 'A new version of web2py is available': 'Eine neue Version von web2py ist verfügbar', 'A new version of web2py is available: %s': 'Eine neue Version von web2py ist verfügbar: %s', 'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\n': 'Eine neue Version von web2py ist verfügbar: Version 1.85.3 (2010-09-18 07:07:46)\n', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ACHTUNG: Die Einwahl benötigt eine sichere (HTTPS) Verbindung. Es sei denn sie läuft Lokal(localhost).', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ACHTUNG: Testen ist nicht threadsicher. Führen sie also nicht mehrere Tests gleichzeitig aus.', 'ATTENTION: This is an experimental feature and it needs more testing.': 'ACHTUNG: Dies ist eine experimentelle Funktion und benötigt noch weitere Tests.', 'ATTENTION: you cannot edit the running application!': 'ACHTUNG: Eine laufende Anwendung kann nicht editiert werden!', 'Abort': 'Abbrechen', 'About': 'Über', 'About application': 'Über die Anwendung', 'Additional code for your application': 'Additional code for your application', 'Admin is disabled because insecure channel': 'Appadmin ist deaktiviert, wegen der Benutzung eines unsicheren Kanals', 'Admin is disabled because unsecure channel': 'Appadmin ist deaktiviert, wegen der Benutzung eines unsicheren Kanals', 'Admin language': 'Admin language', 'Administrator Password:': 'Administrator Passwort:', 'Application name:': 'Application name:', 'Are you sure you want to delete file "%s"?': 'Sind Sie sich sicher, dass Sie diese Datei löschen wollen "%s"?', 'Are you sure you want to uninstall application "%s"': 'Sind Sie sich sicher, dass Sie diese Anwendung deinstallieren wollen "%s"', 'Are you sure you want to uninstall application "%s"?': 'Sind Sie sich sicher, dass Sie diese Anwendung deinstallieren wollen "%s"?', 'Are you sure you want to upgrade web2py now?': 'Sind Sie sich sicher, dass Sie web2py jetzt upgraden möchten?', 'Authentication': 'Authentifizierung', 'Available databases and tables': 'Verfügbare Datenbanken und Tabellen', 'Cannot be empty': 'Darf nicht leer sein', 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Nicht Kompilierbar:Es sind Fehler in der Anwendung. Beseitigen Sie die Fehler und versuchen Sie es erneut.', 'Change Password': 'Passwort ändern', 'Check to delete': 'Markiere zum löschen', 'Checking for upgrades...': 'Auf Updates überprüfen...', 'Client IP': 'Client IP', 'Controller': 'Controller', 'Controllers': 'Controller', 'Copyright': 'Urheberrecht', 'Create new simple application': 'Erzeuge neue Anwendung', 'Current request': 'Aktuelle Anfrage (request)', 'Current response': 'Aktuelle Antwort (response)', 'Current session': 'Aktuelle Sitzung (session)', 'DB Model': 'DB Modell', 'DESIGN': 'design', 'Database': 'Datenbank', 'Date and Time': 'Datum und Uhrzeit', 'Delete': 'Löschen', 'Delete:': 'Löschen:', 'Deploy on Google App Engine': 'Auf Google App Engine installieren', 'Description': 'Beschreibung', 'Design for': 'Design für', 'E-mail': 'E-mail', 'EDIT': 'BEARBEITEN', 'Edit': 'Bearbeiten', 'Edit Profile': 'Bearbeite Profil', 'Edit This App': 'Bearbeite diese Anwendung', 'Edit application': 'Bearbeite Anwendung', 'Edit current record': 'Bearbeite aktuellen Datensatz', 'Editing Language file': 'Sprachdatei bearbeiten', 'Editing file': 'Bearbeite Datei', 'Editing file "%s"': 'Bearbeite Datei "%s"', 'Enterprise Web Framework': 'Enterprise Web Framework', 'Error logs for "%(app)s"': 'Fehlerprotokoll für "%(app)s"', 'Exception instance attributes': 'Atribute der Ausnahmeinstanz', 'Expand Abbreviation': 'Kürzel erweitern', 'First name': 'Vorname', 'Functions with no doctests will result in [passed] tests.': 'Funktionen ohne doctests erzeugen [passed] in Tests', 'Go to Matching Pair': 'gehe zum übereinstimmenden Paar', 'Group ID': 'Gruppen ID', 'Hello World': 'Hallo Welt', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Falls der obere Test eine Fehler-Ticketnummer enthält deutet das auf einen Fehler in der Ausführung des Controllers hin, noch bevor der Doctest ausgeführt werden konnte. Gewöhnlich führen fehlerhafte Einrückungen oder fehlerhafter Code ausserhalb der Funktion zu solchen Fehlern. Ein grüner Titel deutet darauf hin, dass alle Test(wenn sie vorhanden sind) erfolgreich durchlaufen wurden. In diesem Fall werden die Testresultate nicht angezeigt.', 'If you answer "yes", be patient, it may take a while to download': '', 'If you answer yes, be patient, it may take a while to download': 'If you answer yes, be patient, it may take a while to download', 'Import/Export': 'Importieren/Exportieren', 'Index': 'Index', 'Installed applications': 'Installierte Anwendungen', 'Internal State': 'interner Status', 'Invalid Query': 'Ungültige Abfrage', 'Invalid action': 'Ungültige Aktion', 'Invalid email': 'Ungültige Email', 'Key bindings': 'Tastenbelegungen', 'Key bindings for ZenConding Plugin': 'Tastenbelegungen für das ZenConding Plugin', 'Language files (static strings) updated': 'Sprachdatei (statisch Strings) aktualisiert', 'Languages': 'Sprachen', 'Last name': 'Nachname', 'Last saved on:': 'Zuletzt gespeichert am:', 'Layout': 'Layout', 'License for': 'Lizenz für', 'Login': 'Anmelden', 'Login to the Administrative Interface': 'An das Administrations-Interface anmelden', 'Logout': 'Abmeldung', 'Lost Password': 'Passwort vergessen', 'Main Menu': 'Menú principal', 'Match Pair': 'Paare finden', 'Menu Model': 'Menü Modell', 'Merge Lines': 'Zeilen zusammenfügen', 'Models': 'Modelle', 'Modules': 'Module', 'NO': 'NEIN', 'Name': 'Name', 'New Record': 'Neuer Datensatz', 'New application wizard': 'New application wizard', 'New simple application': 'New simple application', 'Next Edit Point': 'nächster Bearbeitungsschritt', 'No databases in this application': 'Keine Datenbank in dieser Anwendung', 'Origin': 'Herkunft', 'Original/Translation': 'Original/Übersetzung', 'Password': 'Passwort', 'Peeking at file': 'Dateiansicht', 'Plugin "%s" in application': 'Plugin "%s" in Anwendung', 'Plugins': 'Plugins', 'Powered by': 'Unterstützt von', 'Previous Edit Point': 'vorheriger Bearbeitungsschritt', 'Query:': 'Abfrage:', 'Record ID': 'Datensatz ID', 'Register': 'registrieren', 'Registration key': 'Registrierungsschlüssel', 'Reset Password key': 'Passwortschlüssel zurücksetzen', 'Resolve Conflict file': 'bereinige Konflikt-Datei', 'Role': 'Rolle', 'Rows in table': 'Zeilen in Tabelle', 'Rows selected': 'Zeilen ausgewählt', 'Save via Ajax': 'via Ajax sichern', 'Saved file hash:': 'Gespeicherter Datei-Hash:', 'Searching:': 'Searching:', 'Static files': 'statische Dateien', 'Stylesheet': 'Stylesheet', 'Sure you want to delete this object?': 'Wollen Sie das Objekt wirklich löschen?', 'TM': 'TM', 'Table name': 'Tabellen Name', 'Testing application': 'Teste die Anwendung', 'Testing controller': 'teste Controller', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'Die "query" ist eine Bedingung wie "db.table1.field1 == \'Wert\'". Etwas wie "db.table1.field1 db.table2.field2 ==" führt zu einem SQL JOIN.', 'The application logic, each URL path is mapped in one exposed function in the controller': 'The application logic, each URL path is mapped in one exposed function in the controller', 'The data representation, define database tables and sets': 'The data representation, define database tables and sets', 'The output of the file is a dictionary that was rendered by the view': 'The output of the file is a dictionary that was rendered by the view', 'The presentations layer, views are also known as templates': 'The presentations layer, views are also known as templates', 'There are no controllers': 'Keine Controller vorhanden', 'There are no models': 'Keine Modelle vorhanden', 'There are no modules': 'Keine Module vorhanden', 'There are no plugins': 'There are no plugins', 'There are no static files': 'Keine statischen Dateien vorhanden', 'There are no translators, only default language is supported': 'Keine Übersetzungen vorhanden, nur die voreingestellte Sprache wird unterstützt', 'There are no views': 'Keine Views vorhanden', 'These files are served without processing, your images go here': 'These files are served without processing, your images go here', 'This is a copy of the scaffolding application': 'Dies ist eine Kopie einer Grundgerüst-Anwendung', 'This is the %(filename)s template': 'Dies ist das Template %(filename)s', 'Ticket': 'Ticket', 'Timestamp': 'Timestamp', 'To create a plugin, name a file/folder plugin_[name]': 'Um ein Plugin zu erstellen benennen Sie eine(n) Datei/Ordner plugin_[Name]', 'Translation strings for the application': 'Translation strings for the application', 'Unable to check for upgrades': 'überprüfen von Upgrades nicht möglich', 'Unable to download': 'herunterladen nicht möglich', 'Unable to download app': 'herunterladen der Anwendung nicht möglich', 'Update:': 'Aktualisiere:', 'Upload & install packed application': 'Verpackte Anwendung hochladen und installieren', 'Upload a package:': 'Upload a package:', 'Upload existing application': 'lade existierende Anwendung hoch', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Benutze (...)&(...) für AND, (...)|(...) für OR, und ~(...) für NOT, um komplexe Abfragen zu erstellen.', 'Use an url:': 'Use an url:', 'User ID': 'Benutzer ID', 'Version': 'Version', 'View': 'View', 'Views': 'Views', 'Welcome %s': 'Willkommen %s', 'Welcome to web2py': 'Willkommen zu web2py', 'Which called the function': 'Which called the function', 'Wrap with Abbreviation': 'mit Kürzel einhüllen', 'YES': 'JA', 'You are successfully running web2py': 'web2by wird erfolgreich ausgeführt', 'You can modify this application and adapt it to your needs': 'Sie können diese Anwendung verändern und Ihren Bedürfnissen anpassen', 'You visited the url': 'Sie besuchten die URL', 'About': 'Über', 'additional code for your application': 'zusätzlicher Code für Ihre Anwendung', 'admin disabled because no admin password': ' admin ist deaktiviert, weil kein Admin-Passwort gesetzt ist', 'admin disabled because not supported on google apps engine': 'admin ist deaktiviert, es existiert dafür keine Unterstützung auf der google apps engine', 'admin disabled because unable to access password file': 'admin ist deaktiviert, weil kein Zugriff auf die Passwortdatei besteht', 'administrative interface': 'administrative interface', 'and rename it (required):': 'und benenne sie um (erforderlich):', 'and rename it:': ' und benenne sie um:', 'appadmin': 'appadmin', 'appadmin is disabled because insecure channel': 'Appadmin ist deaktiviert, wegen der Benutzung eines unsicheren Kanals', 'application "%s" uninstalled': 'Anwendung "%s" deinstalliert', 'application compiled': 'Anwendung kompiliert', 'application is compiled and cannot be designed': 'Die Anwendung ist kompiliert kann deswegen nicht mehr geändert werden', 'arguments': 'arguments', 'back': 'zurück', 'beautify': 'beautify', 'cache': 'Cache', 'cache, errors and sessions cleaned': 'Zwischenspeicher (cache), Fehler und Sitzungen (sessions) gelöscht', 'call': 'call', 'cannot create file': 'Kann Datei nicht erstellen', 'cannot upload file "%(filename)s"': 'Kann Datei nicht Hochladen "%(filename)s"', 'Change admin password': 'Administrator-Passwort ändern', 'change password': 'Passwort ändern', 'check all': 'alles auswählen', 'Check for upgrades': 'check for upgrades', 'Clean': 'löschen', 'click here for online examples': 'hier klicken für online Beispiele', 'click here for the administrative interface': 'hier klicken für die Administrationsoberfläche ', 'click to check for upgrades': 'hier klicken um nach Upgrades zu suchen', 'code': 'code', 'collapse/expand all': 'collapse/expand all', 'Compile': 'kompilieren', 'compiled application removed': 'kompilierte Anwendung gelöscht', 'controllers': 'Controllers', 'Create': 'erstellen', 'create file with filename:': 'erzeuge Datei mit Dateinamen:', 'create new application:': 'erzeuge neue Anwendung:', 'created by': 'created by', 'crontab': 'crontab', 'currently running': 'currently running', 'currently saved or': 'des derzeit gespeicherten oder', 'customize me!': 'pass mich an!', 'data uploaded': 'Daten hochgeladen', 'database': 'Datenbank', 'database %s select': 'Datenbank %s ausgewählt', 'database administration': 'Datenbankadministration', 'db': 'db', 'defines tables': 'definiere Tabellen', 'delete': 'löschen', 'delete all checked': 'lösche alle markierten', 'delete plugin': 'Plugin löschen', 'Deploy': 'deploy', 'design': 'design', 'direction: ltr': 'direction: ltr', 'documentation': 'Dokumentation', 'done!': 'fertig!', 'download layouts': 'download layouts', 'download plugins': 'download plugins', 'Edit': 'bearbeiten', 'edit controller': 'Bearbeite Controller', 'edit profile': 'bearbeite Profil', 'edit views:': 'Views bearbeiten:', 'Errors': 'Fehler', 'escape': 'escape', 'export as csv file': 'Exportieren als CSV-Datei', 'exposes': 'stellt zur Verfügung', 'extends': 'erweitert', 'failed to reload module': 'neu laden des Moduls fehlgeschlagen', 'file "%(filename)s" created': 'Datei "%(filename)s" erstellt', 'file "%(filename)s" deleted': 'Datei "%(filename)s" gelöscht', 'file "%(filename)s" uploaded': 'Datei "%(filename)s" hochgeladen', 'file "%(filename)s" was not deleted': 'Datei "%(filename)s" wurde nicht gelöscht', 'file "%s" of %s restored': 'Datei "%s" von %s wiederhergestellt', 'file changed on disk': 'Datei auf Festplatte geändert', 'file does not exist': 'Datei existiert nicht', 'file saved on %(time)s': 'Datei gespeichert am %(time)s', 'file saved on %s': 'Datei gespeichert auf %s', 'files': 'files', 'filter': 'filter', 'Help': 'Hilfe', 'htmledit': 'htmledit', 'includes': 'Einfügen', 'index': 'index', 'insert new': 'neu einfügen', 'insert new %s': 'neu einfügen %s', 'Install': 'installieren', 'internal error': 'interner Fehler', 'invalid password': 'Ungültiges Passwort', 'invalid request': 'ungültige Anfrage', 'invalid ticket': 'ungültiges Ticket', 'language file "%(filename)s" created/updated': 'Sprachdatei "%(filename)s" erstellt/aktualisiert', 'languages': 'Sprachen', 'languages updated': 'Sprachen aktualisiert', 'loading...': 'lade...', 'located in the file': 'located in Datei', 'login': 'anmelden', 'Logout': 'abmelden', 'lost password?': 'Passwort vergessen?', 'merge': 'verbinden', 'models': 'Modelle', 'modules': 'Module', 'new application "%s" created': 'neue Anwendung "%s" erzeugt', 'new record inserted': 'neuer Datensatz eingefügt', 'next 100 rows': 'nächsten 100 Zeilen', 'or import from csv file': 'oder importieren von cvs Datei', 'or provide app url:': 'oder geben Sie eine Anwendungs-URL an:', 'or provide application url:': 'oder geben Sie eine Anwendungs-URL an:', 'Overwrite installed app': 'installierte Anwendungen überschreiben', 'Pack all': 'verpacke alles', 'Pack compiled': 'Verpacke kompiliert', 'pack plugin': 'Plugin verpacken', 'please wait!': 'bitte warten!', 'plugins': 'plugins', 'previous 100 rows': 'vorherige 100 zeilen', 'record': 'Datensatz', 'record does not exist': 'Datensatz existiert nicht', 'record id': 'Datensatz id', 'register': 'Registrierung', 'Remove compiled': 'kompilat gelöscht', 'restore': 'wiederherstellen', 'revert': 'zurückkehren', 'save': 'sichern', 'selected': 'ausgewählt(e)', 'session expired': 'Sitzung Abgelaufen', 'shell': 'shell', 'Site': 'Seite', 'some files could not be removed': 'einige Dateien konnten nicht gelöscht werden', 'Start wizard': 'start wizard', 'state': 'Status', 'static': 'statische Dateien', 'submit': 'Absenden', 'table': 'Tabelle', 'test': 'Test', 'test_def': 'test_def', 'test_for': 'test_for', 'test_if': 'test_if', 'test_try': 'test_try', 'the application logic, each URL path is mapped in one exposed function in the controller': 'Die Logik der Anwendung, jeder URL-Pfad wird auf eine Funktion abgebildet die der Controller zur Verfügung stellt', 'the data representation, define database tables and sets': 'Die Datenrepräsentation definiert Mengen von Tabellen und Datenbanken ', 'the presentations layer, views are also known as templates': 'Die Präsentationsschicht, Views sind auch bekannt als Vorlagen/Templates', 'these files are served without processing, your images go here': 'Diese Dateien werden ohne Verarbeitung ausgeliefert. Beispielsweise Bilder kommen hier hin.', 'to previous version.': 'zu einer früheren Version.', 'translation strings for the application': 'Übersetzungs-Strings für die Anwendung', 'try': 'versuche', 'try something like': 'versuche so etwas wie', 'unable to create application "%s"': 'erzeugen von Anwendung "%s" nicht möglich', 'unable to delete file "%(filename)s"': 'löschen von Datein "%(filename)s" nicht möglich', 'unable to parse csv file': 'analysieren der cvs Datei nicht möglich', 'unable to uninstall "%s"': 'deinstallieren von "%s" nicht möglich', 'uncheck all': 'alles demarkieren', 'Uninstall': 'deinstallieren', 'update': 'aktualisieren', 'update all languages': 'aktualisiere alle Sprachen', 'upgrade web2py now': 'jetzt web2py upgraden', 'upload': 'upload', 'upload application:': 'lade Anwendung hoch:', 'upload file:': 'lade Datei hoch:', 'upload plugin file:': 'Plugin-Datei hochladen:', 'user': 'user', 'variables': 'variables', 'versioning': 'Versionierung', 'view': 'View', 'views': 'Views', 'web2py Recent Tweets': 'neuste Tweets von web2py', 'web2py is up to date': 'web2py ist auf dem neuesten Stand', 'xml': 'xml', } web2py-1.99.7.orig/applications/admin/languages/zh-tw.py0000644000175000017500000003513311724764235021641 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"更新" 是選擇性的條件式, 格式就像 "欄位1=\'值\'". 但是 JOIN 的資料不可以使用 update 或是 delete"', '%Y-%m-%d': '%Y-%m-%d', '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', '%s rows deleted': '已刪除 %s 筆', '%s rows updated': '已更新 %s 筆', '(something like "it-it")': '(格式類似 "zh-tw")', 'A new version of web2py is available': '新版的 web2py 已發行', 'A new version of web2py is available: %s': '新版的 web2py 已發行: %s', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': '注意: 登入管理帳號需要安全連線(HTTPS)或是在本機連線(localhost).', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': '注意: 因為在測試模式不保證多執行緒安全性,也就是說不可以同時執行多個測試案例', 'ATTENTION: you cannot edit the running application!': '注意:不可編輯正在執行的應用程式!', 'About': '關於', 'About application': '關於本應用程式', 'Admin is disabled because insecure channel': '管理功能(Admin)在不安全連線環境下自動關閉', 'Admin is disabled because unsecure channel': '管理功能(Admin)在不安全連線環境下自動關閉', 'Administrator Password:': '管理員密碼:', 'Are you sure you want to delete file "%s"?': '確定要刪除檔案"%s"?', 'Are you sure you want to delete plugin "%s"?': '確定要刪除插件 "%s"?', 'Are you sure you want to uninstall application "%s"': '確定要移除應用程式 "%s"', 'Are you sure you want to uninstall application "%s"?': '確定要移除應用程式 "%s"', 'Are you sure you want to upgrade web2py now?': '確定現在要升級 web2py?', 'Authentication': '驗證', 'Available databases and tables': '可提供的資料庫和資料表', 'Cannot be empty': '不可空白', 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': '無法編譯:應用程式中含有錯誤,請除錯後再試一次.', 'Cannot compile: there are errors in your app:': '無法編譯: 在你的應用程式存在錯誤:', 'Change Password': '變更密碼', 'Check to delete': '打勾代表刪除', 'Check to delete:': '打勾代表刪除:', 'Checking for upgrades...': '檢查新版本中...', 'Client IP': '客戶端網址(IP)', 'Controller': '控件', 'Controllers': '控件', 'Copyright': '版權所有', 'Create new simple application': '創建應用程式', 'Current request': '目前網路資料要求(request)', 'Current response': '目前網路資料回應(response)', 'Current session': '目前網路連線資訊(session)', 'DB Model': '資料庫模組', 'DESIGN': '設計', 'Database': '資料庫', 'Date and Time': '日期和時間', 'Delete': '刪除', 'Delete:': '刪除:', 'Deploy on Google App Engine': '配置到 Google App Engine', 'Description': '描述', 'Design for': '設計為了', 'E-mail': '電子郵件', 'EDIT': '編輯', 'Edit': '編輯', 'Edit Profile': '編輯設定檔', 'Edit This App': '編輯本應用程式', 'Edit application': '編輯應用程式', 'Edit current record': '編輯當前紀錄', 'Editing Language file': '編輯語言檔案', 'Editing file': '編輯檔案', 'Editing file "%s"': '編輯檔案"%s"', 'Enterprise Web Framework': '企業網站平台', 'Error logs for "%(app)s"': '"%(app)s"的錯誤紀錄', 'Exception instance attributes': 'Exception instance attributes', 'First name': '名', 'Functions with no doctests will result in [passed] tests.': '沒有 doctests 的函式會顯示 [passed].', 'Group ID': '群組編號', 'Hello World': '嗨! 世界', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.', 'Import/Export': '匯入/匯出', 'Index': '索引', 'Installed applications': '已安裝應用程式', 'Internal State': '內部狀態', 'Invalid Query': '不合法的查詢', 'Invalid action': '不合法的動作(action)', 'Invalid email': '不合法的電子郵件', 'Language files (static strings) updated': '語言檔已更新', 'Languages': '各國語言', 'Last name': '姓', 'Last saved on:': '最後儲存時間:', 'Layout': '網頁配置', 'License for': '許可證', 'Login': '登入', 'Login to the Administrative Interface': '登入到管理員介面', 'Logout': '登出', 'Lost Password': '密碼遺忘', 'Main Menu': '主選單', 'Menu Model': '選單模組(menu)', 'Models': '資料模組', 'Modules': '程式模組', 'NO': '否', 'Name': '名字', 'New Record': '新紀錄', 'No databases in this application': '這應用程式不含資料庫', 'Origin': '原文', 'Original/Translation': '原文/翻譯', 'PAM authenticated user, cannot change password here': 'PAM 授權使用者, 無法在此變更密碼', 'Password': '密碼', "Password fields don't match": '密碼欄不匹配', 'Peeking at file': '選個文件', 'Plugin "%s" in application': '在應用程式的插件 "%s"', 'Plugins': '插件', 'Powered by': '基於以下技術構建:', 'Query:': '查詢:', 'Record ID': '紀錄編號', 'Register': '註冊', 'Registration key': '註冊金鑰', 'Remember me (for 30 days)': '記住帳號(30 天)', 'Reset Password key': '重設密碼', 'Resolve Conflict file': '解決衝突檔案', 'Role': '角色', 'Rows in table': '在資料表裏的資料', 'Rows selected': '筆資料被選擇', 'Saved file hash:': '檔案雜湊值已紀錄:', 'Static files': '靜態檔案', 'Stylesheet': '網頁風格檔', 'Submit': '傳送', 'Sure you want to delete this object?': '確定要刪除此物件?', 'TM': 'TM', 'Table name': '資料表名稱', 'Testing application': '測試中的應用程式', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"查詢"是一個像 "db.表1.欄位1==\'值\'" 的條件式. 以"db.表1.欄位1==db.表2.欄位2"方式則相當於執行 JOIN SQL.', 'There are no controllers': '沒有控件(controllers)', 'There are no models': '沒有資料庫模組(models)', 'There are no modules': '沒有程式模組(modules)', 'There are no static files': '沒有靜態檔案', 'There are no translators, only default language is supported': '沒有翻譯檔,只支援原始語言', 'There are no views': '沒有視圖', 'This is the %(filename)s template': '這是%(filename)s檔案的樣板(template)', 'Ticket': '問題單', 'Timestamp': '時間標記', 'To create a plugin, name a file/folder plugin_[name]': '檔案或目錄名稱以 plugin_開頭來創建插件', 'Unable to check for upgrades': '無法做升級檢查', 'Unable to download': '無法下載', 'Unable to download app': '無法下載應用程式', 'Unable to download app because:': '無法下載應用程式因為:', 'Unable to download because': '因為下列原因無法下載:', 'Update:': '更新:', 'Upload & install packed application': '上傳並安裝已打包的應用程式', 'Upload existing application': '更新存在的應用程式', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': '使用下列方式來組合更複雜的條件式, (...)&(...) 代表同時存在的條件, (...)|(...) 代表擇一的條件, ~(...)則代表反向條件.', 'User %(id)s Logged-in': '使用者 %(id)s 已登入', 'User %(id)s Registered': '使用者 %(id)s 已註冊', 'User ID': '使用者編號', 'Verify Password': '驗證密碼', 'Version': '版本', 'View': '視圖', 'Views': '視圖', 'Welcome %s': '歡迎 %s', 'Welcome to web2py': '歡迎使用 web2py', 'YES': '是', 'About': '關於', 'additional code for your application': '應用程式額外的程式碼', 'admin disabled because no admin password': '管理介面關閉原因是沒有設定管理員密碼 ', 'admin disabled because not supported on google app engine': '管理介面關閉原因是不支援在google apps engine環境下運作', 'admin disabled because unable to access password file': '管理介面關閉原因是無法存取密碼檔', 'amy_ajax': 'amy_ajax', 'and rename it (required):': '同時更名為(必要的):', 'and rename it:': '同時更名為:', 'appadmin': '應用程式管理員', 'appadmin is disabled because insecure channel': '管理介面關閉理由是連線方式不安全', 'application "%s" uninstalled': '已移除應用程式 "%s"', 'application compiled': '已編譯應用程式', 'application is compiled and cannot be designed': '應用程式已經編譯無法重新設計', 'arguments': 'arguments', 'back': '回復(back)', 'cache': '快取記憶體', 'cache, errors and sessions cleaned': '快取記憶體,錯誤紀錄,連線紀錄已清除', 'cannot create file': '無法創建檔案', 'cannot upload file "%(filename)s"': '無法上傳檔案 "%(filename)s"', 'Change admin password': 'change admin password', 'change_password': '變更密碼', 'check all': '全選', 'Clean': '清除', 'click here for online examples': '點此處進入線上範例', 'click here for the administrative interface': '點此處進入管理介面', 'click to check for upgrades': '點擊打勾以便升級', 'code': 'code', 'Compile': '編譯', 'compiled application removed': '已移除已編譯的應用程式', 'controllers': '控件', 'Create': '創建', 'create file with filename:': '創建檔案:', 'create new application:': '創建新應用程式:', 'created by': '創建自', 'crontab': '定時執行表', 'currently saved or': '現在存檔或', 'customize me!': '請調整我!', 'data uploaded': '資料已上傳', 'database': '資料庫', 'database %s select': '已選擇 %s 資料庫', 'database administration': '資料庫管理', 'db': 'db', 'defines tables': '定義資料表', 'delete': '刪除', 'delete all checked': '刪除所有已選擇項目', 'delete plugin': '刪除插件', 'delete_plugin': '刪除插件', 'design': '設計', 'direction: ltr': 'direction: ltr', 'done!': '完成!', 'Edit': '編輯', 'edit controller': '編輯控件', 'edit views:': '編輯視圖', 'edit_language': '編輯語言檔', 'Errors': '錯誤紀錄', 'export as csv file': '以逗號分隔檔(csv)格式匯出', 'exposes': '外顯', 'extends': '擴展', 'failed to reload module because:': '因為下列原因無法重新載入程式模組:', 'file "%(filename)s" created': '檔案 "%(filename)s" 已創建', 'file "%(filename)s" deleted': '檔案 "%(filename)s" 已刪除', 'file "%(filename)s" uploaded': '檔案 "%(filename)s" 已上傳', 'file "%s" of %s restored': '檔案 %s 的 "%s" 已回存', 'file changed on disk': '在磁碟上檔案已改變', 'file does not exist': '檔案不存在', 'file saved on %(time)s': '檔案已於 %(time)s 儲存', 'file saved on %s': '檔案在 %s 已儲存', 'Help': '說明檔', 'htmledit': 'html編輯', 'includes': '包含', 'index': '索引', 'insert new': '插入新資料', 'insert new %s': '插入新資料 %s', 'Install': '安裝', 'internal error': '內部錯誤', 'invalid password': '密碼錯誤', 'invalid request': '不合法的網路要求(request)', 'invalid ticket': '不合法的問題單號', 'language file "%(filename)s" created/updated': '語言檔"%(filename)s"已創建或更新', 'languages': '語言檔', 'loading...': '載入中...', 'login': '登入', 'Logout': '登出', 'merge': '合併', 'models': '資料庫模組', 'modules': '程式模組', 'new application "%s" created': '已創建新的應用程式 "%s"', 'new plugin installed': '已安裝新插件', 'new record inserted': '已新增新紀錄', 'next 100 rows': '往後 100 筆', 'no match': '無法匹配', 'or import from csv file': '或是從逗號分隔檔(CSV)匯入', 'or provide app url:': '或是提供應用程式的安裝網址:', 'Overwrite installed app': '覆蓋已安裝的應用程式', 'Pack all': '全部打包', 'Pack compiled': '打包已編譯資料', 'pack plugin': '打包插件', 'password changed': '密碼已變更', 'peek': '選取', 'plugin': '插件', 'plugin "%(plugin)s" deleted': '已刪除插件"%(plugin)s"', 'previous 100 rows': '往前 100 筆', 'record': '紀錄', 'record does not exist': '紀錄不存在', 'record id': '紀錄編號', 'register': '註冊', 'Remove compiled': '編譯檔案已移除', 'resolve': '解決', 'restore': '回存', 'revert': '反向恢復', 'save': '儲存', 'selected': '已選擇', 'session expired': '連線(session)已過時', 'shell': '命令列操作介面', 'Site': '網站', 'some files could not be removed': '部份檔案無法移除', 'state': '狀態', 'static': '靜態檔案', 'submit': '傳送', 'table': '資料表', 'test': '測試', 'the application logic, each URL path is mapped in one exposed function in the controller': '應用程式邏輯 - 每個網址路徑對應到一個控件的函式', 'the data representation, define database tables and sets': '資料展現層 - 用來定義資料表和集合', 'the presentations layer, views are also known as templates': '外觀展現層 - 視圖有時也被稱為樣板', 'these files are served without processing, your images go here': '這些檔案保留未經處理,你的影像檔在此', 'ticket': '問題單', 'to previous version.': '到前一個版本', 'translation strings for the application': '翻譯此應用程式的字串', 'try': '嘗試', 'try something like': '嘗試如', 'unable to create application "%s"': '無法創建應用程式 "%s"', 'unable to delete file "%(filename)s"': '無法刪除檔案 "%(filename)s"', 'unable to delete file plugin "%(plugin)s"': '無法刪查插件檔 "%(plugin)s"', 'unable to parse csv file': '無法解析逗號分隔檔(csv)', 'unable to uninstall "%s"': '無法移除安裝 "%s"', 'unable to upgrade because "%s"': '無法升級因為 "%s"', 'uncheck all': '全不選', 'Uninstall': '解除安裝', 'update': '更新', 'update all languages': '將程式中待翻譯語句更新到所有的語言檔', 'upgrade web2py now': 'upgrade web2py now', 'upgrade_web2py': '升級 web2py', 'upload application:': '上傳應用程式:', 'upload file:': '上傳檔案:', 'upload plugin file:': '上傳插件檔:', 'variables': 'variables', 'versioning': '版本管理', 'view': '視圖', 'views': '視圖', 'web2py Recent Tweets': 'web2py 最近的 Tweets', 'web2py is up to date': 'web2py 已經是最新版', 'web2py upgraded; please restart it': '已升級 web2py ; 請重新啟動', } web2py-1.99.7.orig/applications/admin/languages/bg-bg.py0000644000175000017500000003537611724764235021557 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN', '%Y-%m-%d': '%Y-%m-%d', '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', '%s rows deleted': '%s записите бяха изтрити', '%s rows updated': '%s записите бяха обновени', '(requires internet access)': '(requires internet access)', '(something like "it-it")': '(something like "it-it")', 'A new version of web2py is available': 'A new version of web2py is available', 'A new version of web2py is available: %s': 'A new version of web2py is available: %s', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.', 'ATTENTION: you cannot edit the running application!': 'ATTENTION: you cannot edit the running application!', 'About': 'About', 'About application': 'About application', 'Additional code for your application': 'Additional code for your application', 'Admin is disabled because insecure channel': 'Admin is disabled because insecure channel', 'Admin is disabled because unsecure channel': 'Admin is disabled because unsecure channel', 'Admin language': 'Admin language', 'Administrator Password:': 'Administrator Password:', 'Application name:': 'Application name:', 'Are you sure you want to delete file "%s"?': 'Are you sure you want to delete file "%s"?', 'Are you sure you want to delete plugin "%s"?': 'Are you sure you want to delete plugin "%s"?', 'Are you sure you want to uninstall application "%s"': 'Are you sure you want to uninstall application "%s"', 'Are you sure you want to uninstall application "%s"?': 'Are you sure you want to uninstall application "%s"?', 'Are you sure you want to upgrade web2py now?': 'Are you sure you want to upgrade web2py now?', 'Available databases and tables': 'Available databases and tables', 'Cannot be empty': 'Cannot be empty', 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.', 'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:', 'Check to delete': 'Check to delete', 'Checking for upgrades...': 'Checking for upgrades...', 'Controllers': 'Controllers', 'Create new simple application': 'Create new simple application', 'Current request': 'Current request', 'Current response': 'Current response', 'Current session': 'Current session', 'DESIGN': 'DESIGN', 'Date and Time': 'Date and Time', 'Delete': 'Delete', 'Delete:': 'Delete:', 'Deploy on Google App Engine': 'Deploy on Google App Engine', 'Design for': 'Design for', 'EDIT': 'EDIT', 'Edit application': 'Edit application', 'Edit current record': 'Edit current record', 'Editing Language file': 'Editing Language file', 'Editing file': 'Editing file', 'Editing file "%s"': 'Editing file "%s"', 'Enterprise Web Framework': 'Enterprise Web Framework', 'Error logs for "%(app)s"': 'Error logs for "%(app)s"', 'Exception instance attributes': 'Exception instance attributes', 'Functions with no doctests will result in [passed] tests.': 'Functions with no doctests will result in [passed] tests.', 'Hello World': 'Здравей, свят', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.', 'Import/Export': 'Import/Export', 'Installed applications': 'Installed applications', 'Internal State': 'Internal State', 'Invalid Query': 'Невалидна заявка', 'Invalid action': 'Invalid action', 'Language files (static strings) updated': 'Language files (static strings) updated', 'Languages': 'Languages', 'Last saved on:': 'Last saved on:', 'License for': 'License for', 'Login': 'Login', 'Login to the Administrative Interface': 'Login to the Administrative Interface', 'Models': 'Models', 'Modules': 'Modules', 'NO': 'NO', 'New Record': 'New Record', 'New application wizard': 'New application wizard', 'New simple application': 'New simple application', 'No databases in this application': 'No databases in this application', 'Original/Translation': 'Original/Translation', 'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here', 'Peeking at file': 'Peeking at file', 'Plugin "%s" in application': 'Plugin "%s" in application', 'Plugins': 'Plugins', 'Powered by': 'Powered by', 'Query:': 'Query:', 'Resolve Conflict file': 'Resolve Conflict file', 'Rows in table': 'Rows in table', 'Rows selected': 'Rows selected', 'Saved file hash:': 'Saved file hash:', 'Searching:': 'Searching:', 'Static files': 'Static files', 'Sure you want to delete this object?': 'Сигурен ли си, че искаш да изтриеш този обект?', 'TM': 'TM', 'Testing application': 'Testing application', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.', 'The application logic, each URL path is mapped in one exposed function in the controller': 'The application logic, each URL path is mapped in one exposed function in the controller', 'The data representation, define database tables and sets': 'The data representation, define database tables and sets', 'The presentations layer, views are also known as templates': 'The presentations layer, views are also known as templates', 'There are no controllers': 'There are no controllers', 'There are no models': 'There are no models', 'There are no modules': 'There are no modules', 'There are no plugins': 'There are no plugins', 'There are no static files': 'There are no static files', 'There are no translators, only default language is supported': 'There are no translators, only default language is supported', 'There are no views': 'There are no views', 'These files are served without processing, your images go here': 'These files are served without processing, your images go here', 'This is the %(filename)s template': 'This is the %(filename)s template', 'Ticket': 'Ticket', 'To create a plugin, name a file/folder plugin_[name]': 'To create a plugin, name a file/folder plugin_[name]', 'Translation strings for the application': 'Translation strings for the application', 'Unable to check for upgrades': 'Unable to check for upgrades', 'Unable to download': 'Unable to download', 'Unable to download app because:': 'Unable to download app because:', 'Unable to download because': 'Unable to download because', 'Update:': 'Update:', 'Upload & install packed application': 'Upload & install packed application', 'Upload a package:': 'Upload a package:', 'Upload existing application': 'Upload existing application', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.', 'Use an url:': 'Use an url:', 'Version': 'Version', 'Views': 'Views', 'Welcome to web2py': 'Добре дошъл в web2py', 'YES': 'YES', 'About': 'about', 'additional code for your application': 'additional code for your application', 'admin disabled because no admin password': 'admin disabled because no admin password', 'admin disabled because not supported on google app engine': 'admin disabled because not supported on google apps engine', 'admin disabled because unable to access password file': 'admin disabled because unable to access password file', 'administrative interface': 'administrative interface', 'and rename it (required):': 'and rename it (required):', 'and rename it:': 'and rename it:', 'appadmin': 'appadmin', 'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel', 'application "%s" uninstalled': 'application "%s" uninstalled', 'application compiled': 'application compiled', 'application is compiled and cannot be designed': 'application is compiled and cannot be designed', 'arguments': 'arguments', 'back': 'back', 'cache': 'cache', 'cache, errors and sessions cleaned': 'cache, errors and sessions cleaned', 'cannot create file': 'cannot create file', 'cannot upload file "%(filename)s"': 'cannot upload file "%(filename)s"', 'Change admin password': 'change admin password', 'check all': 'check all', 'Check for upgrades': 'check for upgrades', 'Clean': 'clean', 'click here for online examples': 'щракни тук за онлайн примери', 'click here for the administrative interface': 'щракни тук за административния интерфейс', 'click to check for upgrades': 'click to check for upgrades', 'code': 'code', 'collapse/expand all': 'collapse/expand all', 'Compile': 'compile', 'compiled application removed': 'compiled application removed', 'controllers': 'controllers', 'Create': 'create', 'create file with filename:': 'create file with filename:', 'create new application:': 'create new application:', 'created by': 'created by', 'crontab': 'crontab', 'currently running': 'currently running', 'currently saved or': 'currently saved or', 'data uploaded': 'данните бяха качени', 'database': 'database', 'database %s select': 'database %s select', 'database administration': 'database administration', 'db': 'дб', 'defines tables': 'defines tables', 'delete': 'delete', 'delete all checked': 'delete all checked', 'delete plugin': 'delete plugin', 'Deploy': 'deploy', 'design': 'дизайн', 'direction: ltr': 'direction: ltr', 'done!': 'готово!', 'download layouts': 'download layouts', 'download plugins': 'download plugins', 'Edit': 'edit', 'edit controller': 'edit controller', 'edit views:': 'edit views:', 'Errors': 'errors', 'export as csv file': 'export as csv file', 'exposes': 'exposes', 'extends': 'extends', 'failed to reload module': 'failed to reload module', 'failed to reload module because:': 'failed to reload module because:', 'file "%(filename)s" created': 'file "%(filename)s" created', 'file "%(filename)s" deleted': 'file "%(filename)s" deleted', 'file "%(filename)s" uploaded': 'file "%(filename)s" uploaded', 'file "%(filename)s" was not deleted': 'file "%(filename)s" was not deleted', 'file "%s" of %s restored': 'file "%s" of %s restored', 'file changed on disk': 'file changed on disk', 'file does not exist': 'file does not exist', 'file saved on %(time)s': 'file saved on %(time)s', 'file saved on %s': 'file saved on %s', 'files': 'files', 'filter': 'filter', 'Help': 'help', 'htmledit': 'htmledit', 'includes': 'includes', 'insert new': 'insert new', 'insert new %s': 'insert new %s', 'Install': 'install', 'internal error': 'internal error', 'invalid password': 'invalid password', 'invalid request': 'невалидна заявка', 'invalid ticket': 'invalid ticket', 'language file "%(filename)s" created/updated': 'language file "%(filename)s" created/updated', 'languages': 'languages', 'languages updated': 'languages updated', 'loading...': 'loading...', 'login': 'login', 'Logout': 'logout', 'merge': 'merge', 'models': 'models', 'modules': 'modules', 'new application "%s" created': 'new application "%s" created', 'new plugin installed': 'new plugin installed', 'new record inserted': 'новият запис беше добавен', 'next 100 rows': 'next 100 rows', 'no match': 'no match', 'or import from csv file': 'or import from csv file', 'or provide app url:': 'or provide app url:', 'or provide application url:': 'or provide application url:', 'Overwrite installed app': 'overwrite installed app', 'Pack all': 'pack all', 'Pack compiled': 'pack compiled', 'pack plugin': 'pack plugin', 'password changed': 'password changed', 'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" deleted', 'plugins': 'plugins', 'previous 100 rows': 'previous 100 rows', 'record': 'record', 'record does not exist': 'записът не съществува', 'record id': 'record id', 'Remove compiled': 'remove compiled', 'restore': 'restore', 'revert': 'revert', 'save': 'save', 'selected': 'selected', 'session expired': 'session expired', 'shell': 'shell', 'Site': 'site', 'some files could not be removed': 'some files could not be removed', 'Start wizard': 'start wizard', 'state': 'състояние', 'static': 'static', 'submit': 'submit', 'table': 'table', 'test': 'test', 'the application logic, each URL path is mapped in one exposed function in the controller': 'the application logic, each URL path is mapped in one exposed function in the controller', 'the data representation, define database tables and sets': 'the data representation, define database tables and sets', 'the presentations layer, views are also known as templates': 'the presentations layer, views are also known as templates', 'these files are served without processing, your images go here': 'these files are served without processing, your images go here', 'to previous version.': 'to previous version.', 'translation strings for the application': 'translation strings for the application', 'try': 'try', 'try something like': 'try something like', 'unable to create application "%s"': 'unable to create application "%s"', 'unable to delete file "%(filename)s"': 'unable to delete file "%(filename)s"', 'unable to delete file plugin "%(plugin)s"': 'unable to delete file plugin "%(plugin)s"', 'unable to parse csv file': 'не е възможна обработката на csv файла', 'unable to uninstall "%s"': 'unable to uninstall "%s"', 'unable to upgrade because "%s"': 'unable to upgrade because "%s"', 'uncheck all': 'uncheck all', 'Uninstall': 'uninstall', 'update': 'update', 'update all languages': 'update all languages', 'upgrade web2py now': 'upgrade web2py now', 'upload': 'upload', 'upload application:': 'upload application:', 'upload file:': 'upload file:', 'upload plugin file:': 'upload plugin file:', 'variables': 'variables', 'versioning': 'versioning', 'view': 'view', 'views': 'views', 'web2py Recent Tweets': 'web2py Recent Tweets', 'web2py is up to date': 'web2py is up to date', 'web2py upgraded; please restart it': 'web2py upgraded; please restart it', } web2py-1.99.7.orig/applications/admin/languages/es-es.py0000644000175000017500000003552111724764235021605 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"actualice" es una expresión opcional como "campo1=\'nuevo_valor\'". No se puede actualizar o eliminar resultados de un JOIN', '%Y-%m-%d': '%Y-%m-%d', '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', '%s rows deleted': '%s filas eliminadas', '%s rows updated': '%s filas actualizadas', '(something like "it-it")': '(algo como "it-it")', 'A new version of web2py is available': 'Hay una nueva versión de web2py disponible', 'A new version of web2py is available: %s': 'Hay una nueva versión de web2py disponible: %s', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENCION: Inicio de sesión requiere una conexión segura (HTTPS) o localhost.', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATENCION: NO EJECUTE VARIAS PRUEBAS SIMULTANEAMENTE, NO SON THREAD SAFE.', 'ATTENTION: you cannot edit the running application!': 'ATENCION: no puede modificar la aplicación que se ejecuta!', 'About': 'Acerca de', 'About application': 'Acerca de la aplicación', 'Admin is disabled because insecure channel': 'Admin deshabilitado, el canal no es seguro', 'Admin is disabled because unsecure channel': 'Admin deshabilitado, el canal no es seguro', 'Administrator Password:': 'Contraseña del Administrador:', 'Are you sure you want to delete file "%s"?': '¿Está seguro que desea eliminar el archivo "%s"?', 'Are you sure you want to delete plugin "%s"?': '¿Está seguro que quiere eliminar el plugin "%s"?', 'Are you sure you want to uninstall application "%s"': '¿Está seguro que desea desinstalar la aplicación "%s"', 'Are you sure you want to uninstall application "%s"?': '¿Está seguro que desea desinstalar la aplicación "%s"?', 'Are you sure you want to upgrade web2py now?': '¿Está seguro que desea actualizar web2py ahora?', 'Available databases and tables': 'Bases de datos y tablas disponibles', 'Cannot be empty': 'No puede estar vacío', 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'No se puede compilar: hay errores en su aplicación. Depure, corrija errores y vuelva a intentarlo.', 'Cannot compile: there are errors in your app:': 'No se puede compilar: hay errores en su aplicación:', 'Change Password': 'Cambie Contraseña', 'Check to delete': 'Marque para eliminar', 'Checking for upgrades...': 'Buscando actulizaciones...', 'Click row to expand traceback': 'Click row to expand traceback', 'Client IP': 'IP del Cliente', 'Controllers': 'Controladores', 'Count': 'Count', 'Create new application using the Wizard': 'Create new application using the Wizard', 'Create new simple application': 'Cree una nueva aplicación', 'Current request': 'Solicitud en curso', 'Current response': 'Respuesta en curso', 'Current session': 'Sesión en curso', 'DESIGN': 'DISEÑO', 'Date and Time': 'Fecha y Hora', 'Delete': 'Elimine', 'Delete:': 'Elimine:', 'Deploy on Google App Engine': 'Instale en Google App Engine', 'Description': 'Descripción', 'Design for': 'Diseño para', 'E-mail': 'Correo electrónico', 'EDIT': 'EDITAR', 'Edit Profile': 'Editar Perfil', 'Edit application': 'Editar aplicación', 'Edit current record': 'Edite el registro actual', 'Editing Language file': 'Editando archivo de lenguaje', 'Editing file': 'Editando archivo', 'Editing file "%s"': 'Editando archivo "%s"', 'Enterprise Web Framework': 'Armazón Empresarial para Internet', 'Error': 'Error', 'Error logs for "%(app)s"': 'Bitácora de errores en "%(app)s"', 'Exception instance attributes': 'Atributos de la instancia de Excepción', 'File': 'File', 'First name': 'Nombre', 'Functions with no doctests will result in [passed] tests.': 'Funciones sin doctests equivalen a pruebas [aceptadas].', 'Group ID': 'ID de Grupo', 'Hello World': 'Hola Mundo', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Si el reporte anterior contiene un número de tiquete este indica un falla en la ejecución del controlador, antes de cualquier intento de ejecutat doctests. Esto generalmente se debe a un error en la indentación o un error por fuera del código de la función.\r\nUn titulo verde indica que todas las pruebas pasaron (si existen). En dicho caso los resultados no se muestran.', 'Import/Export': 'Importar/Exportar', 'Installed applications': 'Aplicaciones instaladas', 'Internal State': 'Estado Interno', 'Invalid Query': 'Consulta inválida', 'Invalid action': 'Acción inválida', 'Invalid email': 'Correo inválido', 'Language files (static strings) updated': 'Archivos de lenguaje (cadenas estáticas) actualizados', 'Languages': 'Lenguajes', 'Last name': 'Apellido', 'Last saved on:': 'Guardado en:', 'License for': 'Licencia para', 'Login': 'Inicio de sesión', 'Login to the Administrative Interface': 'Inicio de sesión para la Interfaz Administrativa', 'Logout': 'Fin de sesión', 'Lost Password': 'Contraseña perdida', 'Models': 'Modelos', 'Modules': 'Módulos', 'NO': 'NO', 'Name': 'Nombre', 'New Record': 'Registro nuevo', 'No databases in this application': 'No hay bases de datos en esta aplicación', 'Origin': 'Origen', 'Original/Translation': 'Original/Traducción', 'PAM authenticated user, cannot change password here': 'usuario autenticado por PAM, no puede cambiar la contraseña aquí', 'Password': 'Contraseña', 'Peeking at file': 'Visualizando archivo', 'Plugin "%s" in application': 'Plugin "%s" en aplicación', 'Plugins': 'Plugins', 'Powered by': 'Este sitio usa', 'Query:': 'Consulta:', 'Record ID': 'ID de Registro', 'Register': 'Registrese', 'Registration key': 'Contraseña de Registro', 'Resolve Conflict file': 'archivo Resolución de Conflicto', 'Role': 'Rol', 'Rows in table': 'Filas en la tabla', 'Rows selected': 'Filas seleccionadas', 'Saved file hash:': 'Hash del archivo guardado:', 'Static files': 'Archivos estáticos', 'Sure you want to delete this object?': '¿Está seguro que desea eliminar este objeto?', 'TM': 'MR', 'Table name': 'Nombre de la tabla', 'Testing application': 'Probando aplicación', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La "consulta" es una condición como "db.tabla1.campo1==\'valor\'". Algo como "db.tabla1.campo1==db.tabla2.campo2" resulta en un JOIN SQL.', 'There are no controllers': 'No hay controladores', 'There are no models': 'No hay modelos', 'There are no modules': 'No hay módulos', 'There are no static files': 'No hay archivos estáticos', 'There are no translators, only default language is supported': 'No hay traductores, sólo el lenguaje por defecto es soportado', 'There are no views': 'No hay vistas', 'This is the %(filename)s template': 'Esta es la plantilla %(filename)s', 'Ticket': 'Tiquete', 'Timestamp': 'Timestamp', 'To create a plugin, name a file/folder plugin_[name]': 'Para crear un plugin, nombre un archivo/carpeta plugin_[nombre]', 'Unable to check for upgrades': 'No es posible verificar la existencia de actualizaciones', 'Unable to download': 'No es posible la descarga', 'Unable to download app': 'No es posible descargar la aplicación', 'Unable to download app because:': 'No es posible descargar la aplicación porque:', 'Unable to download because': 'No es posible descargar porque', 'Update:': 'Actualice:', 'Upload & install packed application': 'Suba e instale aplicación empaquetada', 'Upload existing application': 'Suba esta aplicación', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) para AND, (...)|(...) para OR, y ~(...) para NOT, para crear consultas más complejas.', 'User ID': 'ID de Usuario', 'Version': 'Versión', 'Views': 'Vistas', 'Welcome to web2py': 'Bienvenido a web2py', 'YES': 'SI', 'About': 'acerca de', 'additional code for your application': 'código adicional para su aplicación', 'admin disabled because no admin password': ' por falta de contraseña', 'admin disabled because not supported on google app engine': 'admin deshabilitado, no es soportado en GAE', 'admin disabled because unable to access password file': 'admin deshabilitado, imposible acceder al archivo con la contraseña', 'and rename it (required):': 'y renombrela (requerido):', 'and rename it:': ' y renombrelo:', 'appadmin': 'appadmin', 'appadmin is disabled because insecure channel': 'admin deshabilitado, el canal no es seguro', 'application "%s" uninstalled': 'aplicación "%s" desinstalada', 'application compiled': 'aplicación compilada', 'application is compiled and cannot be designed': 'la aplicación está compilada y no puede ser modificada', 'arguments': 'argumentos', 'back': 'atrás', 'browse': 'buscar', 'cache': 'cache', 'cache, errors and sessions cleaned': 'cache, errores y sesiones eliminados', 'cannot create file': 'no es posible crear archivo', 'cannot upload file "%(filename)s"': 'no es posible subir archivo "%(filename)s"', 'Change admin password': 'cambie contraseña admin', 'check all': 'marcar todos', 'Clean': 'limpiar', 'click here for online examples': 'haga clic aquí para ver ejemplos en línea', 'click here for the administrative interface': 'haga clic aquí para usar la interfaz administrativa', 'click to check for upgrades': 'haga clic para buscar actualizaciones', 'click to open': 'click to open', 'code': 'código', 'commit (mercurial)': 'commit (mercurial)', 'Compile': 'compilar', 'compiled application removed': 'aplicación compilada removida', 'controllers': 'controladores', 'Create': 'crear', 'create file with filename:': 'cree archivo con nombre:', 'create new application:': 'nombre de la nueva aplicación:', 'created by': 'creado por', 'crontab': 'crontab', 'currently saved or': 'actualmente guardado o', 'customize me!': 'Adaptame!', 'data uploaded': 'datos subidos', 'database': 'base de datos', 'database %s select': 'selección en base de datos %s', 'database administration': 'administración base de datos', 'db': 'db', 'defines tables': 'define tablas', 'delete': 'eliminar', 'delete all checked': 'eliminar marcados', 'delete plugin': 'eliminar plugin', 'design': 'modificar', 'direction: ltr': 'direction: ltr', 'done!': 'listo!', 'Edit': 'editar', 'edit controller': 'editar controlador', 'edit views:': 'editar vistas:', 'Errors': 'errores', 'export as csv file': 'exportar como archivo CSV', 'exposes': 'expone', 'extends': 'extiende', 'failed to reload module': 'recarga del módulo ha fallado', 'failed to reload module because:': 'no es posible recargar el módulo por:', 'file "%(filename)s" created': 'archivo "%(filename)s" creado', 'file "%(filename)s" deleted': 'archivo "%(filename)s" eliminado', 'file "%(filename)s" uploaded': 'archivo "%(filename)s" subido', 'file "%(filename)s" was not deleted': 'archivo "%(filename)s" no fué eliminado', 'file "%s" of %s restored': 'archivo "%s" de %s restaurado', 'file changed on disk': 'archivo modificado en el disco', 'file does not exist': 'archivo no existe', 'file saved on %(time)s': 'archivo guardado %(time)s', 'file saved on %s': 'archivo guardado %s', 'Help': 'ayuda', 'htmledit': 'htmledit', 'includes': 'incluye', 'insert new': 'inserte nuevo', 'insert new %s': 'inserte nuevo %s', 'Install': 'instalar', 'internal error': 'error interno', 'invalid password': 'contraseña inválida', 'invalid request': 'solicitud inválida', 'invalid ticket': 'tiquete inválido', 'language file "%(filename)s" created/updated': 'archivo de lenguaje "%(filename)s" creado/actualizado', 'languages': 'lenguajes', 'languages updated': 'lenguajes actualizados', 'loading...': 'cargando...', 'login': 'inicio de sesión', 'Logout': 'fin de sesión', 'manage': 'manage', 'merge': 'combinar', 'models': 'modelos', 'modules': 'módulos', 'new application "%s" created': 'nueva aplicación "%s" creada', 'new plugin installed': 'nuevo plugin instalado', 'new record inserted': 'nuevo registro insertado', 'next 100 rows': '100 filas siguientes', 'no match': 'no encontrado', 'or import from csv file': 'o importar desde archivo CSV', 'or provide app url:': 'o provea URL de la aplicación:', 'or provide application url:': 'o provea URL de la aplicación:', 'Overwrite installed app': 'sobreescriba aplicación instalada', 'Pack all': 'empaquetar todo', 'Pack compiled': 'empaquete compiladas', 'pack plugin': 'empaquetar plugin', 'password changed': 'contraseña cambiada', 'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" eliminado', 'previous 100 rows': '100 filas anteriores', 'record': 'registro', 'record does not exist': 'el registro no existe', 'record id': 'id de registro', 'Remove compiled': 'eliminar compiladas', 'restore': 'restaurar', 'revert': 'revertir', 'save': 'guardar', 'selected': 'seleccionado(s)', 'session expired': 'sesión expirada', 'shell': 'shell', 'Site': 'sitio', 'some files could not be removed': 'algunos archivos no pudieron ser removidos', 'state': 'estado', 'static': 'estáticos', 'submit': 'enviar', 'table': 'tabla', 'test': 'probar', 'the application logic, each URL path is mapped in one exposed function in the controller': 'la lógica de la aplicación, cada ruta URL se mapea en una función expuesta en el controlador', 'the data representation, define database tables and sets': 'la representación de datos, define tablas y conjuntos de base de datos', 'the presentations layer, views are also known as templates': 'la capa de presentación, las vistas también son llamadas plantillas', 'these files are served without processing, your images go here': 'estos archivos son servidos sin procesar, sus imágenes van aquí', 'to previous version.': 'a la versión previa.', 'translation strings for the application': 'cadenas de caracteres de traducción para la aplicación', 'try': 'intente', 'try something like': 'intente algo como', 'unable to create application "%s"': 'no es posible crear la aplicación "%s"', 'unable to delete file "%(filename)s"': 'no es posible eliminar el archivo "%(filename)s"', 'unable to delete file plugin "%(plugin)s"': 'no es posible eliminar plugin "%(plugin)s"', 'unable to parse csv file': 'no es posible analizar el archivo CSV', 'unable to uninstall "%s"': 'no es posible instalar "%s"', 'unable to upgrade because "%s"': 'no es posible actualizar porque "%s"', 'uncheck all': 'desmarcar todos', 'Uninstall': 'desinstalar', 'update': 'actualizar', 'update all languages': 'actualizar todos los lenguajes', 'upgrade web2py now': 'actualize web2py ahora', 'upload application:': 'subir aplicación:', 'upload file:': 'suba archivo:', 'upload plugin file:': 'suba archivo de plugin:', 'variables': 'variables', 'versioning': 'versiones', 'view': 'vista', 'views': 'vistas', 'web2py Recent Tweets': 'Tweets Recientes de web2py', 'web2py is up to date': 'web2py está actualizado', 'web2py upgraded; please restart it': 'web2py actualizado; favor reiniciar', } web2py-1.99.7.orig/applications/admin/languages/zh-cn.py0000644000175000017500000003250411724764235021606 0ustar josejose# coding: utf8 { '"browse"': '游览', '"save"': '"保存"', '"submit"': '"提交"', '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"更新"是可配置项 如 "field1=\'newvalue\'",你无法在JOIN 中更新或删除', '%Y-%m-%d': '%Y-%m-%d', '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', '%s rows deleted': '%s 行已删', '%s rows updated': '%s 行更新', '(requires internet access)': '(requires internet access)', '(something like "it-it")': '(就酱 "it-it")', 'A new version of web2py is available': '新版本web2py已经可用', 'A new version of web2py is available: %s': '新版本web2py已经可用: %s', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': '', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': '', 'ATTENTION: you cannot edit the running application!': '注意: 不能修改正在运行中的应用!', 'About': '关于', 'About application': '关于这个应用', 'Admin is disabled because insecure channel': '管理因不安全通道而关闭', 'Admin is disabled because unsecure channel': '管理因不稳定通道而关闭', 'Admin language': 'Admin language', 'Administrator Password:': '管理员密码:', 'Application name:': 'Application name:', 'Are you sure you want to delete file "%s"?': '你真想删除文件"%s"?', 'Are you sure you want to delete plugin "%s"?': 'Are you sure you want to delete plugin "%s"?', 'Are you sure you want to uninstall application "%s"': '你真确定要卸载应用 "%s"', 'Are you sure you want to uninstall application "%s"?': '你真确定要卸载应用 "%s" ?', 'Are you sure you want to upgrade web2py now?': 'Are you sure you want to upgrade web2py now?', 'Available databases and tables': '可用数据库/表', 'Cannot be empty': '不能不填', 'Cannot compile: there are errors in your app.        Debug it, correct errors and try again.': '无法编译: 应用中有错误,请修订后再试.', 'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:', 'Change Password': '修改密码', 'Check to delete': '检验删除', 'Checking for upgrades...': '是否有升级版本检查ing...', 'Client IP': '客户端IP', 'Controllers': '控制器s', 'Create new simple application': '创建一个新应用', 'Current request': '当前请求', 'Current response': '当前返回', 'Current session': '当前会话', 'DESIGN': '设计', 'Date and Time': '时间日期', 'Delete': '删除', 'Delete:': '删除:', 'Deploy on Google App Engine': '部署到GAE', 'Description': '描述', 'Design for': '设计:', 'E-mail': '邮箱:', 'EDIT': '编辑', 'Edit Profile': '修订配置', 'Edit application': '修订应用', 'Edit current record': '修订当前记录', 'Editing Language file': '修订语言文件', 'Editing file': '修订文件', 'Editing file "%s"': '修订文件 %s', 'Enterprise Web Framework': '强悍的网络开发框架', 'Error logs for "%(app)s"': '"%(app)s" 的错误日志', 'Exception instance attributes': 'Exception instance attributes', 'First name': '姓', 'Functions with no doctests will result in [passed] tests.': '', 'Group ID': '组ID', 'Hello World': '道可道,非常道;名可名,非常名', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.', 'Import/Export': '导入/导出', 'Installed applications': '已安装的应用', 'Internal State': '内部状态', 'Invalid Query': '无效查询', 'Invalid action': '无效动作', 'Invalid email': '无效的email', 'Language files (static strings) updated': '语言文件(静态部分)已更新', 'Languages': '语言', 'Last name': '名', 'Last saved on:': '最后保存于:', 'License for': '许可证', 'Login': '登录', 'Login to the Administrative Interface': '登录到管理员界面', 'Logout': '注销', 'Lost Password': '忘记密码', 'Models': '模型s', 'Modules': '模块s', 'NO': '不', 'Name': '姓名', 'New Record': '新记录', 'New application wizard': 'New application wizard', 'New simple application': 'New simple application', 'No databases in this application': '这应用没有数据库', 'Origin': '起源', 'Original/Translation': '原始文件/翻译文件', 'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here', 'Password': '密码', 'Peeking at file': '选个文件', 'Plugin "%s" in application': 'Plugin "%s" in application', 'Plugins': 'Plugins', 'Powered by': '', 'Query:': '查询', 'Record ID': '记录ID', 'Register': '注册', 'Registration key': '注册密匙', 'Resolve Conflict file': '解决冲突文件', 'Role': '角色', 'Rows in table': '表行', 'Rows selected': '行选择', 'Saved file hash:': '已存文件Hash:', 'Static files': '静态文件', 'Sure you want to delete this object?': '真的要删除这个对象?', 'TM': '', 'Table name': '表名', 'Testing application': '应用测试', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '', 'There are no controllers': '冇控制器', 'There are no models': '冇模型s', 'There are no modules': '冇模块s', 'There are no static files': '冇静态文件', 'There are no translators, only default language is supported': '没有找到相应翻译,只能使用默认语言', 'There are no views': '冇视图', 'This is the %(filename)s template': '这是 %(filename)s 模板', 'Ticket': '传票', 'Timestamp': '时间戳', 'To create a plugin, name a file/folder plugin_[name]': 'To create a plugin, name a file/folder plugin_[name]', 'Unable to check for upgrades': '无法检查是否需要升级', 'Unable to download': '无法下载', 'Unable to download app': '无法下载应用', 'Unable to download app because:': 'Unable to download app because:', 'Unable to download because': 'Unable to download because', 'Update:': '更新:', 'Upload & install packed application': 'Upload & install packed application', 'Upload a package:': 'Upload a package:', 'Upload existing application': '上传已有应用', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': '', 'Use an url:': 'Use an url:', 'User ID': '用户ID', 'Version': '版本', 'Views': '视图', 'Welcome to web2py': '欢迎使用web2py', 'YES': '是', 'About': '关于', 'additional code for your application': '给你的应用附加代码', 'admin disabled because no admin password': '管理员需要设定密码,否则无法管理', 'admin disabled because not supported on google app engine': '未支持GAE,无法管理', 'admin disabled because unable to access password file': '需要可以操作密码文件,否则无法进行管理', 'administrative interface': 'administrative interface', 'and rename it (required):': '重命名为 (必须):', 'and rename it:': ' 重命名为:', 'appadmin': '应用管理', 'appadmin is disabled because insecure channel': '应用管理因非法通道失效', 'application "%s" uninstalled': '应用"%s" 已被卸载', 'application compiled': '应用已编译完', 'application is compiled and cannot be designed': '应用已编译完无法设计', 'arguments': 'arguments', 'back': 'back', 'cache': 'cache', 'cache, errors and sessions cleaned': '缓存、错误、sesiones已被清空', 'cannot create file': '无法创建文件', 'cannot upload file "%(filename)s"': '无法上传文件 "%(filename)s"', 'Change admin password': 'change admin password', 'check all': '检查所有', 'Check for upgrades': 'check for upgrades', 'Clean': '清除', 'click here for online examples': '猛击此处,查看在线实例', 'click here for the administrative interface': '猛击此处,进入管理界面', 'click to check for upgrades': '猛击查看是否有升级版本', 'code': 'code', 'Compile': '编译', 'compiled application removed': '已编译应用已移走', 'controllers': '控制器', 'Create': 'create', 'create file with filename:': '创建文件用这名:', 'create new application:': '创建新应用:', 'created by': '创建自', 'crontab': '定期事务', 'currently running': 'currently running', 'currently saved or': '保存当前的或', 'customize me!': '定制俺!', 'data uploaded': '数据已上传', 'database': '数据库', 'database %s select': '数据库 %s 选择', 'database administration': '数据库管理', 'db': '', 'defines tables': '已定义表', 'delete': '删除', 'delete all checked': '删除所有选择的', 'delete plugin': 'delete plugin', 'Deploy': 'deploy', 'design': '设计', 'direction: ltr': 'direction: ltr', 'done!': '搞定!', 'Edit': '修改', 'edit controller': '修订控制器', 'edit views:': 'edit views:', 'Errors': '错误', 'export as csv file': '导出为CSV文件', 'exposes': '暴露', 'extends': '扩展', 'failed to reload module': '重新加载模块失败', 'failed to reload module because:': 'failed to reload module because:', 'file "%(filename)s" created': '文件 "%(filename)s" 已创建', 'file "%(filename)s" deleted': '文件 "%(filename)s" 已删除', 'file "%(filename)s" uploaded': '文件 "%(filename)s" 已上传', 'file "%(filename)s" was not deleted': '文件 "%(filename)s" 没删除', 'file "%s" of %s restored': '文件"%s" 有关 %s 已重存', 'file changed on disk': '硬盘上的文件已经修改', 'file does not exist': '文件并不存在', 'file saved on %(time)s': '文件保存于 %(time)s', 'file saved on %s': '文件保存在 %s', 'Help': '帮助', 'htmledit': 'html编辑', 'includes': '包含', 'insert new': '新插入', 'insert new %s': '新插入 %s', 'Install': 'install', 'internal error': '内部错误', 'invalid password': '无效密码', 'invalid request': '无效请求', 'invalid ticket': '无效传票', 'language file "%(filename)s" created/updated': '语言文件 "%(filename)s"被创建/更新', 'languages': '语言', 'languages updated': '语言已被刷新', 'loading...': '载入中...', 'login': '登录', 'Logout': '注销', 'merge': '合并', 'models': '模型s', 'modules': '模块s', 'new application "%s" created': '新应用 "%s"已被创建', 'new plugin installed': 'new plugin installed', 'new record inserted': '新记录被插入', 'next 100 rows': '后100行', 'no match': 'no match', 'or import from csv file': '或者,从csv文件导入', 'or provide app url:': 'or provide app url:', 'or provide application url:': '或者,提供应用所在地址链接:', 'Overwrite installed app': 'overwrite installed app', 'Pack all': '全部打包', 'Pack compiled': '包编译完', 'pack plugin': 'pack plugin', 'password changed': 'password changed', 'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" deleted', 'previous 100 rows': '前100行', 'record': 'record', 'record does not exist': '记录并不存在', 'record id': '记录ID', 'Remove compiled': '已移除', 'restore': '重存', 'revert': '恢复', 'save': '保存', 'selected': '已选', 'session expired': '会话过期', 'shell': '', 'Site': '总站', 'some files could not be removed': '有些文件无法被移除', 'Start wizard': 'start wizard', 'state': '状态', 'static': '静态文件', 'submit': '提交', 'table': '表', 'test': '测试', 'the application logic, each URL path is mapped in one exposed function in the controller': '应用逻辑:每个URL由控制器暴露的函式完成映射', 'the data representation, define database tables and sets': '数据表达式,定义数据库/表', 'the presentations layer, views are also known as templates': '提交层/视图都在模板中可知', 'these files are served without processing, your images go here': '', 'to previous version.': 'to previous version.', 'to  previous version.': '退回前一版本', 'translation strings for the application': '应用的翻译字串', 'try': '尝试', 'try something like': '尝试', 'unable to create application "%s"': '无法创建应用 "%s"', 'unable to delete file "%(filename)s"': '无法删除文件 "%(filename)s"', 'unable to delete file plugin "%(plugin)s"': 'unable to delete file plugin "%(plugin)s"', 'unable to parse csv file': '无法生成 cvs', 'unable to uninstall "%s"': '无法卸载 "%s"', 'unable to upgrade because "%s"': 'unable to upgrade because "%s"', 'uncheck all': '反选全部', 'Uninstall': '卸载', 'update': '更新', 'update all languages': '更新所有语言', 'upgrade web2py now': 'upgrade web2py now', 'upload application:': '提交已有的应用:', 'upload file:': '提交文件:', 'upload plugin file:': 'upload plugin file:', 'variables': 'variables', 'versioning': '版本', 'view': '视图', 'views': '视图s', 'web2py Recent Tweets': 'twitter上的web2py进展实播', 'web2py is up to date': 'web2py现在已经是最新的版本了', 'web2py upgraded; please restart it': 'web2py upgraded; please restart it', } web2py-1.99.7.orig/applications/admin/languages/it.py0000644000175000017500000003434011724764235021203 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" è un\'espressione opzionale come "campo1=\'nuovo valore\'". Non si può fare "update" o "delete" dei risultati di un JOIN ', '%Y-%m-%d': '%d/%m/%Y', '%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S', '%s rows deleted': '%s righe ("record") cancellate', '%s rows updated': '%s righe ("record") modificate', '(requires internet access)': '(requires internet access)', '(something like "it-it")': '(qualcosa simile a "it-it")', 'A new version of web2py is available: %s': 'È disponibile una nuova versione di web2py: %s', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': "ATTENZIONE: L'accesso richiede una connessione sicura (HTTPS) o l'esecuzione di web2py in locale (connessione su localhost)", 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTZIONE: NON ESEGUIRE PIÙ TEST IN PARALLELO (I TEST NON SONO "THREAD SAFE")', 'ATTENTION: you cannot edit the running application!': "ATTENZIONE: non puoi modificare l'applicazione correntemente in uso ", 'About': 'Informazioni', 'About application': "Informazioni sull'applicazione", 'Admin is disabled because insecure channel': 'amministrazione disabilitata: comunicazione non sicura', 'Admin language': 'Admin language', 'Administrator Password:': 'Password Amministratore:', 'Application name:': 'Application name:', 'Are you sure you want to delete file "%s"?': 'Confermi di voler cancellare il file "%s"?', 'Are you sure you want to delete plugin "%s"?': 'Confermi di voler cancellare il plugin "%s"?', 'Are you sure you want to uninstall application "%s"?': 'Confermi di voler disinstallare l\'applicazione "%s"?', 'Are you sure you want to upgrade web2py now?': 'Confermi di voler aggiornare web2py ora?', 'Available databases and tables': 'Database e tabelle disponibili', 'Cannot be empty': 'Non può essere vuoto', 'Cannot compile: there are errors in your app:': "Compilazione fallita: ci sono errori nell'applicazione.", 'Check to delete': 'Seleziona per cancellare', 'Checking for upgrades...': 'Controllo aggiornamenti in corso...', 'Controller': 'Controller', 'Controllers': 'Controllers', 'Copyright': 'Copyright', 'Create new simple application': 'Crea nuova applicazione', 'Current request': 'Richiesta (request) corrente', 'Current response': 'Risposta (response) corrente', 'Current session': 'Sessione (session) corrente', 'DB Model': 'Modello di DB', 'Database': 'Database', 'Date and Time': 'Data and Ora', 'Delete': 'Cancella', 'Delete:': 'Cancella:', 'Deploy on Google App Engine': 'Installa su Google App Engine', 'EDIT': 'MODIFICA', 'Edit': 'Modifica', 'Edit This App': 'Modifica questa applicazione', 'Edit application': 'Modifica applicazione', 'Edit current record': 'Modifica record corrente', 'Editing Language file': 'Modifica file linguaggio', 'Editing file "%s"': 'Modifica del file "%s"', 'Enterprise Web Framework': 'Enterprise Web Framework', 'Error logs for "%(app)s"': 'Log degli errori per "%(app)s"', 'Exception instance attributes': 'Exception instance attributes', 'Functions with no doctests will result in [passed] tests.': 'I test delle funzioni senza "doctests" risulteranno sempre [passed].', 'Hello World': 'Salve Mondo', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.', 'Import/Export': 'Importa/Esporta', 'Index': 'Indice', 'Installed applications': 'Applicazioni installate', 'Internal State': 'Stato interno', 'Invalid Query': 'Richiesta (query) non valida', 'Invalid action': 'Azione non valida', 'Language files (static strings) updated': 'Linguaggi (documenti con stringhe statiche) aggiornati', 'Languages': 'Linguaggi', 'Last saved on:': 'Ultimo salvataggio:', 'Layout': 'Layout', 'License for': 'Licenza relativa a', 'Login': 'Accesso', 'Login to the Administrative Interface': "Accesso all'interfaccia amministrativa", 'Main Menu': 'Menu principale', 'Menu Model': 'Menu Modelli', 'Models': 'Modelli', 'Modules': 'Moduli', 'NO': 'NO', 'New Record': 'Nuovo elemento (record)', 'New application wizard': 'New application wizard', 'New simple application': 'New simple application', 'No databases in this application': 'Nessun database presente in questa applicazione', 'Original/Translation': 'Originale/Traduzione', 'PAM authenticated user, cannot change password here': 'utente autenticato tramite PAM, impossibile modificare password qui', 'Peeking at file': 'Uno sguardo al file', 'Plugin "%s" in application': 'Plugin "%s" nell\'applicazione', 'Plugins': 'I Plugins', 'Powered by': 'Powered by', 'Query:': 'Richiesta (query):', 'Resolve Conflict file': 'File di risoluzione conflitto', 'Rows in table': 'Righe nella tabella', 'Rows selected': 'Righe selezionate', 'Saved file hash:': 'Hash del file salvato:', 'Static files': 'Files statici', 'Stylesheet': 'Foglio di stile (stylesheet)', 'Sure you want to delete this object?': 'Vuoi veramente cancellare questo oggetto?', 'TM': 'TM', 'Testing application': 'Test applicazione in corsg', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La richiesta (query) è una condizione come ad esempio "db.tabella1.campo1==\'valore\'". Una condizione come "db.tabella1.campo1==db.tabella2.campo2" produce un "JOIN" SQL.', 'There are no controllers': 'Non ci sono controller', 'There are no models': 'Non ci sono modelli', 'There are no modules': 'Non ci sono moduli', 'There are no static files': 'Non ci sono file statici', 'There are no translators, only default language is supported': 'Non ci sono traduzioni, viene solo supportato il linguaggio di base', 'There are no views': 'Non ci sono viste ("view")', 'This is the %(filename)s template': 'Questo è il template %(filename)s', 'Ticket': 'Ticket', 'To create a plugin, name a file/folder plugin_[name]': 'Per creare un plugin, chiamare un file o cartella plugin_[nome]', 'Unable to check for upgrades': 'Impossibile controllare presenza di aggiornamenti', 'Unable to download app because:': 'Impossibile scaricare applicazione perché', 'Unable to download because': 'Impossibile scaricare perché', 'Unable to download because:': 'Unable to download because:', 'Update:': 'Aggiorna:', 'Upload & install packed application': 'Carica ed installa pacchetto con applicazione', 'Upload a package:': 'Upload a package:', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Per costruire richieste (query) più complesse si usano (...)&(...) come "e" (AND), (...)|(...) come "o" (OR), e ~(...) come negazione (NOT).', 'Use an url:': 'Use an url:', 'Version': 'Versione', 'View': 'Vista', 'Views': 'viste', 'Welcome %s': 'Benvenuto %s', 'Welcome to web2py': 'Benvenuto su web2py', 'YES': 'SI', 'About': 'informazioni', 'additional code for your application': 'righe di codice aggiuntive per la tua applicazione', 'admin disabled because no admin password': 'amministrazione disabilitata per mancanza di password amministrativa', 'admin disabled because not supported on google app engine': 'amministrazione non supportata da Google Apps Engine', 'admin disabled because unable to access password file': 'amministrazione disabilitata per impossibilità di leggere il file delle password', 'administrative interface': 'administrative interface', 'and rename it (required):': 'e rinominala (obbligatorio):', 'and rename it:': 'e rinominala:', 'appadmin': 'appadmin ', 'appadmin is disabled because insecure channel': 'amministrazione app (appadmin) disabilitata: comunicazione non sicura', 'application "%s" uninstalled': 'applicazione "%s" disinstallata', 'application compiled': 'applicazione compilata', 'application is compiled and cannot be designed': "l'applicazione è compilata e non si può modificare", 'arguments': 'arguments', 'back': 'indietro', 'cache': 'cache', 'cache, errors and sessions cleaned': 'pulitura cache, errori and sessioni ', 'cannot create file': 'impossibile creare il file', 'cannot upload file "%(filename)s"': 'impossibile caricare il file "%(filename)s"', 'Change admin password': 'change admin password', 'change password': 'cambia password', 'check all': 'controlla tutto', 'Check for upgrades': 'check for upgrades', 'Clean': 'pulisci', 'click here for online examples': 'clicca per vedere gli esempi', 'click here for the administrative interface': "clicca per l'interfaccia amministrativa", 'click to check for upgrades': 'clicca per controllare presenza di aggiornamenti', 'code': 'code', 'Compile': 'compila', 'compiled application removed': "rimosso il codice compilato dell'applicazione", 'controllers': 'controllers', 'Create': 'crea', 'create file with filename:': 'crea un file col nome:', 'create new application:': 'create new application:', 'created by': 'creato da', 'crontab': 'crontab', 'currently running': 'currently running', 'currently saved or': 'attualmente salvato o', 'customize me!': 'Personalizzami!', 'data uploaded': 'dati caricati', 'database': 'database', 'database %s select': 'database %s select', 'database administration': 'amministrazione database', 'db': 'db', 'defines tables': 'defininisce le tabelle', 'delete': 'Cancella', 'delete all checked': 'cancella tutti i selezionati', 'delete plugin': 'cancella plugin', 'Deploy': 'deploy', 'design': 'progetta', 'direction: ltr': 'direction: ltr', 'done!': 'fatto!', 'Edit': 'modifica', 'edit controller': 'modifica controller', 'edit profile': 'modifica profilo', 'edit views:': 'modifica viste (view):', 'Errors': 'errori', 'export as csv file': 'esporta come file CSV', 'exposes': 'espone', 'extends': 'estende', 'failed to reload module because:': 'ricaricamento modulo fallito perché:', 'file "%(filename)s" created': 'creato il file "%(filename)s"', 'file "%(filename)s" deleted': 'cancellato il file "%(filename)s"', 'file "%(filename)s" uploaded': 'caricato il file "%(filename)s"', 'file "%s" of %s restored': 'ripristinato "%(filename)s"', 'file changed on disk': 'il file ha subito una modifica su disco', 'file does not exist': 'file inesistente', 'file saved on %(time)s': "file salvato nell'istante %(time)s", 'file saved on %s': 'file salvato: %s', 'Help': 'aiuto', 'htmledit': 'modifica come html', 'includes': 'include', 'insert new': 'inserisci nuovo', 'insert new %s': 'inserisci nuovo %s', 'Install': 'installa', 'internal error': 'errore interno', 'invalid password': 'password non valida', 'invalid request': 'richiesta non valida', 'invalid ticket': 'ticket non valido', 'language file "%(filename)s" created/updated': 'file linguaggio "%(filename)s" creato/aggiornato', 'languages': 'linguaggi', 'loading...': 'caricamento...', 'login': 'accesso', 'Logout': 'uscita', 'merge': 'unisci', 'models': 'modelli', 'modules': 'moduli', 'new application "%s" created': 'creata la nuova applicazione "%s"', 'new plugin installed': 'installato nuovo plugin', 'new record inserted': 'nuovo record inserito', 'next 100 rows': 'prossime 100 righe', 'no match': 'nessuna corrispondenza', 'or import from csv file': 'oppure importa da file CSV', 'or provide app url:': "oppure fornisci url dell'applicazione:", 'Overwrite installed app': 'sovrascrivi applicazione installata', 'Pack all': 'crea pacchetto', 'Pack compiled': 'crea pacchetto del codice compilato', 'pack plugin': 'crea pacchetto del plugin', 'password changed': 'password modificata', 'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" cancellato', 'previous 100 rows': '100 righe precedenti', 'record': 'record', 'record does not exist': 'il record non esiste', 'record id': 'ID del record', 'register': 'registrazione', 'Remove compiled': 'rimozione codice compilato', 'restore': 'ripristino', 'revert': 'versione precedente', 'selected': 'selezionato', 'session expired': 'sessions scaduta', 'shell': 'shell', 'Site': 'sito', 'some files could not be removed': 'non è stato possibile rimuovere alcuni files', 'Start wizard': 'start wizard', 'state': 'stato', 'static': 'statico', 'submit': 'invia', 'table': 'tabella', 'test': 'test', 'the application logic, each URL path is mapped in one exposed function in the controller': 'logica dell\'applicazione, ogni percorso "URL" corrisponde ad una funzione esposta da un controller', 'the data representation, define database tables and sets': 'rappresentazione dei dati, definizione di tabelle di database e di "set" ', 'the presentations layer, views are also known as templates': 'Presentazione dell\'applicazione, viste (views, chiamate anche "templates")', 'these files are served without processing, your images go here': 'questi files vengono serviti così come sono, le immagini vanno qui', 'to previous version.': 'torna a versione precedente', 'translation strings for the application': "stringhe di traduzioni per l'applicazione", 'try': 'prova', 'try something like': 'prova qualcosa come', 'unable to create application "%s"': 'impossibile creare applicazione "%s"', 'unable to delete file "%(filename)s"': 'impossibile rimuovere file "%(plugin)s"', 'unable to delete file plugin "%(plugin)s"': 'impossibile rimuovere file di plugin "%(plugin)s"', 'unable to parse csv file': 'non riesco a decodificare questo file CSV', 'unable to uninstall "%s"': 'impossibile disinstallare "%s"', 'unable to upgrade because "%s"': 'impossibile aggiornare perché "%s"', 'uncheck all': 'smarca tutti', 'Uninstall': 'disinstalla', 'update': 'aggiorna', 'update all languages': 'aggiorna tutti i linguaggi', 'upgrade web2py now': 'upgrade web2py now', 'upload application:': 'carica applicazione:', 'upload file:': 'carica file:', 'upload plugin file:': 'carica file di plugin:', 'variables': 'variables', 'versioning': 'sistema di versioni', 'view': 'vista', 'views': 'viste', 'web2py Recent Tweets': 'Tweets recenti per web2py', 'web2py is up to date': 'web2py è aggiornato', 'web2py upgraded; please restart it': 'web2py aggiornato; prego riavviarlo', } web2py-1.99.7.orig/applications/admin/languages/af.py0000644000175000017500000000647611724764235021166 0ustar josejose# coding: utf8 { '%Y-%m-%d': '%Y-%m-%d', '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', '(requires internet access)': '(vereis internet toegang)', '(something like "it-it")': '(iets soos "it-it")', 'About': 'Oor', 'About application': 'Oor program', 'Additional code for your application': 'Additionele kode vir u application', 'Admin language': 'Admin taal', 'Application name:': 'Program naam:', 'Controllers': 'Beheerders', 'Deploy on Google App Engine': 'Stuur na Google App Engine toe', 'Edit application': 'Wysig program', 'Installed applications': 'Geinstalleerde apps', 'Languages': 'Tale', 'License for': 'Lisensie vir', 'Models': 'Modelle', 'Modules': 'Modules', 'New application wizard': 'Nuwe app wizard', 'New simple application': 'Nuwe eenvoudige app', 'Plugins': 'Plugins', 'Powered by': 'Aangedryf deur', 'Searching:': 'Soek:', 'Static files': 'Static files', 'Sure you want to delete this object?': 'Is jy seker jy will hierde object verwyder?', 'The application logic, each URL path is mapped in one exposed function in the controller': 'The application logic, each URL path is mapped in one exposed function in the controller', 'The data representation, define database tables and sets': 'The data representation, define database tables and sets', 'The presentations layer, views are also known as templates': 'The presentations layer, views are also known as templates', 'There are no plugins': 'Daar is geen plugins', 'These files are served without processing, your images go here': 'Hierdie lêre is sonder veranderinge geserved, jou images gaan hier', 'To create a plugin, name a file/folder plugin_[name]': 'Om ''n plugin te skep, noem ''n lêer/gids plugin_[name]', 'Translation strings for the application': 'Vertaling woorde vir die program', 'Upload & install packed application': 'Oplaai & install gepakte program', 'Upload a package:': 'Oplaai ''n package:', 'Use an url:': 'Gebruik n url:', 'Views': 'Views', 'About': 'oor', 'administrative interface': 'administrative interface', 'and rename it:': 'en verander die naam:', 'Change admin password': 'verander admin wagwoord', 'Check for upgrades': 'soek vir upgrades', 'Clean': 'maak skoon', 'collapse/expand all': 'collapse/expand all', 'Compile': 'kompileer', 'controllers': 'beheerders', 'Create': 'skep', 'create file with filename:': 'skep lêer met naam:', 'created by': 'geskep deur', 'crontab': 'crontab', 'currently running': 'loop tans', 'database administration': 'database administration', 'Deploy': 'deploy', 'direction: ltr': 'direction: ltr', 'download layouts': 'aflaai layouts', 'download plugins': 'aflaai plugins', 'Edit': 'wysig', 'Errors': 'foute', 'exposes': 'exposes', 'extends': 'extends', 'files': 'lêre', 'filter': 'filter', 'Help': 'hulp', 'includes': 'includes', 'Install': 'installeer', 'languages': 'tale', 'loading...': 'laai...', 'Logout': 'logout', 'models': 'modelle', 'modules': 'modules', 'Overwrite installed app': 'skryf oor geinstalleerde program', 'Pack all': 'pack alles', 'plugins': 'plugins', 'shell': 'shell', 'Site': 'site', 'Start wizard': 'start wizard', 'static': 'static', 'test': 'toets', 'Uninstall': 'verwyder', 'update all languages': 'update all languages', 'upload': 'oplaai', 'upload file:': 'oplaai lêer:', 'upload plugin file:': 'upload plugin lêer:', 'versioning': 'versioning', 'views': 'views', 'web2py Recent Tweets': 'web2py Onlangse Tweets', } web2py-1.99.7.orig/applications/admin/languages/ru-ru.py0000644000175000017500000005534511724764235021651 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Update" ist ein optionaler Ausdruck wie "Feld1 = \'newvalue". JOIN Ergebnisse können nicht aktualisiert oder gelöscht werden', '%Y-%m-%d': '%Y-%m-%d', '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', '%s rows deleted': '%s строк удалено', '%s rows updated': '%s строк обновлено', '(requires internet access)': '(требует подключения к интернету)', '(something like "it-it")': '(наподобие "it-it")', 'A new version of web2py is available': 'Доступна новая версия web2py', 'A new version of web2py is available: %s': 'Доступна новая версия web2py: %s', 'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\n': 'Доступна новая версия web2py: Версия 1.85.3 (2010-09-18 07:07:46)\n', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ВНИМАНИЕ: Для входа требуется бесопасное (HTTPS) соединение либо запуск на localhost.', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ВНИМАНИЕ: Тестирование не потокобезопасно, поэтому не запускайте несколько тестов параллельно.', 'ATTENTION: This is an experimental feature and it needs more testing.': 'ВНИМАНИЕ: Это экспериментальная возможность и требует тестирования.', 'ATTENTION: you cannot edit the running application!': 'ВНИМАНИЕ: Вы не можете редактировать работающее приложение!', 'Abort': 'Отмена', 'About': 'О', 'About application': 'О приложении', 'Additional code for your application': 'Допольнительный код для вашего приложения', 'Admin is disabled because insecure channel': 'Админпанель выключена из-за небезопасного соединения', 'Admin is disabled because unsecure channel': 'Админпанель выключен из-за небезопасного соединения', 'Admin language': 'Язык админпанели', 'Administrator Password:': 'Пароль администратора:', 'Application name:': 'Название приложения:', 'Are you sure you want to delete file "%s"?': 'Вы действительно хотите удалить файл "%s"?', 'Are you sure you want to uninstall application "%s"': 'Вы действительно хотите удалить приложение "%s"', 'Are you sure you want to uninstall application "%s"?': 'Вы действительно хотите удалить приложение "%s"?', 'Are you sure you want to upgrade web2py now?': 'Вы действительно хотите обновить web2py сейчас?', 'Authentication': 'Аутентификация', 'Available databases and tables': 'Доступные базы данных и таблицы', 'Cannot be empty': 'Не может быть пустым', 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Невозможно компилировать: в приложении присутствуют ошибки. Отладьте его, исправьте ошибки и попробуйте заново.', 'Change Password': 'Изменить пароль', 'Check to delete': 'Поставьте для удаления', 'Checking for upgrades...': 'Проверка обновлений...', 'Client IP': 'IP клиента', 'Controller': 'Контроллер', 'Controllers': 'Контроллеры', 'Copyright': 'Copyright', 'Create new simple application': 'Создать новое простое приложение', 'Current request': 'Текущий запрос', 'Current response': 'Текущий ответ', 'Current session': 'Текущая сессия', 'DB Model': 'Модель БД', 'DESIGN': 'ДИЗАЙН', 'Database': 'База данных', 'Date and Time': 'Дата и время', 'Delete': 'Удалить', 'Delete:': 'Удалить:', 'Deploy on Google App Engine': 'Развернуть на Google App Engine', 'Description': 'Описание', 'Design for': 'Дизайн для', 'E-mail': 'E-mail', 'EDIT': 'ПРАВКА', 'Edit': 'Правка', 'Edit Profile': 'Правка профиля', 'Edit This App': 'Правка данного приложения', 'Edit application': 'Правка приложения', 'Edit current record': 'Правка текущей записи', 'Editing Language file': 'Правка языкового файла', 'Editing file': 'Правка файла', 'Editing file "%s"': 'Правка файла "%s"', 'Enterprise Web Framework': 'Enterprise Web Framework', 'Error logs for "%(app)s"': 'Журнал ошибок для "%(app)"', 'Exception instance attributes': 'Атрибуты объекта исключения', 'Expand Abbreviation': 'Раскрыть аббревиатуру', 'First name': 'Имя', 'Functions with no doctests will result in [passed] tests.': 'Функции без doctest будут давать [прошел] в тестах.', 'Go to Matching Pair': 'К подходящей паре', 'Group ID': 'ID группы', 'Hello World': 'Привет, Мир', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Если отчет выше содержит номер ошибки, это указывает на ошибку при работе контроллера, до попытки выполнить doctest. Причиной чаще является неверные отступы или ошибки в коде вне функции. \nЗеленый заголовок указывает на успешное выполнение всех тестов. В этом случае результаты тестов не показываются.', 'If you answer "yes", be patient, it may take a while to download': 'Если вы ответили "Да", потерпите, загрузка может потребовать времени', 'If you answer yes, be patient, it may take a while to download': 'Если вы ответили "Да", потерпите, загрузка может потребовать времени', 'Import/Export': 'Импорт/Экспорт', 'Index': 'Индекс', 'Installed applications': 'Установленные приложения', 'Internal State': 'Внутренний статус', 'Invalid Query': 'Неверный запрос', 'Invalid action': 'Неверное действие', 'Invalid email': 'Неверный email', 'Key bindings': 'Связываник клавиш', 'Key bindings for ZenConding Plugin': 'Связывание клавиш для плагина ZenConding', 'Language files (static strings) updated': 'Языковые файлы (статичные строки) обновлены', 'Languages': 'Языки', 'Last name': 'Фамилия', 'Last saved on:': 'Последнее сохранение:', 'Layout': 'Верстка', 'License for': 'Лицензия для', 'Login': 'Логин', 'Login to the Administrative Interface': 'Вход в интерфейс администратора', 'Logout': 'Выход', 'Lost Password': 'Забыли пароль', 'Main Menu': 'Главное меню', 'Match Pair': 'Найти пару', 'Menu Model': 'Модель меню', 'Merge Lines': 'Объединить линии', 'Models': 'Модели', 'Modules': 'Модули', 'NO': 'НЕТ', 'Name': 'Название', 'New Record': 'Новая запись', 'New application wizard': 'Мастер нового приложения', 'New simple application': 'Новое простое приложение', 'Next Edit Point': 'Следующее место правки', 'No databases in this application': 'В приложении нет базы данных', 'Origin': 'Оригинал', 'Original/Translation': 'Оригинал/Перевод', 'Password': 'Пароль', 'Peeking at file': 'Просмотр', 'Plugin "%s" in application': 'Плагин "%s" в приложении', 'Plugins': 'Плагины', 'Powered by': 'Обеспечен', 'Previous Edit Point': 'Предыдущее место правки', 'Query:': 'Запрос:', 'Record ID': 'ID записи', 'Register': 'Зарегистрироваться', 'Registration key': 'Ключ регистрации', 'Reset Password key': 'Сброс пароля', 'Resolve Conflict file': 'Решить конфликт в файле', 'Role': 'Роль', 'Rows in table': 'Строк в таблице', 'Rows selected': 'Выбрано строк', 'Save via Ajax': 'Сохранить через Ajax', 'Saved file hash:': 'Хэш сохраненного файла:', 'Searching:': 'Поиск:', 'Static files': 'Статические файлы', 'Stylesheet': 'Таблицы стилей', 'Sure you want to delete this object?': 'Действительно хотите удалить данный объект?', 'TM': 'TM', 'Table name': 'Название таблицы', 'Testing application': 'Тест приложения', 'Testing controller': 'Тест контроллера', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"query" является условием вида "db.table1.field1 == \'значение\'". Что-либо типа "db.table1.field1 db.table2.field2 ==" ведет к SQL JOIN.', 'The application logic, each URL path is mapped in one exposed function in the controller': 'Логика приложения, каждый URL отображается к одной функции в контроллере', 'The data representation, define database tables and sets': 'Представление данных, определите таблицы базы данных и наборы', 'The output of the file is a dictionary that was rendered by the view': 'Выводом файла является словарь, который создан в виде', 'The presentations layer, views are also known as templates': 'Слой презентации, виды так же известны, как шаблоны', 'There are no controllers': 'Отсутствуют контроллеры', 'There are no models': 'Отсутствуют модели', 'There are no modules': 'Отсутствуют модули', 'There are no plugins': 'Отсутствуют плагины', 'There are no static files': 'Отсутствуют статичные файлы', 'There are no translators, only default language is supported': 'Отсутствуют переводчики, поддерживается только стандартный язык', 'There are no views': 'Отсутствуют виды', 'These files are served without processing, your images go here': 'Эти файлы обслуживаются без обработки, ваши изображения попадут сюда', 'This is a copy of the scaffolding application': 'Это копия сгенерированного приложения', 'This is the %(filename)s template': 'Это шаблон %(filename)s', 'Ticket': 'Тикет', 'Timestamp': 'Время', 'To create a plugin, name a file/folder plugin_[name]': 'Для создания плагина назовите файл/папку plugin_[название]', 'Translation strings for the application': 'Строки перевода для приложения', 'Unable to check for upgrades': 'Невозможно проверить обновления', 'Unable to download': 'Невозможно загрузить', 'Unable to download app': 'Невозможно загрузить', 'Update:': 'Обновить:', 'Upload & install packed application': 'Загрузить и установить приложение в архиве', 'Upload a package:': 'Загрузить пакет:', 'Upload existing application': 'Загрузить существующее приложение', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Используйте (...)&(...) для AND, (...)|(...) для OR, и ~(...) для NOT при создании сложных запросов.', 'Use an url:': 'Используйте url:', 'User ID': 'ID пользователя', 'Version': 'Версия', 'View': 'Вид', 'Views': 'Виды', 'Welcome %s': 'Добро пожаловать, %s', 'Welcome to web2py': 'Добро пожаловать в web2py', 'Which called the function': 'Который вызвал функцию', 'Wrap with Abbreviation': 'Заключить в аббревиатуру', 'YES': 'ДА', 'You are successfully running web2py': 'Вы успешно запустили web2by', 'You can modify this application and adapt it to your needs': 'Вы можете изменить это приложение и подогнать под свои нужды', 'You visited the url': 'Вы посетили URL', 'About': 'О', 'additional code for your application': 'добавочный код для вашего приложения', 'admin disabled because no admin password': 'админка отключена, потому что отсутствует пароль администратора', 'admin disabled because not supported on google apps engine': 'админка отключена, т.к. не поддерживается на google app engine', 'admin disabled because unable to access password file': 'админка отключена, т.к. невозможно получить доступ к файлу с паролями ', 'administrative interface': 'интерфейс администратора', 'and rename it (required):': 'и переименуйте его (необходимо):', 'and rename it:': ' и переименуйте его:', 'appadmin': 'appadmin', 'appadmin is disabled because insecure channel': 'Appadmin отключен, т.к. соединение не безопасно', 'application "%s" uninstalled': 'Приложение "%s" удалено', 'application compiled': 'Приложение скомпилировано', 'application is compiled and cannot be designed': 'Приложение скомпилировано и дизайн не может быть изменен', 'arguments': 'аргументы', 'back': 'назад', 'beautify': 'Раскрасить', 'cache': 'кэш', 'cache, errors and sessions cleaned': 'Кэш, ошибки и сессии очищены', 'call': 'вызов', 'cannot create file': 'Невозможно создать файл', 'cannot upload file "%(filename)s"': 'Невозможно загрузить файл "%(filename)s"', 'Change admin password': 'Изменить пароль администратора', 'change password': 'изменить пароль', 'check all': 'проверить все', 'Check for upgrades': 'проверить обновления', 'Clean': 'Очистить', 'click here for online examples': 'нажмите здесь для онлайн примеров', 'click here for the administrative interface': 'нажмите здесь для интерфейса администратора', 'click to check for upgrades': 'нажмите для проверки обновления', 'code': 'код', 'collapse/expand all': 'свернуть/развернуть все', 'Compile': 'Компилировать', 'compiled application removed': 'скомпилированное приложение удалено', 'controllers': 'контроллеры', 'Create': 'Создать', 'create file with filename:': 'Создать файл с названием:', 'create new application:': 'создать новое приложение:', 'created by': 'создано', 'crontab': 'crontab', 'currently running': 'сейчас работает', 'currently saved or': 'сейчас сохранено или', 'customize me!': 'настрой меня!', 'data uploaded': 'дата загрузки', 'database': 'база данных', 'database %s select': 'Выбор базы данных %s ', 'database administration': 'администраторирование базы данных', 'db': 'бд', 'defines tables': 'определить таблицы', 'delete': 'удалить', 'delete all checked': 'удалить выбранные', 'delete plugin': 'удалить плагин', 'Deploy': 'Развернуть', 'design': 'дизайн', 'direction: ltr': 'направление: ltr', 'documentation': 'документация', 'done!': 'выполнено!', 'download layouts': 'загрузить шаблоны', 'download plugins': 'загрузить плагины', 'Edit': 'Правка', 'edit controller': 'правка контроллера', 'edit profile': 'правка профиля', 'edit views:': 'правка видов:', 'Errors': 'Ошибка', 'escape': 'escape', 'export as csv file': 'Экспорт в CSV', 'exposes': 'открывает', 'extends': 'расширяет', 'failed to reload module': 'невозможно загрузить модуль', 'file "%(filename)s" created': 'файл "%(filename)s" создан', 'file "%(filename)s" deleted': 'файл "%(filename)s" удален', 'file "%(filename)s" uploaded': 'файл "%(filename)s" загружен', 'file "%(filename)s" was not deleted': 'файл "%(filename)s" не был удален', 'file "%s" of %s restored': 'файл "%s" из %s восстановлен', 'file changed on disk': 'файл изменился на диске', 'file does not exist': 'файл не существует', 'file saved on %(time)s': 'файл сохранен %(time)s', 'file saved on %s': 'файл сохранен %s', 'files': 'файлы', 'filter': 'фильтр', 'Help': 'Помощь', 'htmledit': 'htmledit', 'includes': 'включает', 'index': 'index', 'insert new': 'вставить новый', 'insert new %s': 'вставить новый %s', 'Install': 'Установить', 'internal error': 'внутренняя ошибка', 'invalid password': 'неверный пароль', 'invalid request': 'неверный запрос', 'invalid ticket': 'неверный тикет', 'language file "%(filename)s" created/updated': 'Языковой файл "%(filename)s" создан/обновлен', 'languages': 'языки', 'languages updated': 'языки обновлены', 'loading...': 'загрузка...', 'located in the file': 'расположенный в файле', 'login': 'логин', 'Logout': 'выход', 'lost password?': 'Пароль утерен?', 'merge': 'объединить', 'models': 'модели', 'modules': 'модули', 'new application "%s" created': 'новое приложение "%s" создано', 'new record inserted': 'новая запись вставлена', 'next 100 rows': 'следующие 100 строк', 'or import from csv file': 'или испорт из cvs файла', 'or provide app url:': 'или URL приложения:', 'or provide application url:': 'или URL приложения:', 'Overwrite installed app': 'Переписать на установленное приложение', 'Pack all': 'упаковать все', 'Pack compiled': 'Архив скомпилирован', 'pack plugin': 'Упаковать плагин', 'please wait!': 'подождите, пожалуйста!', 'plugins': 'плагины', 'previous 100 rows': 'предыдущие 100 строк', 'record': 'запись', 'record does not exist': 'запись не существует', 'record id': 'id записи', 'register': 'зарегистрироваться', 'Remove compiled': 'Удалить скомпилированное', 'restore': 'восстановить', 'revert': 'откатиться', 'save': 'сохранить', 'selected': 'выбрано', 'session expired': 'сессия истекла', 'shell': 'shell', 'Site': 'сайт', 'some files could not be removed': 'некоторые файлы нельзя удалить', 'Start wizard': 'запустить мастер', 'state': 'статус', 'static': 'статичные файлы', 'submit': 'Отправить', 'table': 'таблица', 'test': 'тест', 'test_def': 'test_def', 'test_for': 'test_for', 'test_if': 'test_if', 'test_try': 'test_try', 'the application logic, each URL path is mapped in one exposed function in the controller': 'Логика приложения, каждый URL отображается в открытую функцию в контроллере', 'the data representation, define database tables and sets': 'представление данных, определить таблицы и наборы', 'the presentations layer, views are also known as templates': 'слой представления, виды известные так же как шаблоны', 'these files are served without processing, your images go here': 'Эти файлы обслуживаются без обработки, ваши изображения попадут сюда', 'to previous version.': 'на предыдущую версию.', 'translation strings for the application': 'строки перевода для приложения', 'try': 'try', 'try something like': 'попробовать что-либо вида', 'unable to create application "%s"': 'невозможно создать приложение "%s" nicht möglich', 'unable to delete file "%(filename)s"': 'невозможно удалить файл "%(filename)s"', 'unable to parse csv file': 'невозможно разобрать файл csv', 'unable to uninstall "%s"': 'невозможно удалить "%s"', 'uncheck all': 'снять выбор всего', 'Uninstall': 'Удалить', 'update': 'обновить', 'update all languages': 'обновить все языки', 'upgrade web2py now': 'обновить web2py сейчас', 'upload': 'загрузить', 'upload application:': 'загрузить файл:', 'upload file:': 'загрузить файл:', 'upload plugin file:': 'загрузить файл плагина:', 'user': 'пользователь', 'variables': 'переменные', 'versioning': 'версии', 'view': 'вид', 'views': 'виды', 'web2py Recent Tweets': 'последние твиты по web2py', 'web2py is up to date': 'web2py обновлен', 'xml': 'xml', } web2py-1.99.7.orig/applications/admin/languages/fr-fr.py0000644000175000017500000003751211724764235021607 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" est une expression en option tels que "field1 = \'newvalue\'". Vous ne pouvez pas mettre à jour ou supprimer les résultats d\'une jointure "a JOIN"', '%Y-%m-%d': '%d-%m-%Y', '%Y-%m-%d %H:%M:%S': '%d-%m-%Y %H:%M:%S', '%s rows deleted': 'lignes %s supprimé', '%s rows updated': 'lignes %s mis à jour', '(requires internet access)': '(requires internet access)', '(something like "it-it")': '(quelque chose comme "it-it") ', 'A new version of web2py is available: %s': 'Une nouvelle version de web2py est disponible: %s ', 'A new version of web2py is available: Version 1.68.2 (2009-10-21 09:59:29)\n': 'Une nouvelle version de web2py est disponible: Version 1.68.2 (2009-10-21 09:59:29)\r\n', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATTENTION: nécessite une connexion sécurisée (HTTPS) ou être en localhost. ', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTION: les tests ne sont pas thread-safe DONC NE PAS EFFECTUER DES TESTS MULTIPLES SIMULTANÉMENT.', 'ATTENTION: you cannot edit the running application!': "ATTENTION: vous ne pouvez pas modifier l'application qui tourne!", 'About': 'À propos', 'About application': "A propos de l'application", 'Additional code for your application': 'Additional code for your application', 'Admin is disabled because insecure channel': 'Admin est désactivé parce que canal non sécurisé', 'Admin language': 'Admin language', 'Administrator Password:': 'Mot de passe Administrateur:', 'Application name:': 'Application name:', 'Are you sure you want to delete file "%s"?': 'Etes-vous sûr de vouloir supprimer le fichier «%s»?', 'Are you sure you want to delete plugin "%s"?': 'Etes-vous sûr de vouloir effacer le plugin "%s"?', 'Are you sure you want to delete this object?': 'Are you sure you want to delete this object?', 'Are you sure you want to uninstall application "%s"?': "Êtes-vous sûr de vouloir désinstaller l'application «%s»?", 'Are you sure you want to upgrade web2py now?': 'Are you sure you want to upgrade web2py now?', 'Available databases and tables': 'Bases de données et tables disponible', 'Cannot be empty': 'Ne peut pas être vide', 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Ne peut pas compiler: il y a des erreurs dans votre application. corriger les erreurs et essayez à nouveau.', 'Cannot compile: there are errors in your app:': 'Cannot compile: there are errors in your app:', 'Check to delete': 'Cocher pour supprimer', 'Checking for upgrades...': 'Vérification des mises à jour ... ', 'Controllers': 'Contrôleurs', 'Create new simple application': 'Créer une nouvelle application', 'Current request': 'Requête actuel', 'Current response': 'Réponse actuelle', 'Current session': 'Session en cours', 'Date and Time': 'Date et heure', 'Delete': 'Supprimer', 'Delete this file (you will be asked to confirm deletion)': 'Delete this file (you will be asked to confirm deletion)', 'Delete:': 'Supprimer:', 'Deploy on Google App Engine': 'Déployer sur Google App Engine', 'EDIT': 'MODIFIER', 'Edit application': "Modifier l'application", 'Edit current record': 'Modifier cet entrée', 'Editing Language file': 'Modifier le fichier de langue', 'Editing file': 'Modifier le fichier', 'Editing file "%s"': 'Modifier le fichier "% s" ', 'Enterprise Web Framework': 'Enterprise Web Framework', 'Error logs for "%(app)s"': 'Journal d\'erreurs pour "%(app)s"', 'Exception instance attributes': 'Exception instance attributes', 'Functions with no doctests will result in [passed] tests.': 'Des fonctions sans doctests entraînera tests [passed] .', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': "Si le rapport ci-dessus contient un numéro de ticket, cela indique une défaillance dans l'exécution du contrôleur, avant toute tentative d'exécuter les doctests. Cela est généralement dû à une erreur d'indentation ou une erreur à l'extérieur du code de la fonction.\r\nUn titre verte indique que tous les tests (si définie) passed. Dans ce cas, les résultats des essais ne sont pas affichées.", 'Import/Export': 'Importer/Exporter', 'Installed applications': 'Les applications installées', 'Internal State': 'État Interne', 'Invalid Query': 'Requête non valide', 'Invalid action': 'Action non valide', 'Language files (static strings) updated': 'Fichiers de langue (static strings) Mise à jour ', 'Languages': 'Langues', 'Last saved on:': 'Dernière sauvegarde le:', 'License for': 'Licence pour', 'Login': 'Connexion', 'Login to the Administrative Interface': "Se connecter à l'interface d'administration", 'Models': 'Modèles', 'Modules': 'Modules', 'NO': 'NON', 'New Record': 'Nouvel Entrée', 'New application wizard': 'New application wizard', 'New simple application': 'New simple application', 'No databases in this application': 'Aucune base de données dans cette application', 'Original/Translation': 'Original / Traduction', 'PAM authenticated user, cannot change password here': 'PAM authenticated user, cannot change password here', 'Peeking at file': 'Jeter un oeil au fichier', 'Plugin "%s" in application': 'Plugin "%s" dans l\'application', 'Plugins': 'Plugins', 'Powered by': 'Propulsé par', 'Query:': 'Requête: ', 'Resolve Conflict file': 'Résoudre les conflits de fichiers', 'Rows in table': 'Lignes de la table', 'Rows selected': 'Lignes sélectionnées', "Run tests in this file (to run all files, you may also use the button labelled 'test')": "Run tests in this file (to run all files, you may also use the button labelled 'test')", 'Save': 'Save', 'Saved file hash:': 'Hash du Fichier enregistré:', 'Searching:': 'Searching:', 'Static files': 'Fichiers statiques', 'Sure you want to delete this object?': 'Vous êtes sûr de vouloir supprimer cet objet? ', 'TM': 'MD', 'Testing application': "Test de l'application", 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La "requête" est une condition comme "db.table1.field1==\'value\'". Quelque chose comme "db.table1.field1==db.table2.field2" aboutit à un JOIN SQL.', 'The application logic, each URL path is mapped in one exposed function in the controller': 'The application logic, each URL path is mapped in one exposed function in the controller', 'The data representation, define database tables and sets': 'The data representation, define database tables and sets', 'The presentations layer, views are also known as templates': 'The presentations layer, views are also known as templates', 'There are no controllers': "Il n'existe pas de contrôleurs", 'There are no models': "Il n'existe pas de modèles", 'There are no modules': "Il n'existe pas de modules", 'There are no plugins': 'There are no plugins', 'There are no static files': "Il n'existe pas de fichiers statiques", 'There are no translators, only default language is supported': "Il n'y a pas de traducteurs, est prise en charge uniquement la langue par défaut", 'There are no views': "Il n'existe pas de vues", 'These files are served without processing, your images go here': 'These files are served without processing, your images go here', 'This is the %(filename)s template': 'Ceci est le modèle %(filename)s ', 'Ticket': 'Ticket', 'To create a plugin, name a file/folder plugin_[name]': 'Pour créer un plugin, créer un fichier /dossier plugin_[nom]', 'Translation strings for the application': 'Translation strings for the application', 'Unable to check for upgrades': 'Impossible de vérifier les mises à niveau', 'Unable to download': 'Impossible de télécharger', 'Unable to download app': 'Impossible de télécharger app', 'Unable to download app because:': 'Unable to download app because:', 'Unable to download because': 'Unable to download because', 'Update:': 'Mise à jour:', 'Upload & install packed application': 'Upload & install packed application', 'Upload a package:': 'Upload a package:', 'Upload existing application': 'charger une application existante', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Utilisez (...)&(...) pour AND, (...)|(...) pour OR, et ~(...) pour NOT et construire des requêtes plus complexes. ', 'Use an url:': 'Use an url:', 'Version': 'Version', 'Views': 'Vues', 'Web Framework': 'Web Framework', 'YES': 'OUI', 'About': 'à propos', 'additional code for your application': 'code supplémentaire pour votre application', 'admin disabled because no admin password': 'admin désactivé car aucun mot de passe admin', 'admin disabled because not supported on google app engine': 'admin désactivé car non pris en charge sur Google Apps engine', 'admin disabled because unable to access password file': "admin désactivé car incapable d'accéder au fichier mot de passe", 'administrative interface': 'administrative interface', 'and rename it (required):': 'et renommez-la (obligatoire):', 'and rename it:': 'et renommez-le:', 'appadmin': 'appadmin', 'appadmin is disabled because insecure channel': 'appadmin est désactivé parce que canal non sécurisé', 'application "%s" uninstalled': 'application "%s" désinstallé', 'application %(appname)s installed with md5sum: %(digest)s': 'application %(appname)s installed with md5sum: %(digest)s', 'application compiled': 'application compilée', 'application is compiled and cannot be designed': "l'application est compilée et ne peut être désigné", 'arguments': 'arguments', 'back': 'retour', 'cache': 'cache', 'cache, errors and sessions cleaned': 'cache, erreurs et sessions nettoyé', 'cannot create file': 'ne peu pas créer de fichier', 'cannot upload file "%(filename)s"': 'ne peu pas charger le fichier "%(filename)s"', 'Change admin password': 'change admin password', 'check all': 'tous vérifier ', 'Check for upgrades': 'check for upgrades', 'Clean': 'nettoyer', 'click to check for upgrades': 'Cliquez pour vérifier les mises à niveau', 'code': 'code', 'collapse/expand all': 'collapse/expand all', 'Compile': 'compiler', 'compiled application removed': 'application compilée enlevé', 'controllers': 'contrôleurs', 'Create': 'create', 'create file with filename:': 'créer un fichier avec nom de fichier:', 'create new application:': 'créer une nouvelle application:', 'created by': 'créé par', 'crontab': 'crontab', 'currently running': 'currently running', 'currently saved or': 'actuellement enregistrés ou', 'data uploaded': 'données chargées', 'database': 'base de données', 'database %s select': 'base de données %s sélectionner', 'database administration': 'administration base de données', 'db': 'db', 'defines tables': 'définit les tables', 'delete': 'supprimer', 'delete all checked': 'supprimer tout ce qui est cocher', 'delete plugin': ' supprimer plugin', 'Deploy': 'deploy', 'design': 'conception', 'direction: ltr': 'direction: ltr', 'docs': 'docs', 'done!': 'fait!', 'download layouts': 'download layouts', 'download plugins': 'download plugins', 'Edit': 'modifier', 'edit controller': 'modifier contrôleur', 'edit views:': 'edit views:', 'Errors': 'erreurs', 'export as csv file': 'exportation au format CSV', 'exposes': 'expose', 'exposes:': 'exposes:', 'extends': 'étend', 'failed to reload module': 'impossible de recharger le module', 'failed to reload module because:': 'failed to reload module because:', 'file "%(filename)s" created': 'fichier "%(filename)s" créé', 'file "%(filename)s" deleted': 'fichier "%(filename)s" supprimé', 'file "%(filename)s" uploaded': 'fichier "%(filename)s" chargé', 'file "%s" of %s restored': 'fichier "%s" de %s restauré', 'file changed on disk': 'fichier modifié sur le disque', 'file does not exist': "fichier n'existe pas", 'file saved on %(time)s': 'fichier enregistré le %(time)s', 'file saved on %s': 'fichier enregistré le %s', 'files': 'files', 'filter': 'filter', 'Help': 'aide', 'htmledit': 'edition html', 'includes': 'inclus', 'index': 'index', 'insert new': 'insérer nouveau', 'insert new %s': 'insérer nouveau %s', 'Install': 'install', 'internal error': 'erreur interne', 'invalid password': 'mot de passe invalide', 'invalid request': 'Demande incorrecte', 'invalid ticket': 'ticket non valide', 'language file "%(filename)s" created/updated': 'fichier de langue "%(filename)s" créé/mis à jour', 'languages': 'langues', 'loading...': 'Chargement ...', 'login': 'connexion', 'Logout': 'déconnexion', 'merge': 'fusionner', 'models': 'modèles', 'modules': 'modules', 'new application "%s" created': 'nouvelle application "%s" créée', 'new plugin installed': 'nouveau plugin installé', 'new record inserted': 'nouvelle entrée inséré', 'next 100 rows': '100 lignes suivantes', 'no match': 'no match', 'or import from csv file': 'ou importer depuis un fichier CSV ', 'or provide app url:': 'or provide app url:', 'or provide application url:': "ou fournir l'URL de l'application:", 'Overwrite installed app': 'overwrite installed app', 'Pack all': 'tout empaqueter', 'Pack compiled': 'paquet compilé', 'pack plugin': 'paquet plugin', 'password changed': 'password changed', 'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" supprimé', 'plugins': 'plugins', 'previous 100 rows': '100 lignes précédentes', 'record': 'entrée', 'record does not exist': "l'entrée n'existe pas", 'record id': 'id entrée', 'Remove compiled': 'retirer compilé', 'restore': 'restaurer', 'revert': 'revenir', 'save': 'sauver', 'selected': 'sélectionnés', 'session expired': 'la session a expiré ', 'shell': 'shell', 'Site': 'site', 'some files could not be removed': 'certains fichiers ne peuvent pas être supprimés', 'Start wizard': 'start wizard', 'state': 'état', 'static': 'statiques', 'submit': 'envoyer', 'table': 'table', 'test': 'tester', 'the application logic, each URL path is mapped in one exposed function in the controller': "la logique de l'application, chaque route URL est mappé dans une fonction exposée dans le contrôleur", 'the data representation, define database tables and sets': 'la représentation des données, défini les tables de bases de données et sets', 'the presentations layer, views are also known as templates': 'la couche des présentations, les vues sont également connus en tant que modèles', 'these files are served without processing, your images go here': 'ces fichiers sont servis sans transformation, vos images vont ici', 'to previous version.': 'à la version précédente.', 'translation strings for the application': "chaînes de traduction de l'application", 'try': 'essayer', 'try something like': 'essayez quelque chose comme', 'unable to create application "%s"': 'impossible de créer l\'application "%s"', 'unable to delete file "%(filename)s"': 'impossible de supprimer le fichier "%(filename)s"', 'unable to delete file plugin "%(plugin)s"': 'impossible de supprimer le plugin "%(plugin)s"', 'unable to parse csv file': "impossible d'analyser les fichiers CSV", 'unable to uninstall "%s"': 'impossible de désinstaller "%s"', 'unable to upgrade because "%s"': 'unable to upgrade because "%s"', 'uncheck all': 'tout décocher', 'Uninstall': 'désinstaller', 'update': 'mettre à jour', 'update all languages': 'mettre à jour toutes les langues', 'upgrade now': 'upgrade now', 'upgrade web2py now': 'upgrade web2py now', 'upload': 'upload', 'upload application:': "charger l'application:", 'upload file:': 'charger le fichier:', 'upload plugin file:': 'charger fichier plugin:', 'user': 'user', 'variables': 'variables', 'versioning': 'versioning', 'view': 'vue', 'views': 'vues', 'web2py Recent Tweets': 'web2py Tweets récentes', 'web2py is up to date': 'web2py est à jour', 'web2py upgraded; please restart it': 'web2py upgraded; please restart it', } web2py-1.99.7.orig/applications/admin/languages/sl.py0000755000175000017500000004500311724764235021206 0ustar josejose# coding: utf8 { '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Popravi" je izbirni izraz kot npr.: "stolpec1 = \'novavrednost\'". Rezultatov JOIN operacije ne morete popravljati ali brisati', '%Y-%m-%d': '%Y-%m-%d', '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', '%s rows deleted': '%s vrstic izbrisanih', '%s rows updated': '%s vrstic popravljeno', '(requires internet access)': '(zahteva internetni dostop)', '(something like "it-it")': '(nekaj kot "sl-SI" ali samo "sl")', 'A new version of web2py is available': 'Nova različica web2py je na voljo', 'A new version of web2py is available: %s': 'Nova različica web2py je na voljo: %s', 'A new version of web2py is available: Version 1.85.3 (2010-09-18 07:07:46)\n': 'Nova različica web2py je na voljo: Različica 1.85.3 (2010-09-18 07:07:46)\n', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'POZOR: Prijava zahteva varno povezavo (HTTPS) ali lokalni (localhost) dostop.', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'POZOR: Testiranje ni večopravilno, zato ne poganjajte več testov hkrati.', 'ATTENTION: This is an experimental feature and it needs more testing.': 'POZOR: To je preizkusni fazi in potrebuje več testiranja.', 'ATTENTION: you cannot edit the running application!': 'POZOR: Ne morete urejati aplikacije, ki že teče!', 'Abort': 'Preklic', 'About': 'Vizitka', 'About application': 'O aplikaciji', 'Additional code for your application': 'Dodatna koda za vašo aplikacijo', 'Admin is disabled because insecure channel': 'Skrbnik je izključen zaradi nezavarovane povezave', 'Admin is disabled because unsecure channel': 'Skrbnik je izključen zaradi nezavarovane povezave', 'Admin language': 'Skrbniški jezik', 'Administrator Password:': 'Skrbniško geslo:', 'Application name:': 'Ime aplikacije:', 'Are you sure you want to delete file "%s"?': 'Ali res želite pobrisati datoteko "%s"?', 'Are you sure you want to delete this object?': 'Ali res želite izbrisati ta predmet?', 'Are you sure you want to uninstall application "%s"': 'Ali res želite odstraniti program "%s"', 'Are you sure you want to uninstall application "%s"?': 'Ali res želite odstraniti program "%s"?', 'Are you sure you want to upgrade web2py now?': 'Ali želite sedaj nadgraditi web2py?', 'Authentication': 'Avtentikacija', 'Available databases and tables': 'Podatkovne baze in tabele', 'Begin': 'Začni', 'Cannot be empty': 'Ne sme biti prazno', 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'Nemogoče prevajanje: napake v programu. Odpravite napake in poskusite ponovno.', 'Change Password': 'Spremeni geslo', 'Change admin password': 'Spremenite skrbniško geslo', 'Check for upgrades': 'Preveri za posodobitve', 'Check to delete': 'Odkljukajte, če želite izbrisati', 'Checking for upgrades...': 'Preverjam posodobitve...', 'Clean': 'Počisti', 'Click row to expand traceback': 'Kliknite vrstico da razširite sledenje', 'Click row to view a ticket': 'Kliknite vrstico za ogled listka', 'Client IP': 'IP klienta', 'Compile': 'Prevedi', 'Controller': 'Krmilnik', 'Controllers': 'Krmilniki', 'Copyright': 'Copyright', 'Count': 'Število', 'Create': 'Ustvari', 'Create new simple application': 'Ustvari novo enostavno aplikacijo', 'Current request': 'Trenutna zahteva', 'Current response': 'Trenutni odgovor', 'Current session': 'Trenutna seja', 'DB Model': 'Podatkovni model', 'DESIGN': 'Izgled', 'Database': 'Podatkovna baza', 'Date and Time': 'Datum in čas', 'Delete': 'Izbriši', 'Delete this file (you will be asked to confirm deletion)': 'Izbriši to datoteko (izbris boste morali potrditi)', 'Delete:': 'Izbriši:', 'Deploy': 'Namesti', 'Deploy on Google App Engine': 'Prenesi na Google App sistem', 'Description': 'Opis', 'Design for': 'Oblikuj za', 'Detailed traceback description': 'Natačen opis sledenja', 'Disable': 'Izključi', 'E-mail': 'E-mail', 'EDIT': 'UREDI', 'Edit': 'Uredi', 'Edit Profile': 'Uredi profil', 'Edit This App': 'Uredi ta program', 'Edit application': 'Uredi program', 'Edit current record': 'Uredi trenutni zapis', 'Editing Language file': 'Uredi jezikovno datoteko', 'Editing file': 'Urejanje datoteke', 'Editing file "%s"': 'Urejanje datoteke "%s"', 'Enterprise Web Framework': 'Enterprise Web Framework', 'Error': 'Napaka', 'Error logs for "%(app)s"': 'Dnevnik napak za "%(app)s"', 'Error snapshot': 'Posnetek napake', 'Error ticket': 'Listek napake', 'Errors': 'Napake', 'Exception instance attributes': 'Lastnosti instance izjeme', 'Expand Abbreviation': 'Razširi okrajšave', 'File': 'Datoteka', 'First name': 'Ime', 'Frames': 'Okvirji', 'Functions with no doctests will result in [passed] tests.': 'Funkcije brez doctest bodo opravile teste brez preverjanja.', 'Get from URL:': 'Naloži iz URL:', 'Go to Matching Pair': 'Pojdi k ujemalnemu paru', 'Group ID': 'ID skupine', 'Hello World': 'Pozdravljen, Svet!', 'Help': 'Pomoč', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Če poročilo zgoraj vsebuje številko listka to pomeni napako pri izvajanju krmilnika, še preden so se izvedli doctesti. To ponavadi pomeni napako pri zamiku programske vrstice ali izven funkcije.\nZelen naslov označuje, da so vsi testi opravljeni. V tem primeru testi niso prikazani.', 'If you answer "yes", be patient, it may take a while to download': 'Če odgovorite z "DA", potrpite. Prenos traja nekaj časa', 'If you answer yes, be patient, it may take a while to download': 'Če odgovorite z "DA", potrpite. Prenos traja nekaj časa', 'Import/Export': 'Uvoz/Izvoz', 'Index': 'Indeks', 'Install': 'Namesti', 'Installed applications': 'Nameščene aplikacije', 'Internal State': 'Notranje stanje', 'Invalid Query': 'Napačno povpraševanje', 'Invalid action': 'Napačno dejanje', 'Invalid email': 'Napačen e-naslov', 'Key bindings': 'Povezave tipk', 'Key bindings for ZenConding Plugin': 'Povezave tipk za ZenConding vtičnik', 'Language files (static strings) updated': 'Jezikovna datoteka (statično besedilo) posodobljeno', 'Languages': 'Jeziki', 'Last name': 'Priimek', 'Last saved on:': 'Zadnjič shranjeno:', 'Layout': 'Postavitev', 'License for': 'Licenca za', 'Login': 'Prijava', 'Login to the Administrative Interface': 'Prijava v skrbniški vmesnik', 'Logout': 'Odjava', 'Lost Password': 'Izgubljeno geslo', 'Main Menu': 'Glavni meni', 'Match Pair': 'Ujemalni par', 'Menu Model': 'Model menija', 'Merge Lines': 'Združi vrstice', 'Models': 'Modeli', 'Modules': 'Moduli', 'NO': 'NE', 'Name': 'Ime', 'New Application Wizard': 'Čarovnik za novo aplikacijo', 'New Record': 'Nov zapis', 'New application wizard': 'Čarovnik za novo aplikacijo', 'New simple application': 'Nova enostavna aplikacija', 'Next Edit Point': 'Naslednja točka urejanja', 'No databases in this application': 'V tem programu ni podatkovnih baz', 'Origin': 'Izvor', 'Original/Translation': 'Izvor/Prevod', 'Overwrite installed app': 'Prepiši obstoječi program', 'Pack all': 'Zapakiraj vse', 'Pack compiled': 'Paket preveden', 'Password': 'Geslo', 'Peeking at file': 'Vpogled v datoteko', 'Plugin "%s" in application': 'Vtičnik "%s" v aplikaciji', 'Plugins': 'Vtičniki', 'Powered by': 'Narejeno z', 'Previous Edit Point': 'Prejšnja točka urejanja', 'Query:': 'Vprašanje:', 'Record ID': 'ID zapisa', 'Register': 'Registracija', 'Registration key': 'Registracijski ključ', 'Reload routes': 'Ponovno naloži preusmeritve', 'Remove compiled': 'Odstrani prevedeno', 'Reset Password key': 'Ponastavi ključ gesla', 'Resolve Conflict file': 'Datoteka za razrešitev problemov', 'Role': 'Vloga', 'Rows in table': 'Vrstic v tabeli', 'Rows selected': 'Izbranih vrstic', "Run tests in this file (to run all files, you may also use the button labelled 'test')": "Poženi teste v tej datoteki (za vse teste uporabite gumb 'test')", 'Save via Ajax': 'Shrani preko AJAX', 'Saved file hash:': 'Koda shranjene datoteke:', 'Searching:': 'Iskanje:', 'Site': 'Spletišče', 'Sorry, could not find mercurial installed': 'Oprostite. Mercurial ni nameščen.', 'Start a new app': 'Začnite z novo aplikacijo', 'Start wizard': 'Zaženi čarovnika', 'Static files': 'Statične datoteke', 'Stylesheet': 'CSS datoteka', 'Sure you want to delete this object?': 'Ali res želite izbrisati ta predmet?', 'TM': 'TM', 'Table name': 'Ime tabele', 'Testing application': 'Testiranje programa', 'Testing controller': 'Testiranje krmilnika', 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"vprašanje" je pogoj kot npr. "db.table1.field1 == \'vrednost\'". Nekaj kot "db.table1.field1 == db.table2.field2" izvede SQL operacijo JOIN.', 'The application logic, each URL path is mapped in one exposed function in the controller': 'Logika delovanja aplikacije. Vsak URL je povezan z eno objavljeno funkcijo v krmilniku', 'The data representation, define database tables and sets': 'Predstavitev podatkov. Definirajte podatkovne tabele in množice', 'The output of the file is a dictionary that was rendered by the view': 'Rezultat datoteke je slovar, ki ga predela pogled', 'The presentations layer, views are also known as templates': 'Predstavitveni nivo. Pogledi so znani tudi kot predloge', 'There are no controllers': 'Ni krmilnikov', 'There are no models': 'Ni modelov', 'There are no modules': 'Ni modulov', 'There are no plugins': 'Ni vtičnikov', 'There are no static files': 'Ni statičnih datotek', 'There are no translators, only default language is supported': 'Ni prevodov. Podprt je samo privzeti jezik', 'There are no views': 'Ni pogledov', 'These files are served without processing, your images go here': 'Te datoteke so poslane brez obdelave. Vaše slike shranite tu.', 'This is a copy of the scaffolding application': 'To je kopija okvirne aplikacije', 'This is the %(filename)s template': 'To je predloga %(filename)s', 'Ticket': 'Listek', 'Ticket ID': 'ID listka', 'Timestamp': 'Časovni žig', 'To create a plugin, name a file/folder plugin_[name]': 'Če želite ustvariti vtičnik, poimenujte datoteko/mapo plugin_[ime]', 'Traceback': 'Sledljivost', 'Translation strings for the application': 'Prevajalna besedila za aplikacijo', 'Unable to check for upgrades': 'Ne morem preveriti posodobitev', 'Unable to download': 'Ne morem prenesti datoteke', 'Unable to download app': 'Ne morem prenesti programa', 'Uninstall': 'Odstrani', 'Update:': 'Posodobitev:', 'Upload & install packed application': 'Naloži in namesti pakirano aplikacijo', 'Upload a package:': 'Naloži paket:', 'Upload and install packed application': 'Naloži in namesti pakirano aplikacijo', 'Upload existing application': 'Naloži obstoječo aplikacijo', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Uporabie (...)&(...) za AND, (...)|(...) za OR, in ~(...) za NOT pri gradnji kompleksnih povpraševanj.', 'Use an url:': 'Uporabite URL:', 'User ID': 'ID uporabnika', 'Version': 'Različica', 'Versioning': 'Versioning', 'View': 'Pogled', 'Views': 'Pogledi', 'Web Framework': 'Web Framework', 'Welcome %s': 'Dobrodošli, %s', 'Welcome to web2py': 'Dobrodošli v web2py', 'Which called the function': 'Ki je klical funkcijo', 'Wrap with Abbreviation': 'Ovij z okrajšavo', 'YES': 'DA', 'You are successfully running web2py': 'Uspešno ste pognali web2py', 'You can modify this application and adapt it to your needs': 'Lahko spremenite to aplikacijo in jo prilagodite vašim potrebam', 'You visited the url': 'Obiskali ste URL', 'additional code for your application': 'dodatna koda za vašo aplikacijo', 'admin disabled because no admin password': 'skrbnik izključen, ker ni skrbniškega gesla', 'admin disabled because not supported on google apps engine': 'skrbnik izključen, ker ni podprt na Google App sistemu', 'admin disabled because unable to access password file': 'skrbnik izključen, ker ne morem dostopati do datoteke z gesli', 'administrative interface': 'skrbniški vmesnik', 'and rename it (required):': 'in jo preimenujte (obvezno):', 'and rename it:': ' in jo preimenujte:', 'appadmin': 'appadmin', 'appadmin is disabled because insecure channel': 'Appadmin izključen, ker zahteva varno (HTTPS) povezavo', 'application "%s" uninstalled': 'Aplikacija "%s" odstranjena', 'application compiled': 'aplikacija prevedena', 'application is compiled and cannot be designed': 'aplikacija je prevedena in je ne morete popravljati', 'arguments': 'argumenti', 'back': 'nazaj', 'beautify': 'olepšaj', 'cache': 'predpomnilnik', 'cache, errors and sessions cleaned': 'Predpomnilnik, napake in seja so očiščeni', 'call': 'kliči', 'cannot create file': 'ne morem ustvariti datoteke', 'cannot upload file "%(filename)s"': 'ne morem naložiti datoteke "%(filename)s"', 'change password': 'spremeni geslo', 'check all': 'označi vse', 'click here for online examples': 'kliknite za spletne primere', 'click here for the administrative interface': 'kliknite za skrbniški vmesnik', 'click to check for upgrades': 'kliknite za preverjanje nadgradenj', 'code': 'koda', 'collapse/expand all': 'zapri/odpri vse', 'compiled application removed': 'prevedena aplikacija je odstranjena', 'controllers': 'krmilniki', 'create file with filename:': 'Ustvari datoteko z imenom:', 'create new application:': 'Ustvari novo aplikacijo:', 'created by': 'ustvaril', 'crontab': 'crontab', 'currently running': 'trenutno teče', 'currently saved or': 'trenutno shranjeno ali', 'customize me!': 'Spremeni me!', 'data uploaded': 'podatki naloženi', 'database': 'podatkovna baza', 'database %s select': 'izberi podatkovno bazo %s ', 'database administration': 'upravljanje s podatkovno bazo', 'db': 'db', 'defines tables': 'definiraj tabele', 'delete': 'izbriši', 'delete all checked': 'izbriši vse označene', 'delete plugin': 'izbriši vtičnik', 'design': 'oblikuj', 'details': 'podrobnosti', 'direction: ltr': 'smer: ltr', 'documentation': 'dokumentacija', 'done!': 'Narejeno!', 'download layouts': 'prenesi postavitev', 'download plugins': 'prenesi vtičnik', 'edit controller': 'uredi krmilnik', 'edit profile': 'uredi profil', 'edit views:': 'urejaj poglede:', 'escape': 'escape', 'export as csv file': 'izvozi kot CSV', 'exposes': 'objavlja', 'extends': 'razširja', 'failed to reload module': 'nisem uspel ponovno naložiti modula', 'file "%(filename)s" created': 'datoteka "%(filename)s" ustvarjena', 'file "%(filename)s" deleted': 'datoteka "%(filename)s" izbrisana', 'file "%(filename)s" uploaded': 'datoteka "%(filename)s" prenešena', 'file "%(filename)s" was not deleted': 'datoteka "%(filename)s" ni bila izbrisana', 'file "%s" of %s restored': 'datoteka "%s" od %s obnovljena', 'file changed on disk': 'datoteka je bila spremenjena', 'file does not exist': 'datoteka ne obstaja', 'file saved on %(time)s': 'datoteka shranjena %(time)s', 'file saved on %s': 'datoteka shranjena %s', 'files': 'datoteke', 'filter': 'fiter', 'htmledit': 'htmledit', 'includes': 'vključuje', 'index': 'indeks', 'insert new': 'vstavi nov', 'insert new %s': 'vstavi nov %s', 'inspect attributes': 'pregled lastnosti', 'internal error': 'notranja napaka', 'invalid password': 'napačno geslo', 'invalid request': 'napačna zahteva', 'invalid ticket': 'napačen kartonček', 'language file "%(filename)s" created/updated': 'jezikovna datoteka "%(filename)s" ustvarjena/posodobljena', 'languages': 'jeziki', 'languages updated': 'jeziki posodobljeni', 'loading...': 'nalaganje...', 'locals': 'locals', 'located in the file': 'se nahaja v datoteki', 'login': 'prijava', 'lost password?': 'Izgubljeno geslo?', 'merge': 'združi', 'models': 'modeli', 'modules': 'moduli', 'new application "%s" created': 'ustvarjen nov program "%s"', 'new record inserted': 'vstavljen nov zapis', 'next 100 rows': 'naslednjih 100 zapisov', 'or import from csv file': 'ali uvozi iz CSV datoteke', 'or provide app url:': 'ali vpišite URL programa:', 'or provide application url:': 'ali vpišite URL programa:', 'pack plugin': 'zapakiraj vtičnik', 'please wait!': 'Prosim počakajte!', 'plugins': 'vtičniki', 'previous 100 rows': 'prejšnjih 100 zapisov', 'record': 'zapis', 'record does not exist': 'zapis ne obstaja', 'record id': 'id zapisa', 'register': 'registracija', 'request': 'zahteva', 'response': 'odgovor', 'restore': 'obnovi', 'revert': 'povrni', 'save': 'shrani', 'selected': 'izbrano', 'session': 'seja', 'session expired': 'seja pretekla', 'shell': 'lupina', 'some files could not be removed': 'nekaterih datotek se ni dalo izbrisati', 'state': 'stanje', 'static': 'statično', 'submit': 'pošlji', 'table': 'tabela', 'test': 'test', 'test_def': 'test_def', 'test_for': 'test_for', 'test_if': 'test_if', 'test_try': 'test_try', 'the application logic, each URL path is mapped in one exposed function in the controller': 'krmilna logika, vsaka URL pot je preslikana v eno funkcijo v krmilniku', 'the data representation, define database tables and sets': 'podatkovna predstavitev, definirajte tabele in množice', 'the presentations layer, views are also known as templates': 'predstavitveni nivo, pogledi so tudi znani kot predloge', 'these files are served without processing, your images go here': 'te datoteke so poslane brez posredovanja in obdelave, svoje slike shranite tu', 'to previous version.': 'na prejšnjo različico.', 'translation strings for the application': 'prevodna besedila za program', 'try': 'poskusi', 'try something like': 'poskusite na primer', 'unable to create application "%s"': 'ne morem ustvariti programa "%s" ', 'unable to delete file "%(filename)s"': 'ne morem izbrisati datoteke "%(filename)s"', 'unable to parse csv file': 'ne morem obdelati csv datoteke', 'unable to uninstall "%s"': 'ne morem odstraniti "%s"', 'uncheck all': 'odznači vse', 'update': 'posodobi', 'update all languages': 'posodobi vse jezike', 'upgrade web2py now': 'posodobi web2py', 'upload': 'naloži', 'upload application:': 'naloži program:', 'upload file:': 'naloži datoteko:', 'upload plugin file:': 'naloži vtičnik:', 'user': 'uporabnik', 'variables': 'spremenljivke', 'versioning': 'različice', 'view': 'pogled', 'views': 'pogledi', 'web2py Recent Tweets': 'zadnji tviti na web2py', 'web2py is up to date': 'web2py je ažuren', 'xml': 'xml', } web2py-1.99.7.orig/applications/admin/languages/ja.py0000644000175000017500000002462711724764235021170 0ustar josejose# coding: utf8 { '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', '%Y-%m-%d': '%Y-%m-%d', '(requires internet access)': '(インターネットアクセスが必要)', '(something like "it-it")': '(例: "it-it")', 'Abort': '中断', 'About application': 'アプリケーションについて', 'About': 'About', 'Additional code for your application': 'アプリケーションに必要な追加記述', 'Admin language': '管理画面の言語', 'administrative interface': '管理画面', 'Administrator Password:': '管理者パスワード:', 'and rename it:': 'ファイル名を変更:', 'appadmin': 'アプリ管理画面', 'application "%s" uninstalled': '"%s"アプリケーションが削除されました', 'application compiled': 'アプリケーションがコンパイルされました', 'Application name:': 'アプリケーション名:', 'Are you sure you want to delete plugin "%s"?': '"%s"プラグインを削除してもよろしいですか?', 'Are you sure you want to delete this object?': 'このオブジェクトを削除してもよろしいですか?', 'Are you sure you want to uninstall application "%s"?': '"%s"アプリケーションを削除してもよろしいですか?', 'arguments': '引数', 'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': '注意: 安全(HTTPS)な接続でログインするかlocalhostで実行されている必要があります。', 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': '注意: テストはスレッドセーフではないので複数のテストを同時に実行しないでください。', 'ATTENTION: you cannot edit the running application!': '注意: 実行中のアプリケーションは編集できません!', 'Available databases and tables': '利用可能なデータベースとテーブル一覧', 'back': '戻る', 'Basics': '基本情報', 'Begin': '開始', 'cache': 'cache', 'cannot upload file "%(filename)s"': '"%(filename)s"ファイルをアップロードできません', 'Change admin password': '管理者パスワード変更', 'check all': '全てを選択', 'Check for upgrades': '更新チェック', 'Checking for upgrades...': '更新を確認中...', 'Clean': '一時データ削除', 'Click row to expand traceback': '列をクリックしてトレースバックを展開', 'code': 'コード', 'collapse/expand all': '全て開閉する', 'Compile': 'コンパイル', 'compiled application removed': 'コンパイル済みのアプリケーションが削除されました', 'Controllers': 'コントローラ', 'controllers': 'コントローラ', 'Count': '回数', 'create file with filename:': 'ファイル名:', 'Create': '作成', 'created by': '作成者', 'crontab': 'crontab', 'currently running': '現在実行中', 'currently saved or': '現在保存されているデータ または', 'database administration': 'データベース管理', 'db': 'db', 'defines tables': 'テーブル定義', 'delete all checked': '選択したデータを全て削除', 'delete plugin': 'プラグイン削除', 'Delete this file (you will be asked to confirm deletion)': 'ファイルの削除(確認画面が出ます)', 'Delete': '削除', 'Deploy on Google App Engine': 'Google App Engineにデプロイ', 'Deploy': 'デプロイ', 'design': 'デザイン', 'Detailed traceback description': '詳細なトレースバック内容', 'details': '詳細', 'direction: ltr': 'direction: ltr', 'Disable': '無効', 'docs': 'ドキュメント', 'download layouts': 'レイアウトのダウンロード', 'download plugins': 'プラグインのダウンロード', 'edit all': '全て編集', 'Edit application': 'アプリケーションを編集', 'edit views:': 'ビューの編集:', 'Edit': '編集', 'Editing file "%s"': '"%s"ファイルを編集中', 'Enable': '有効', 'Error logs for "%(app)s"': '"%(app)s"のエラーログ', 'Error snapshot': 'エラー発生箇所', 'Error ticket': 'エラーチケット', 'Error': 'エラー', 'Errors': 'エラー', 'Exception instance attributes': '例外インスタンス引数', 'exposes': '公開', 'exposes:': '公開:', 'extends': '継承', 'File': 'ファイル', 'files': 'ファイル', 'filter': 'フィルタ', 'Frames': 'フレーム', 'Functions with no doctests will result in [passed] tests.': 'doctestsのない関数は自動的にテストをパスします。', 'Generate': 'アプリ生成', 'Get from URL:': 'URLから取得:', 'go!': '実行!', 'Help': 'ヘルプ', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'もし上記のレポートにチケット番号が含まれる場合は、doctestを実行する前に、コントローラの実行で問題があったことを示します。これはインデントの問題やその関数の外部で問題があった場合に起きるが一般的です。\n緑色のタイトルは全てのテスト(もし定義されていれば)をパスしたことを示します。その場合、テスト結果は表示されません。', 'includes': 'インクルード', 'index': 'index', 'inspect attributes': '引数の検査', 'Install': 'インストール', 'Installed applications': 'アプリケーション一覧', 'Languages': '言語', 'languages': '言語', 'Last saved on:': '最終保存日時:', 'License for': 'License for', 'loading...': 'ロードしています...', 'locals': 'ローカル', 'Login to the Administrative Interface': '管理画面へログイン', 'Login': 'ログイン', 'Logout': 'ログアウト', 'Models': 'モデル', 'models': 'モデル', 'Modules': 'モジュール', 'modules': 'モジュール', 'New Application Wizard': '新規アプリケーション作成ウィザード', 'New application wizard': '新規アプリケーション作成ウィザード', 'new plugin installed': '新しいプラグインがインストールされました', 'New simple application': '新規アプリケーション', 'No databases in this application': 'このアプリケーションにはデータベースが存在しません', 'NO': 'いいえ', 'online designer': 'オンラインデザイナー', 'Overwrite installed app': 'アプリケーションを上書き', 'Pack all': 'パッケージ化', 'Pack compiled': 'コンパイルデータのパッケージ化', 'pack plugin': 'プラグインのパッケージ化', 'Peeking at file': 'ファイルを参照', 'plugin "%(plugin)s" deleted': '"%(plugin)s"プラグインは削除されました', 'Plugin "%s" in application': '"%s"プラグイン', 'Plugins': 'プラグイン', 'plugins': 'プラグイン', 'Powered by': 'Powered by', 'Reload routes': 'ルーティング再読み込み', 'Remove compiled': 'コンパイルデータの削除', 'request': 'リクエスト', 'response': 'レスポンス', 'restart': '最初からやり直し', 'restore': '復元', 'revert': '一つ前に戻す', "Run tests in this file (to run all files, you may also use the button labelled 'test')": "このファイルのテストを実行(全てのファイルに対して実行する場合は、'テスト'というボタンを使用できます)", 'Save': '保存', 'Saved file hash:': '保存されたファイルハッシュ:', 'Searching:': '検索中:', 'session expired': 'セッションの有効期限が切れました', 'session': 'セッション', 'shell': 'shell', 'Site': 'サイト', 'skip to generate': 'スキップしてアプリ生成画面へ移動', 'Sorry, could not find mercurial installed': 'インストールされているmercurialが見つかりません', 'Start a new app': '新規アプリの作成', 'Start wizard': 'ウィザードの開始', 'state': 'state', 'Static files': '静的ファイル', 'static': '静的ファイル', 'Step': 'ステップ', 'test': 'テスト', 'Testing application': 'アプリケーションをテスト中', 'The application logic, each URL path is mapped in one exposed function in the controller': 'アプリケーションロジック、それぞれのURLパスはコントローラで公開されている各関数にマッピングされています', 'The data representation, define database tables and sets': 'データの表示方法, テーブルとセットの定義', 'The presentations layer, views are also known as templates': 'プレゼンテーション層、ビューはテンプレートとしても知られています', 'There are no controllers': 'コントローラがありません', 'There are no modules': 'モジュールがありません', 'There are no plugins': 'プラグインはありません', 'There are no translators, only default language is supported': '翻訳がないためデフォルト言語のみをサポートします', 'There are no views': 'ビューがありません', 'These files are served without processing, your images go here': 'これらのファイルは直接参照されます, ここに画像が入ります', 'Ticket ID': 'チケットID', 'to previous version.': '前のバージョンへ戻す。', 'To create a plugin, name a file/folder plugin_[name]': 'ファイル名/フォルダ名 plugin_[名称]としてプラグインを作成してください', 'Traceback': 'トレースバック', 'Translation strings for the application': 'アプリケーションの翻訳文字列', 'Unable to download because:': '以下の理由でダウンロードできません:', 'uncheck all': '全ての選択を解除', 'Uninstall': 'アプリ削除', 'update all languages': '全ての言語を更新', 'Upload a package:': 'パッケージをアップロード:', 'Upload and install packed application': 'パッケージのアップロードとインストール', 'upload file:': 'ファイルをアップロード:', 'upload plugin file:': 'プラグインファイルをアップロード:', 'upload': 'アップロード', 'user': 'ユーザー', 'variables': '変数', 'Version': 'バージョン', 'Versioning': 'バージョン管理', 'Views': 'ビュー', 'views': 'ビュー', 'Web Framework': 'Web Framework', 'web2py is up to date': 'web2pyは最新です', 'web2py Recent Tweets': '最近のweb2pyTweets', 'YES': 'はい', } web2py-1.99.7.orig/applications/admin/cache/0000755000175000017500000000000011724764270017305 5ustar josejoseweb2py-1.99.7.orig/applications/admin/static/0000755000175000017500000000000011724764235017532 5ustar josejoseweb2py-1.99.7.orig/applications/admin/static/plugin_multiselect/0000755000175000017500000000000011724764235023442 5ustar josejoseweb2py-1.99.7.orig/applications/admin/static/plugin_multiselect/jquery.multiselect.js0000755000175000017500000001521411724764235027656 0ustar josejose/* * jQuery MultiSelect Plugin 0.6 * Copyright (c) 2010 Eric Hynds * * http://www.erichynds.com/jquery/jquery-multiselect-plugin-with-themeroller-support/ * Inspired by Cory S.N. LaViska's implementation, A Beautiful Site (http://abeautifulsite.net/) 2009 * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ (function(f){f.fn.multiSelect=function(i){i=f.extend({},f.fn.multiSelect.defaults,i);return this.each(function(){return new w(this,i)})};var x=0,w=function(i,a){var g=$original=f(i),e,l,k,h=[],s=[];l=g.is(":disabled");var t=i.id||"ui-multiselect-"+x++;h.push('');h.push('');h.push('
    ');if(a.showHeader){h.push('
    ');h.push('");h.push("
    ")}h.push('
      ');l&&g.removeAttr("disabled");g.find("option").each(function(b){var c=f(this),d=c.html(),m=this.value;b=this.id||"ui-multiselect-"+t+"-option-"+b;var j=c.parent(),n=j.is("optgroup"),o=c.is(":disabled"),u=["ui-corner-all"];if(n){j=j.attr("label");if(f.inArray(j, s)===-1){h.push('
    • '+j+"
    • ");s.push(j)}}if(m.length>0){o&&u.push("ui-state-disabled");h.push('
    • ');h.push('
    • ")}});h.push("
    "); g=g.after(h.join("")).next("a.ui-multiselect");e=g.next("div.ui-multiselect-options");l=e.find("div.ui-multiselect-header");k=e.find("label").not(".ui-state-disabled");var v=g.find("span.ui-icon").outerWidth(),p=$original.outerWidth(),q=p+v;if(/\d/.test(a.minWidth)&&q0&&d<=a.selectedList?c.map(function(){return this.title}).get().join(", "):a.selectedText.replace("#",d).replace("#",b.length);g.find("input").val(d);return d};g.bind({click:function(){e.trigger("toggle")}, keypress:function(b){switch(b.keyCode){case 27:case 38:e.trigger("close");break;case 40:case 0:e.trigger("toggle");break}},mouseenter:function(){g.hasClass("ui-state-disabled")||f(this).addClass("ui-state-hover")},mouseleave:function(){f(this).removeClass("ui-state-hover")},focus:function(){g.hasClass("ui-state-disabled")||f(this).addClass("ui-state-focus")},blur:function(){f(this).removeClass("ui-state-focus")}});e.bind({close:function(b,c){c=c||false;if(c===true)f("div.ui-multiselect-options").filter(":visible").fadeOut(a.fadeSpeed).prev("a.ui-multiselect").removeClass("ui-state-active").trigger("mouseout"); else{g.removeClass("ui-state-active").trigger("mouseout");e.fadeOut(a.fadeSpeed)}},open:function(b,c){if(!g.hasClass("ui-state-disabled")){var d=g.position(),m=e.find("ul:last"),j,n;g.addClass("ui-state-active");if(c||typeof c==="undefined")e.trigger("close",[true]);j=a.position==="middle"?d.top+g.height()/2-e.outerHeight()/2:a.position==="top"?d.top-e.outerHeight():d.top+g.outerHeight();n=g.width()-parseInt(e.css("padding-left"),10)-parseInt(e.css("padding-right"),10);k.filter("label:first").trigger("mouseenter").trigger("focus"); e.css({position:"absolute",top:j+"px",left:d.left+"px",width:n+"px"}).show();m.scrollTop(0);a.maxHeight&&m.css("height",a.maxHeight);a.onOpen.call(e[0])}},toggle:function(){e.trigger(f(this).is(":hidden")?"open":"close")},traverse:function(b,c,d){b=f(c);d=d===38||d===37?true:false;b=b.parent()[d?"prevAll":"nextAll"]("li:not(.ui-multiselect-disabled, .ui-multiselect-optgroup-label)")[d?"last":"first"]();if(b.length)b.find("label").trigger("mouseenter");else{b=e.find("ul:last");e.find("label")[d?"last": "first"]().trigger("mouseover");b.scrollTop(d?b.height():0)}},toggleChecked:function(b,c,d){(d&&d.length?d:k.find("input")).not(":disable d").attr("checked",c);r()}}).find("li.ui-multiselect-optgroup-label a").click(function(b){var c=f(this).parent().nextUntil("li.ui-multiselect-optgroup-label").find("input");e.trigger("toggleChecked",[c.filter(":checked").length===c.length?false:true,c]);a.onOptgroupToggle.call(this,c.get());b.preventDefault()});k.bind({mouseenter:function(){k.removeClass("ui-state-hover"); f(this).addClass("ui-state-hover").find("input").focus()},keyup:function(b){switch(b.keyCode){case 27:e.trigger("close");break;case 38:case 40:case 37:case 39:e.trigger("traverse",[this,b.keyCode]);break;case 13:b.preventDefault();f(this).click();break}}}).find("input").bind("click",function(){a.onCheck.call(this);r()});$original.remove();f.fn.bgiframe&&e.bgiframe();a.state==="open"&&e.trigger("open",[false]);g.find("input")[0].defaultValue=r();return g};f(document).bind("click",function(i){i=f(i.target); !i.closest("div.ui-multiselect-options").length&&!i.parent().hasClass("ui-multiselect")&&f("div.ui-multiselect-options").trigger("close",[true])});f.fn.multiSelect.defaults={showHeader:true,maxHeight:175,minWidth:215,checkAllText:"Check all",unCheckAllText:"Uncheck all",noneSelectedText:"Select options",selectedText:"# selected",selectedList:0,position:"bottom",shadow:false,fadeSpeed:200,disabled:false,state:"closed",multiple:true,onCheck:function(){},onOpen:function(){},onCheckAll:function(){},onUncheckAll:function(){}, onOptgroupToggle:function(){}}})(jQuery); web2py-1.99.7.orig/applications/admin/static/plugin_multiselect/start.js0000644000175000017500000000013011724764235025127 0ustar josejosejQuery(document).ready(function(){jQuery('[multiple]').multiSelect({maxHeight:200});}); web2py-1.99.7.orig/applications/admin/static/plugin_multiselect/jquery.dimensions.js0000755000175000017500000000430011724764235027466 0ustar josejose/* Copyright (c) 2007 Paul Bakaus (paul.bakaus@googlemail.com) and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net) * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. * * $LastChangedDate: 2007-12-20 08:43:48 -0600 (Thu, 20 Dec 2007) $ * $Rev: 4257 $ * * Version: 1.2 * * Requires: jQuery 1.2+ */ eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(5($){$.19={P:\'1.2\'};$.u([\'j\',\'w\'],5(i,d){$.q[\'O\'+d]=5(){p(!3[0])6;g a=d==\'j\'?\'s\':\'m\',e=d==\'j\'?\'D\':\'C\';6 3.B(\':y\')?3[0][\'L\'+d]:4(3,d.x())+4(3,\'n\'+a)+4(3,\'n\'+e)};$.q[\'I\'+d]=5(b){p(!3[0])6;g c=d==\'j\'?\'s\':\'m\',e=d==\'j\'?\'D\':\'C\';b=$.F({t:Z},b||{});g a=3.B(\':y\')?3[0][\'8\'+d]:4(3,d.x())+4(3,\'E\'+c+\'w\')+4(3,\'E\'+e+\'w\')+4(3,\'n\'+c)+4(3,\'n\'+e);6 a+(b.t?(4(3,\'t\'+c)+4(3,\'t\'+e)):0)}});$.u([\'m\',\'s\'],5(i,b){$.q[\'l\'+b]=5(a){p(!3[0])6;6 a!=W?3.u(5(){3==h||3==r?h.V(b==\'m\'?a:$(h)[\'U\'](),b==\'s\'?a:$(h)[\'T\']()):3[\'l\'+b]=a}):3[0]==h||3[0]==r?S[(b==\'m\'?\'R\':\'Q\')]||$.N&&r.M[\'l\'+b]||r.A[\'l\'+b]:3[0][\'l\'+b]}});$.q.F({z:5(){g a=0,f=0,o=3[0],8,9,7,v;p(o){7=3.7();8=3.8();9=7.8();8.f-=4(o,\'K\');8.k-=4(o,\'J\');9.f+=4(7,\'H\');9.k+=4(7,\'Y\');v={f:8.f-9.f,k:8.k-9.k}}6 v},7:5(){g a=3[0].7;G(a&&(!/^A|10$/i.16(a.15)&&$.14(a,\'z\')==\'13\'))a=a.7;6 $(a)}});5 4(a,b){6 12($.11(a.17?a[0]:a,b,18))||0}})(X);',62,72,'|||this|num|function|return|offsetParent|offset|parentOffset|||||borr|top|var|window||Height|left|scroll|Left|padding|elem|if|fn|document|Top|margin|each|results|Width|toLowerCase|visible|position|body|is|Right|Bottom|border|extend|while|borderTopWidth|outer|marginLeft|marginTop|client|documentElement|boxModel|inner|version|pageYOffset|pageXOffset|self|scrollTop|scrollLeft|scrollTo|undefined|jQuery|borderLeftWidth|false|html|curCSS|parseInt|static|css|tagName|test|jquery|true|dimensions'.split('|'),0,{})) web2py-1.99.7.orig/applications/admin/static/plugin_multiselect/jquery.multiselect.css0000755000175000017500000000424411724764235030033 0ustar josejose.ui-multiselect { font-weight:normal !important; display:-moz-inline-block; display:inline-block; cursor:default; text-decoration:none !important; padding:0 } .ui-multiselect input { float:left; padding:3px 0 3px 6px; margin:0; border:none !important /* important fixes bug when inside ui-widget-content */; cursor:default; background:transparent } .ui-multiselect span { float:right; margin-top:-18px; } .ui-multiselect-header { margin-bottom:3px; padding:3px 0 3px 6px } .ui-multiselect-header ul { font-size:0.9em } .ui-multiselect-header ul li { float:left; padding:0 10px 0 0 } .ui-multiselect-header a { text-decoration:none } .ui-multiselect-header a:hover { text-decoration:underline } .ui-multiselect-header .ui-icon { float:left } .ui-multiselect-header li.ui-multiselect-close { float:right; text-align:right; padding-right:0 } .ui-multiselect-options { display:none; padding:3px; position:relative; z-index:10000; background: white; border: 1px solid #666666;} .ui-multiselect-checkboxes { position:relative /* fixes bug in IE6/7 */; overflow-y:scroll; margin-left:0; width:100%; } .ui-multiselect-checkboxes label { cursor:default; display:block; border:1px solid transparent; padding:3px } .ui-multiselect-checkboxes label input { position:relative; top:1px; right:2px; } .ui-multiselect-checkboxes li { clear:both; font-size:0.9em; padding-right:3px } .ui-multiselect-checkboxes li.ui-multiselect-optgroup-label { text-align:center; font-weight:bold; border-bottom:1px solid } .ui-multiselect-checkboxes li.ui-multiselect-optgroup-label a { display:block; padding:3px; margin:1px 0; text-decoration:none } /* remove label borders in IE6 because IE6 does not support transparency */ * html .ui-multiselect-checkboxes label { border:none } /* shadow effect */ .ui-multiselect-shadow { box-shadow:0 0 10px #777; -moz-box-shadow:0 0 10px #777; -webkit-box-shadow:0 0 10px #777; -ms-filter: "progid:DXImageTransform.Microsoft.Glow(color=#666666,strength=3) progid:DXImageTransform.Microsoft.Shadow(color=#777777,direction=135,strength=3)"; filter: progid:DXImageTransform.Microsoft.Glow(color=#666666,strength=3) progid:DXImageTransform.Microsoft.Shadow(color=#777777,direction=135,strength=3); } web2py-1.99.7.orig/applications/admin/static/eamy/0000755000175000017500000000000011724764235020465 5ustar josejoseweb2py-1.99.7.orig/applications/admin/static/eamy/bundle_markup.js0000644000175000017500000004406111724764235023660 0ustar josejose/* * eAmy.Offline - Amy Editor embedded for offline use. * http://www.april-child.com/amy * * Published under MIT License. * Copyright (c) 2007-2008 Petr Krontorád, April-Child.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * This file is auto-generated from original Fry Framework and Amy Editor sources.. */ // Generated from theme definition file. $class('ac.chap.theme.EAmy < ac.chap.Theme'); ac.chap.theme.EAmy.prototype.initDefinition = function() { // $call(this, 'ac.chap.Theme.initDefinition');this.cssId = 'black'; //this.background = '#072240'; //this.textColor = '#DFEFFF'; //this.caretColor = 'lime'; //this.caretRowStyleActive = '#041629'; //this.selectionStyle = '#86553b'; //this.colorScheme[ac.chap.TOKEN_MULTIROW_COMMENT] = 'color:#0084FF;font-style:italic'; //this.colorScheme[ac.chap.TOKEN_SINGLEROW_COMMENT] = 'color:#0084FF;font-style:italic'; //this.colorScheme[ac.chap.TOKEN_SINGLE_QUOTED] = 'color:#00DF00'; //this.colorScheme[ac.chap.TOKEN_DOUBLE_QUOTED] = 'color:#00DF00'; //this.colorScheme[ac.chap.CHUNK_KEYWORD] = 'color:#FF9D00'; //this.colorScheme[ac.chap.CHUNK_NUMBER] = 'color:#FF5B8C'; //this.colorScheme[ac.chap.CHUNK_OPERATOR] = 'color:#FF9D00;'; //this.colorScheme[ac.chap.CHUNK_PARENTHESIS] = 'color:#FFF177'; //this.colorScheme[ac.chap.CHUNK_KEYWORD_CUSTOM] = 'color:#54FFB8'; //this.colorScheme[ac.chap.CHUNK_FUNCTION_NAME] = 'color:#FFE000'; //this.colorScheme[ac.chap.CHUNK_LIBRARY] = 'color:#71E5B6'; //this.colorScheme[ac.chap.CHUNK_LIBRARY_CUSTOM] = 'color:#FF78E5'; $call(this, 'ac.chap.Theme.initDefinition');this.cssId = 'twilight'; this.background = '#141414'; this.textColor = '#F8F8F8'; this.caretColor = '#A7A7A7'; this.caretRowStyleActive = '#1B1B1B'; this.selectionStyle = '#3C4043'; this.colorScheme[ac.chap.TOKEN_MULTIROW_COMMENT] = 'color:#605A60;font-style:italic'; this.colorScheme[ac.chap.TOKEN_SINGLEROW_COMMENT] = 'color:#605A60;font-style:italic'; this.colorScheme[ac.chap.TOKEN_SINGLE_QUOTED] = 'color:#8B9F67'; this.colorScheme[ac.chap.TOKEN_DOUBLE_QUOTED] = 'color:#D4F29E'; this.colorScheme[ac.chap.CHUNK_KEYWORD] = 'color:#D2A964'; this.colorScheme[ac.chap.CHUNK_NUMBER] = 'color:#DE6848'; this.colorScheme[ac.chap.CHUNK_OPERATOR] = 'color:#EFC25A;'; this.colorScheme[ac.chap.CHUNK_PARENTHESIS] = 'color:#ABC4DC'; this.colorScheme[ac.chap.CHUNK_KEYWORD_CUSTOM] = 'color:#A0849E'; this.colorScheme[ac.chap.CHUNK_FUNCTION_NAME] = 'color:#DAD280'; this.colorScheme[ac.chap.CHUNK_LIBRARY] = 'color:#7286A8'; this.colorScheme[ac.chap.CHUNK_LIBRARY_CUSTOM] = 'color:#A55C29'; } // Generated from bundle keymap definition file. ac.chap.KeyMap.prototype.initDefinition = function() { var _ = '\n'; this.compile (""+_+ "KEY: 0" +_+ " insert(character:true)" +_+ "KEY: -37" +_+ " caret(move:'left')" +_+ "KEY: -37+shift" +_+ " caret(move:'left')" +_+ " selection(add:true)" +_+ "KEY: -37+ctrl" +_+ " caret(move:'prev_regexp', re:'[^|._A-Z ,|(|);]*$')" +_+ "KEY: -37+alt" +_+ " caret(move:'prev_word')" +_+ "KEY: -37+ctrl+shift" +_+ " caret(move:'prev_regexp', re:'[^|._A-Z ,|(|);]*$')" +_+ " selection(add:true)" +_+ "KEY: -37+alt+shift" +_+ " caret(move:'prev_word')" +_+ " selection(add:true)" +_+ "KEY: -37+meta" +_+ " caret(move:'row_start')" +_+ "KEY: -37+meta+shift" +_+ " caret(move:'row_start')" +_+ " selection(add:true)" +_+ "KEY: -39" +_+ " caret(move:'right')" +_+ "KEY: -39+shift" +_+ " caret(move:'right')" +_+ " selection(add:true)" +_+ "KEY: -39+ctrl" +_+ " caret(move:'next_regexp', re:'^[^|._A-Z ,|(|);]*')" +_+ "KEY: -39+alt" +_+ " caret(move:'next_word')" +_+ "KEY: -39+ctrl+shift" +_+ " caret(move:'next_regexp', re:'^[^|._A-Z ,|(|);]*')" +_+ " selection(add:true)" +_+ "KEY: -39+alt+shift" +_+ " caret(move:'next_word')" +_+ " selection(add:true)" +_+ "KEY: -39+meta" +_+ " caret(move:'row_end')" +_+ "KEY: -39+meta+shift" +_+ " caret(move:'row_end')" +_+ " selection(add:true)" +_+ "KEY: -38" +_+ " caret(move:'up')" +_+ "KEY: -38+shift" +_+ " caret(move:'up')" +_+ " selection(add:true)" +_+ "KEY: -40" +_+ " caret(move:'down')" +_+ "KEY: -40+shift" +_+ " caret(move:'down')" +_+ " selection(add:true)" +_+ "KEY: -13" +_+ " insert(row:true)" +_+ "KEY: -8" +_+ " delete(character:true)" +_+ "KEY: -46" +_+ " delete(character:false)" +_+ "KEY: 75+ctrl+shift" +_+ " delete(row:true)" +_+ "KEY: -27" +_+ " custom(action:'WordComplete', direction:true)" +_+ "KEY: -27+shift" +_+ " custom(action:'WordComplete', direction:false)" +_+ "KEY: -9" +_+ " custom(action:'SnippetComplete')" +_+ "KEY: 123" +_+ " custom(action:'AutoComplete', use_selection:true, text:'}')" +_+ "KEY: 34" +_+ " custom(action:'AutoComplete', use_selection:true, text:'\"')" +_+ "KEY: 91" +_+ " custom(action:'AutoComplete', use_selection:true, text:']')" +_+ "KEY: 40" +_+ " custom(action:'AutoComplete', use_selection:true, text:')')" +_+ "KEY: -36" +_+ " caret(move:'doc_start')" +_+ "KEY: -36+shift" +_+ " caret(move:'doc_start')" +_+ " selection(add:true)" +_+ "KEY: -35" +_+ " caret(move:'doc_end')" +_+ "KEY: -35+shift" +_+ " caret(move:'doc_end')" +_+ " selection(add:true)" +_+ "KEY: -34+meta" +_+ " caret(move:'page_down')" +_+ "KEY: -34+meta+shift" +_+ " caret(move:'page_down')" +_+ " selection(add:true)" +_+ "KEY: -33+meta" +_+ " caret(move:'page_up')" +_+ "KEY: -33+meta+shift" +_+ " caret(move:'page_down')" +_+ " selection(add:true)" +_+ "KEY: 99+meta" +_+ " clipboard(copy:true)" +_+ "KEY: 120+meta" +_+ " clipboard(cut:true)" +_+ "KEY: 122+meta" +_+ " undo()" +_+ "KEY: 90+meta+shift" +_+ " redo()" +_+ "KEY: 97+meta" +_+ " selection(all:true)" +_+ "KEY: 97+ctrl" +_+ " selection(all:true)" +_+ "KEY: -113" +_+ " custom(action:'GoToBookmark', direction:1)" +_+ "KEY: -113+shift" +_+ " custom(action:'GoToBookmark', direction:-1)" +_+ "KEY: -113+meta" +_+ " custom(action:'ToggleBookmark')" +_+ "KEY: 91+meta" +_+ " custom(action:'Indent', direction:'left')" +_+ "KEY: 93+meta" +_+ " custom(action:'Indent', direction:'right')" +_+ "KEY: 47+meta" +_+ " custom(action:'Comment')" +_+ "KEY: 43+meta" +_+ " custom(action:'RuntimeOption', key:'font.size', value:'bigger')" +_+ "KEY: 45+meta" +_+ " custom(action:'RuntimeOption', key:'font.size', value:'smaller')" +_+ "KEY: 101+meta" +_+ " custom(action:'SetSearchKeyword')" +_+ "KEY: 103+meta" +_+ " custom(action:'SearchKeyword', direction:'down')" +_+ "KEY: 71+shift+meta" +_+ " custom(action:'SearchKeyword', direction:'up')" +_+ "KEY: 102+ctrl" +_+ " custom(action:'SearchInteractive')" +_+ "KEY: 83+ctrl+shift" +_+ " custom(action:'SearchInteractive')" +_+ "KEY: 102+meta" +_+ " custom(action:'SearchInteractive')" +_+ "KEY: -13" +_+ " custom(action:'SmartIndent', split_line:true, indent_tab_when_starts:'class module def if else unless rescue ensure while do __class__')" +_+ "KEY: -13+meta" +_+ " custom(action:'SmartIndent', split_line:false, indent_tab_when_starts:'class module def if else unless rescue ensure while do __class__')" +_+ "KEY: 39" +_+ " custom(action:'AutoComplete', use_selection:true, text:'\\'')" )}; $class('ac.chap.lang.EAmy < ac.chap.Language'); ac.chap.lang.EAmy.prototype.initDefinition = function() { $call(this, 'ac.chap.Language.initDefinition'); this.singleQuoteStringMarker = "'"; this.singleQuoteStringMarkerException = "\\"; this.doubleQuoteStringMarker = "\""; this.doubleQuoteStringMarkerException = "\\" this.wordDelimiter = /[\w\.\d]/; this.indentIgnoreMarker = /[\.]/; this.foldingStartMarkers = [/^\s*<(div)\b.*>/i, /^\s*<(ul)\b.*>/i]; this.foldingParityMarkers = [/^\s*<(div)\b.*>/i, /^\s*<(ul)\b.*>/i]; this.foldingStopMarkers = [/^\s*<\/(div)>/i, /^\s*<\/(ul)>/i]; this.singleRowCommentStartMarkers = []; this.multiRowCommentStartMarker = ""; this.chunkRules.push([/(([^\w]|^)(\d{1,}[\d\.Ee]*)([^w]|$))/i, 3, ac.chap.CHUNK_NUMBER]) this.chunkRules.push([/(\+|\-|\*|\/|\=|\!|\^|\%|\||\&|\<|\>)/i, 0, ac.chap.CHUNK_OPERATOR]) this.chunkRules.push([/(\(|\)|\[|\]|\{|\})/i, 0, ac.chap.CHUNK_PARENTHESIS]) this.chunkRules.push([/((<|<\/)([\w-_\:]*)([ >]))/i, 3, ac.chap.CHUNK_KEYWORD]) this.chunkRules.push([/(([ \t])([\w-_\:]*)(=$))/i, 3, ac.chap.CHUNK_KEYWORD_CUSTOM]) this.chunkRules.push([/(([^\w]|^)(!DOCTYPE)([^\w]|$))/i, 3, ac.chap.CHUNK_LIBRARY]) this.chunkRules.push([/(([^\w]|^)(\d{1,}[\d\.Ee]*)([^w]|$))/i, 3, ac.chap.CHUNK_NUMBER]) this.chunkRules.push([/(\+|\-|\*|\/|\=|\!|\^|\%|\||\&|\<|\>)/i, 0, ac.chap.CHUNK_OPERATOR]) this.chunkRules.push([/(\(|\)|\[|\]|\{|\})/i, 0, ac.chap.CHUNK_PARENTHESIS]) this.chunkRules.push([/((<|<\/)([\w-_\:]*)([ >]))/i, 3, ac.chap.CHUNK_KEYWORD]) this.chunkRules.push([/(([ \t])([\w-_\:]*)(=$))/i, 3, ac.chap.CHUNK_KEYWORD_CUSTOM]) this.chunkRules.push([/(([^\w]|^)(!DOCTYPE)([^\w]|$))/i, 3, ac.chap.CHUNK_LIBRARY]) } var snippet = {}; snippet = {tab_activation: '', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: 'ie6', code: '$0'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'iegte7', code: '$0'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'ie5', code: '$0'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'ie', code: '$0'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'ienot', code: '${1:${AMY_SELECTED_TEXT: IE Conditional Comment: NOT Internet Explorer }}$0'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'ielte6', code: '$0'}; eamy.snippets.push(snippet); snippet = {tab_activation: '', code: '$0'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'ielt6', code: '$0'}; eamy.snippets.push(snippet); snippet = {tab_activation: '', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: '', code: '${0:${AMY_SELECTED_TEXT/\A(.*)<\/em>\z|.*/(?1:$1:$0<\/em>)/m}}'}; eamy.snippets.push(snippet); snippet = {tab_activation: '', code: '${0:${AMY_SELECTED_TEXT/\A(.*)<\/strong>\z|.*/(?1:$1:$0<\/strong>)/m}}'}; eamy.snippets.push(snippet); snippet = {tab_activation: '', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: '', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: 'left', code: '←'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'backtab', code: '⇤'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'enter', code: '⌅'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'arrow', code: '→'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'option', code: '⌥'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'shift', code: '⇧'}; eamy.snippets.push(snippet); snippet = {tab_activation: '', code: ' '}; eamy.snippets.push(snippet); snippet = {tab_activation: 'delete', code: '⌦'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'backspace', code: '⌫'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'escape', code: '⎋'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'tab', code: '⇥'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'up', code: '↑'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'control', code: '⌃'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'return', code: '↩'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'down', code: '↓'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'command', code: '⌘'}; eamy.snippets.push(snippet); snippet = {tab_activation: '', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: 'doctype', code: '\n'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'doctype', code: '\n'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'doctypexf', code: '\n'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'doctypext', code: '\n'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'doctypex', code: '\n'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'doctypexs', code: '\n'}; eamy.snippets.push(snippet); snippet = {tab_activation: 't', code: '<{${1:tag_name}}>$0'}; eamy.snippets.push(snippet); snippet = {tab_activation: '', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: '', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: 'body', code: '\n $0\n'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'textarea', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: 'div', code: '\n ${0:$AMY_SELECTED_TEXT}\n'}; eamy.snippets.push(snippet); snippet = {tab_activation: '', code: '
    '}; eamy.snippets.push(snippet); snippet = {tab_activation: 'title', code: '${1:${AMY_FILENAME/((.+)\..*)?/(?2:$2:Page Title)/}}'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'movie', code: '\n \n \n \n \n'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'input', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: 'head', code: '\n \n ${1:${AMY_FILENAME/((.+)\..*)?/(?2:$2:Page Title)/}}\n $0\n'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'meta', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: 'h1', code: '

    ${1:$AMY_SELECTED_TEXT}

    '}; eamy.snippets.push(snippet); snippet = {tab_activation: 'form', code: '
    \n $0\n\n

    \n
    '}; eamy.snippets.push(snippet); snippet = {tab_activation: 'link', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: 'style', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: 'table', code: '\n \n \n
    ${5:Header}
    ${0:Data}
    '}; eamy.snippets.push(snippet); snippet = {tab_activation: 'base', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: 'scriptsrc', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: 'mailto', code: '${3:email me}'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'script', code: ''}; eamy.snippets.push(snippet); snippet = {tab_activation: 'c', code: 'class="$1"'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'i', code: 'id="$1"'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'p', code: '{{pass}}'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'ex', code: '{{extend \'${1:layout.html}\'}}'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'for', code: '{{for ${1:bar} in ${2:foo}:}}\n $0\n{{pass}}'}; eamy.snippets.push(snippet); snippet = {tab_activation: 'if', code: '{{if ${1:foo} ${2:==/!=/=>/=/<} ${3:bar}:}}\n $0\n{{pass}}'}; eamy.snippets.push(snippet); snippet = {tab_activation: '=', code: '{{=$0}}'}; eamy.snippets.push(snippet); web2py-1.99.7.orig/applications/admin/static/eamy/style.css0000644000175000017500000000213511724764235022340 0ustar josejose/*.acw-chap pre, .acw-chap pre span, span.acw-char-check, .acw-chap .selection-area div { font:11px 'Courier', monospaced; line-height:11px; margin:0; padding:0; border:0; } */ .acw-chap .wrapped-row { background-image:url('chap-wrapped-row.gif'); background-repeat:no-repeat; background-position:25px 4px; } .acw-chap .sidebar { background-image:url('chap-bg-sidebar.gif'); line-height:11px; } /*.acw-chap .sidebar .row-number { text-align:right; font-size:9px; font-family:'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; color:#999; } */ .acw-chap .folding-expand-inner { width:14px; height:10px; margin-left:2px; display:inline; background-image:url('chap-folding-expand-inner.gif'); } .acw-chap .folding-expand { background-image:url('chap-folding-expand.gif'); } .acw-chap .folding-start { background-image:url('chap-folding-start.gif'); } .acw-chap .folding-stop { background-image:url('chap-folding-stop.gif'); } .acw-chap .bookmark-default { background-image:url('chap-bookmark-default.gif'); } .acw-chap .void { background-image:url('void.gif'); } web2py-1.99.7.orig/applications/admin/static/eamy/chap-folding-expand-inner.gif0000755000175000017500000000016711724764235026104 0ustar josejoseGIF89a º̴!, $IH8kaxؙɪ <@kIP;web2py-1.99.7.orig/applications/admin/static/eamy/chap-folding-start.gif0000755000175000017500000000031411724764235024643 0ustar josejoseGIF89a 3صڸ֫ȶԼᳳ!, I |p@ $4("@g@$ND)%)ZQoC|œ.͢&aN B;web2py-1.99.7.orig/applications/admin/static/eamy/eamy.js0000644000175000017500000064507411724764235021776 0ustar josejose/* * eAmy.Offline - Amy Editor embedded for offline use. * http://www.april-child.com/amy * * Published under MIT License. * Copyright (c) 2007-2008 Petr Krontorád, April-Child.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * This file is auto-generated from original Fry Framework and Amy Editor sources.. */ /* * AC Fry - JavaScript Framework v1.0 * (c)2006 Petr Krontorad, April-Child.com * Portions of code based on WHOA Bender Framework, (c)2002-2005 Petr Krontorad, WHOA Group. * http://www.april-child.com. All rights reserved. * See the license/license.txt for additional details regarding the license. * Special thanks to Matt Groening and David X. Cohen for all the robots. */ /* Reserving global `fry` object */ var fry = { version:1.0, __production_mode:false }; // String prototype enhancements String.prototype.camelize = function() { return this.replace( /([-_].)/g, function(){ return arguments[0].substr(1).toUpperCase();} ); } String.prototype.decamelize = function() { return this.replace( /([A-Z])/g, function(){ return '-'+arguments[0].toLowerCase();} ); } String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, '' ); } String.prototype.stripLines = function() { return this.replace( /\n/g, '' ); } String.prototype.stripMarkup = function() { return this.replace( /<(.|\n)+?>/g, '' ); } String.prototype.replaceMarkup = function( charRep ) { return this.replace( /(<(.|\n)+?>)/g, function() { var t = ''; for ( var i=0; i/g, '>' ).replace( /' ).replace( /&/g, '&' ); } String.prototype.surround = function(t, side) { side = side || 3; return (1==1&side?t:'')+this+(2==2&side?t:''); } String.prototype.surroundTag = function(t) { return '<'+t+'>'+this+''; } // example of use: var pattern = '? is ?; alert(pattern.embed('Decin', 'sunny')); pattern = '@city is @weather'; alert(pattern.embed({weather:'cloudy', city:'Decin'})) String.prototype.embed = function() { var t = this; if ( 1 == arguments.length && 'object' == typeof arguments[0] ) { // named placeholders for ( var i in arguments[0] ) { eval('var re=/@'+i+'/g;'); t = t.replace(re, arguments[0][i]); } } else { // anonymous placeholders `?` for ( var i=0; i opacity ) { opacity = 0; } if ( 1 < opacity ) { opacity = 1; } if ( $__tune.isIE ) { node.style.filter = 'alpha(opacity='+(100*opacity)+')'; } else { node.style.opacity = opacity; node.style.MozOpacity = opacity; } }, getPageScrollPosition:function() { var d = document.documentElement; if ( d && d.scrollTop) { return [d.scrollLeft, d.scrollTop]; } else if (document.body) { return [document.body.scrollLeft, document.body.scrollTop]; } else { return [0, 0]; } } }, event: { get:function(evt, type) { if ( $notset(evt.target) ) { evt.target = evt.srcElement; evt.stopPropagation = function() { window.event.cancelBubble = true; }; } evt.stop = function() { evt.stopPropagation(); evt.stopped = true; } evt.$ = $(evt.target); if ( $notset(evt.pageX) ) { evt.pageX = evt.clientX + document.body.scrollLeft; evt.pageY = evt.clientY + document.body.scrollTop; } evt.getOffsetX = function() { if ( $notset(evt.offsetX) ) { var pos = evt.$.abspos(); evt.offsetX = evt.pageX - pos.x; evt.offsetY = evt.pageY - pos.y; } return evt.offsetX; } evt.getOffsetY = function() { if ( $notset(evt.offsetY) ) { var pos = evt.$.abspos(); evt.offsetX = evt.pageX - pos.x; evt.offsetY = evt.pageY - pos.y; } return evt.offsetY; } evt.isAnyControlKeyPressed = function() { return evt.metaKey||evt.ctrlKey||evt.altKey||evt.shiftKey; } evt.KEY_ESCAPE = 27; evt.KEY_ENTER = 13; evt.KEY_ARR_RIGHT = 39; evt.KEY_ARR_LEFT = 37; evt.KEY_ARR_UP = 38; evt.KEY_ARR_DOWN = 40; return evt; }, addListener:function(node, type, listener) { if ( $__tune.isIE && node.attachEvent ) { node.attachEvent('on'+type, listener); } else { node.addEventListener(type, listener, false); } }, removeListener:function(node, type, listener) { if ( node.detachEvent ) { node.detachEvent('on'+type, listener); node['on'+type] = null; } else if ( node.removeEventListener ) { node.removeEventListener(type, listener, false); } } }, behavior: { disablePageScroll:function() { if ( $notset($__tune.__prop.page_scroll) ) { $__tune.__prop.page_scroll = [$().s().overflow, $().ga('scroll')]; } $().s('overflow:hidden').sa('scroll', 'no'); }, enablePageScroll:function() { $().s('overflow:auto').sa('scroll', 'yes'); }, disableCombos:function() { $().g('select', function(node) { node.sa('__dis_combo', node.s().visibility); $(node).v(false); }); }, enableCombos:function() { $().g('select', function(node) { node.s({visibility:node.ga('__dis_combo') || 'visible'}); }); }, clearSelection:function() { try { if ( window.getSelection ) { if ( $__tune.isSafari ) { window.getSelection().collapse(); } else { window.getSelection().removeAllRanges(); } } else { if ( document.selection ) { if ( document.selection.empty ) { document.selection.empty(); } else { if ( document.selection.clear ) { document.selection.clear(); } } } } } catch (e) {} }, makeBodyUnscrollable:function() { $().s('position:fixed').w(fry.ui.info.page.width); } }, ui: { scrollbarWidth:-1!=navigator.appVersion.indexOf('intosh')?15:17 }, selection: { setRange:function(el, selectionStart, selectionEnd) { if (el.setSelectionRange) { el.focus(); el.setSelectionRange(selectionStart, selectionEnd); } else if (el.createTextRange) { var range = el.createTextRange(); range.collapse(true); range.moveEnd('character', selectionEnd); range.moveStart('character', selectionStart); range.select(); } } } } // some browsers masks its presence having Gecko string somewhere inside its userAgent field... $__tune.isGecko = !$__tune.isSafari&&!$__tune.isIE&&-1!=navigator.userAgent.indexOf('ecko'); $__tune.isSafari2 = $__tune.isSafari && -1 != navigator.appVersion.indexOf('Kit/4'); $__tune.isSafari3 = $__tune.isSafari && -1 != navigator.appVersion.indexOf('Kit/5'); // Node manipulations function ACNode(node) { this.$ = node; if ( node ) { node.setAttribute('fryis', '1'); } } // `$$` creates new node ACNode.prototype.$$ = function(tagName) { return $$(tagName); } // *is* - tells whether node is a part of the active DOM tree (that is displayed on page). Node may exist only in memory before appending or after removing when references, in which case node.is() will return false. ACNode.prototype.is = function() { return this.$ && null != this.$.parentNode; } // *i*d ACNode.prototype.i = function(id) { if ( 'undefined' == typeof id ) { return this.$.id||''; } this.$.id = id; return this; } // class *n*ame ACNode.prototype.n = function(n) { if ( 'undefined' == typeof n) { return this.$.className||''; } this.$.className = n; return this; } // *e*vent listener, if called with one argument only, previously registered listeners are removed ACNode.prototype.e = function(t, c, oneUseOnly) { var ser_type_id = 'fryse-'+t; if ( !c ) { if ( null != this.$.getAttribute(ser_type_id) ) { var ser_listeners = this.$.getAttribute(ser_type_id).split(','); // console.log('*E* removing listeners for %s, listeners: %s', t, ser_listeners); for ( var i=0; i h ) { this.$.style.fontSize = '1px'; } return this; } // *s*tyle information - argument can be either "{color:'red', backgroundColor:'blue'}" or "'color:red;background-color:blue'" ACNode.prototype.s = function(s) { if ( 'undefined' == typeof s ) { return this.$.style; } if ( 'object' == typeof s ) { for ( var n in s ) { this.$.style[n] = s[n]; } } else if ( 'string' == typeof s ) { if ( '' != s ) { var styles = s.split(';'); for ( var i=0; idiv>table>tbody>tr>td>` and node at `td` // to return second div you would call `gp('tr/tbody/table/div')` or `tr/table/div:1`, first div could be acquired using `table/div:2` etc. you can use `*` for any node. ACNode.prototype.gp = function(q) { if ( 'string' == typeof q ) { q = q.split('/'); } var fq = []; for ( var i=0; i to && to>=from ) { self.clearInterval(t); } else { c(i, control); if ( control.stopped ) { self.clearInterval(t); } } i++; }, interval); } // $dotimes // ======== // Repeats embedded code n times. /* Usage: $dotimes(20, function(i) { // your code, i is the counter parameter }) */ var $dotimes = function(n, c) { for ( var i=0; i i ) { control.skip(); return; } tr.n(0==i%2 ? 'even' : 'odd'); if ( 20 < i ) { control.stop(); } }) */ var $foreach = function(o, c) { if ( !o ) { c = null; return; } if ( 'undefined' == typeof o.length && 'function' != typeof o.__length ) { c = null; return; } var n = 'function' == typeof o.__length ? o.__length() : o.length; var control = { stopped:false, stop:function() { this.stopped = true; }, skipped:false, skip:function() { this.skipped = true; }, removed:false, remove:function(stopAfterwards) { this.removed = true; this.stopped = true == stopAfterwards; } } // cannot just extend Array.prototype for `item()` method due bug in IE6 iteration mechanism. Some day (>2010 :) this might get fixed and will become obsolete for ( var i=0; i= evt.keyCode) { fry.keyboard.pushKey(evt.keyCode + 32, fry.keyboard.META_KEY); evt.preventDefault(); return true; } } } fry.keyboard.initialized = true; fry.keyboard.start(); } fry.keyboard.start = function() { fry.keyboard.stopped = false; } fry.keyboard.stop = function() { fry.keyboard.stopped = true; } fry.keyboard.disableTextfieldsEditation = function() { fry.keyboard.allowTextfieldsEditation(true); } fry.keyboard.allowTextfieldsEditation = function(disable) { var lst = document.getElementsByTagName('input'); var n = lst.length; for (var i=0; i evt.keyCode)) { // control code mask++; } if (!fry.keyboard.pushKey(code, mask)) { return true; } } evt.preventDefault(); evt.stopPropagation(); return false; } fry.keyboard.paste.ff_mac = function(evt) { fry.keyboard.last_down_evt = null; // catching Command+C, Command+X, it's a FF.mac hack if (evt.metaKey && ((67 == evt.keyCode && 0 == evt.charCode && 67 == evt.which) || (88 == evt.keyCode && 0 == evt.charCode && 88 == evt.which))) { return fry.keyboard.shared.copy(evt); } else { return 86 == evt.keyCode && 0 == evt.charCode && 86 == evt.which && evt.metaKey; } } fry.keyboard.down.ff_mac = function(evt) { return false; } fry.keyboard.press.ff_mac = function(evt) { if (null != fry.keyboard.last_down_evt) { return; } var mask = (evt.altKey ? 2 : 0) + (evt.ctrlKey ? 4 : 0) + (evt.shiftKey ? 8 : 0) + (evt.metaKey ? 16 : 0); if (!evt.charCode || (evt.charCode == evt.keyCode)) { // control code fry.keyboard.pushKey(evt.keyCode, 1 + mask); } else { if (!fry.keyboard.pushKey(evt.charCode, mask)) { return true; } } evt.preventDefault(); evt.stopPropagation(); return false; } fry.keyboard.paste.webkit = function(evt) { if ($__tune.isMac) { return (86 == evt.keyCode && (0 == evt.charCode || 118 == evt.charCode) && evt.metaKey); } else { return (86 == evt.keyCode && (0 == evt.charCode || 118 == evt.charCode) && evt.ctrlKey); } } fry.keyboard.down.webkit = function(evt) { if (0 != evt.keyCode && (48 > evt.keyCode || (111 < evt.keyCode && 128 > evt.keyCode) || 60000 < evt.charCode)) { var mask = (evt.altKey ? 2 : 0) + (evt.ctrlKey ? 4 : 0) + (evt.shiftKey ? 8 : 0) + (evt.metaKey ? 16 : 0); if (!evt.charCode || 111 < evt.keyCode || 32 > evt.charCode || 60000 < evt.charCode) { // control code fry.keyboard.pushKey(evt.keyCode, 1 + mask); } else { if (!fry.keyboard.pushKey(evt.charCode, mask)) { return true; } } evt.preventDefault(); evt.stopPropagation(); fry.keyboard.last_down_evt = null; return false; } fry.keyboard.last_down_evt = evt; return true; } fry.keyboard.press.webkit = function(evt) { if (null != fry.keyboard.last_down_evt) { var mask = (evt.altKey ? 2 : 0) + (evt.ctrlKey ? 4 : 0) + (evt.shiftKey ? 8 : 0) + (evt.metaKey ? 16 : 0); var code = !evt.keyCode ? evt.charCode : evt.keyCode; if (evt.keyCode == evt.charCode && evt.keyCode == fry.keyboard.last_down_evt.charCode && evt.keyCode > 60000) { code = fry.keyboard.last_down_evt.keyCode; } if (evt.keyCode == fry.keyboard.last_down_evt.keyCode && 48 > evt.keyCode) { // control code mask++; } else { var r_mask = fry.keyboard.SHIFT_KEY + fry.keyboard.META_KEY; if (r_mask == (mask & r_mask) && 97 <= code && 122 >= code) { code -= 32; } } if (!fry.keyboard.pushKey(code, mask)) { return true; } } evt.preventDefault(); evt.stopPropagation(); return false; } fry.keyboard.paste.ie = function(evt) { if (evt.ctrlKey && (67 == evt.keyCode || 88 == evt.keyCode)) { // ctrl+c, ctrl+x return fry.keyboard.shared.copy(evt); } else { return false; } } fry.keyboard.down.ie = function(evt) { fry.keyboard.last_down_evt = evt; if (48 > evt.keyCode || (111 < evt.keyCode && 128 > evt.keyCode)) { // control code for IE var mask = 1 + (evt.altKey ? 2 : 0) + (evt.ctrlKey ? 4 : 0) + (evt.shiftKey ? 8 : 0) + (evt.metaKey ? 16 : 0); return !fry.keyboard.pushKey(evt.keyCode, mask) } else { var code = evt.keyCode; // disabling some other keys (A, F, N, R, S, T) if (82 == evt.keyCode || 65 == evt.keyCode || 83 == evt.keyCode || 70 == evt.keyCode || 78 == evt.keyCode || 84 == evt.keyCode) { if (!evt.shiftKey) { code += 32; } var mask = (evt.altKey ? 2 : 0) + (evt.ctrlKey ? 4 : 0) + (evt.shiftKey ? 8 : 0) + (evt.metaKey ? 16 : 0); return !fry.keyboard.pushKey(code, mask); } } return true; } fry.keyboard.press.ie = function(evt) { if (null != fry.keyboard.last_down_evt) { var mask = (evt.altKey ? 2 : 0) + (evt.ctrlKey ? 4 : 0) + (evt.shiftKey ? 8 : 0) + (evt.metaKey ? 16 : 0); return !fry.keyboard.pushKey(evt.keyCode, mask); } return false; } fry.keyboard.paste.opera = function(evt) { return 86 == evt.keyCode && 86 == evt.which && evt.ctrlKey; } fry.keyboard.down.opera = function(evt) { fry.keyboard.last_down_evt = evt; return false; } fry.keyboard.press.opera = function(evt) { var e = fry.keyboard.last_down_evt; var mask = (evt.altKey ? 2 : 0) + (evt.ctrlKey ? 4 : 0) + (evt.shiftKey ? 8 : 0) + (evt.metaKey ? 16 : 0); var prev_mask = (e.altKey ? 2 : 0) + (e.ctrlKey ? 4 : 0) + (e.shiftKey ? 8 : 0) + (e.metaKey ? 16 : 0); if ((evt.keyCode == fry.keyboard.last_down_evt.keyCode || 0 == e.keyCode) && (0 == evt.which || 48 > e.keyCode || 111 < e.keyCode)) { mask++; } if (!fry.keyboard.pushKey(evt.keyCode, mask)) { return true; } evt.preventDefault(); evt.stopPropagation(); return false; } fry.keyboard.addListener = function(listener) { fry.keyboard.listener = listener; } fry.keyboard.removeListener = function(listener) { fry.keyboard.listener = null; } fry.keyboard.pushKey = function(code, mask) { if (32 == code) { mask = mask & 65534; } var was_clipboard_copy = false; var was_clipboard_cut = false; if ($__tune.isMac) { was_clipboard_copy = (99 == code) && (fry.keyboard.META_KEY == (mask & fry.keyboard.META_KEY)); was_clipboard_cut = (120 == code) && (fry.keyboard.META_KEY == (mask & fry.keyboard.META_KEY)); } else { was_clipboard_copy = (1 == code || 99 == code) && (fry.keyboard.CTRL_KEY == (mask & fry.keyboard.CTRL_KEY)); was_clipboard_cut = (24 == code || 120 == code) && (fry.keyboard.CTRL_KEY == (mask & fry.keyboard.CTRL_KEY)); } if (was_clipboard_copy || was_clipboard_cut) { fry.keyboard.prepareClipboard(); fry.keyboard.clipboard.copiedContent = ''; var was_custom_content = false; if (fry.keyboard.listener) { var content = fry.keyboard.listener(0, fry.keyboard.CONTROL_CODE | fry.keyboard.SIG_CLIPBOARD_GET); if ('string' == typeof content) { was_custom_content = true; fry.keyboard.clipboard.copiedContent = content; } } if (was_custom_content) { fry.keyboard.clipboard.node.value = fry.keyboard.clipboard.copiedContent; fry.keyboard.clipboard.node.select(); fry.keyboard.clipboard.node.focus(); } fry.keyboard.pushKey(0, fry.keyboard.CONTROL_CODE | (was_clipboard_cut ? fry.keyboard.CUT : fry.keyboard.COPY)); fry.keyboard.clipboard.content = fry.keyboard.clipboard.copiedContent; // returning false will enforce propagation return !was_custom_content; } if (fry.keyboard.PASTE == (mask & fry.keyboard.PASTE)) { fry.keyboard.clipboard.pastedContent = code; fry.keyboard.clipboard.content = fry.keyboard.clipboard.pastedContent; code = 0; } // filtering out solo-keys Ctrl, Shift, Alt that are triggered by some browsers. if ((17 == code && 5 == (mask & 5)) || (16 == code && 9 == (mask & 9)) || (18 == code && 3 == (mask & 3))) { return true; } // filtering out Command+V on FF.mac if (118 == code && 16 == mask) { return true; } if (fry.keyboard.listener) { // console.info(code); if (13 != code && 0 != (mask & (fry.keyboard.CONTROL_CODE + fry.keyboard.META_KEY + fry.keyboard.CTRL_KEY))) { // some keystroke occured that we really want to know about the listener result, we have to call it immediatelly return fry.keyboard.listener(code, mask); } else { // let's ease the pain of the browser setTimeout('fry.keyboard.listener('+code+','+mask+')', 10); } } else { fry.keyboard.buffer.unshift([code, mask]); } return true; } fry.keyboard.popKey = function() { return fry.keyboard.buffer.pop(); } fry.keyboard.getClipboardContent = function() { return fry.keyboard.clipboard.content; } /*--------*/ var client = {conf:{fry:{backendURL:''}}}; var eamy = { snippets:[], instances:[] }; /* * ac.Chap - Text Editing Component - Core */ if ( 'undefined' == typeof ac ) { var ac = {chap:{}}; } ac.chap = { state: { active:null }, TOKEN_MULTIROW_COMMENT:0, TOKEN_SINGLEROW_COMMENT:1, TOKEN_SINGLE_QUOTED:2, TOKEN_DOUBLE_QUOTED:3, TOKEN_NEWROW:4, TOKEN_WHITESPACE:5, ROWSTATE_NONE:0, ROWSTATE_FOLD_START:1, ROWSTATE_FOLD_STOP:2, ROWSTATE_FOLD_EXPAND:4, ROWSTATE_FOLD_COLLAPSED:8, ROWSTATE_SELECTION:16, ROWSTATE_BOOKMARK:32, CHUNK_KEYWORD:4, CHUNK_NUMBER:5, CHUNK_OPERATOR:6, CHUNK_PARENTHESIS:7, CHUNK_KEYWORD_CUSTOM:8, CHUNK_FUNCTION_NAME:9, CHUNK_LIBRARY:10, CHUNK_LIBRARY_CUSTOM:11, ACTION_CARET:1, ACTION_SELECTION:2, ACTION_INSERT:3, ACTION_UPDATE:4, ACTION_DELETE:5, ACTION_CLIPBOARD:6, ACTION_UNDO:7, ACTION_REDO:8, ACTION_CUSTOM:9, ACTION_RES_REDRAWCARET:1, ACTION_RES_REDRAWTEXT:2, ACTION_RES_SELECTIONCHANGED:4, ACTION_RES_SCROLLTOCARET:8, CKEY_NONE:0, CKEY_ALT:2, CKEY_CTRL:4, CKEY_SHIFT:8, CKEY_META:16, TRANSLOG_TYPE_INSERT:1, TRANSLOG_TYPE_REMOVE:2, ACTION_LISTENER_BEFORE:1, ACTION_LISTENER_AFTER:2, ACTION_LISTENER_BOTH:3 } ac.chap.activeComponent = null; ac.chap.instanceId = 1; ac.chap.getActiveComponent = function() { return ac.chap.activeComponent; } ac.chap.setActiveComponent = function(component) { fry.keyboard.initialize(); if (null != ac.chap.activeComponent) { ac.chap.activeComponent.blur(); } ac.chap.activeComponent = component; if (null != component) { if (ac.widget) { ac.widget.focus(component); } ac.chap.activeComponent.focus(); } else { if (!ac.widget) { fry.keyboard.stop(); } } } ac.chap.route = function(type, windowId, viewIndex, pars) { if ( null == ac.chap.activeComponent ) { return; } if ( 'undefined' == typeof ac.chap.activeComponent.views[viewIndex] ) { return; } switch ( type ) { case 'expand-folding': { ac.chap.activeComponent.expandFolding(pars); } } } ac.chap.caretThread = setInterval(function() { if (null != ac.chap.activeComponent) { ac.chap.activeComponent.showCaret(true, true); } }, 600); $(document.documentElement).e($__tune.isSafari2?'mousedown':'click', function(evt) { var elem = evt.$.$; while ( null != elem && document.documentElement != elem ) { if ( 'true' == elem.getAttribute('chap-view') ) { evt.stop(); return; } elem = elem.parentNode; } ac.chap.setActiveComponent(null); }); ac.chap.keyboardListener = function(code, mask) { if (null == ac.chap.activeComponent) { return; } return ac.chap.activeComponent.standaloneKeyboardListener(code, mask); } if ('undefined' == typeof ac['widget']) { // chap is not a part of Fry MVC, must handle keyboardListener itself fry.keyboard.addListener(ac.chap.keyboardListener); } $class('ac.chap.Window', { construct:function(options, userId) { this.instanceId = ac.chap.instanceId++; this.ident = 'ac-chap-' + this.instanceId; this.userId = userId | 0; this.caret = null; this.options = null; this.state = null; this.views = []; this.activeView = null; this.viewLayoutNodes = []; this.char_map = []; this.row_id_map = []; this.syntax_map = []; this.style_map = []; this.row_id_sequence = 1; this.language = null; this.keymap = null; this.snippets = []; this.commands = []; this.selection = null; this.transaction_log = []; this.redo_log = []; this.setOptions(options||{}); this.setState(); }, destruct:function() { $delete(this.state); $delete(this.options); $delete(this.char_map); $delete(this.row_id_map); $delete(this.syntax_map); $delete(this.style_map); this.hide(); $delete(this.activeView); } }); ac.chap.Window.prototype.focus = function() { this.showCaret(); } ac.chap.Window.prototype.blur = function() { this.hideCaret(); } // compatibility layer with AC Fry Widget library ac.chap.Window.prototype.onFocus = function() { ac.chap.setActiveComponent(this); this.focus(); } ac.chap.Window.prototype.onBlur = function() { ac.chap.setActiveComponent(null); this.blur(); } ac.chap.Window.prototype.onResize = function(width, height) { } ac.chap.Window.prototype.onSystemClipboardCopy = function() { return this.getSelection(); } ac.chap.Window.prototype.onSystemClipboardCut = function() { this.runAction(ac.chap.ACTION_CLIPBOARD, {cut:true}); return this.processActionResult(true, true); } ac.chap.Window.prototype.onSystemClipboardPaste = function(content) { this.runAction(ac.chap.ACTION_CLIPBOARD, {paste:true, content:content}); return this.processActionResult(true, true); } ac.chap.Window.prototype.hasKeyboardListenerActive = function() { return true; } ac.chap.Window.prototype.onCut = function(selection, callbackOk) { } ac.chap.Window.prototype.onPaste = function(selection, wasCut) { } ac.chap.Window.prototype.setOptions = function(options) { this.options = { initialCaretPosition:[0,0], tokenizerLazyLaunch:900, syntaxHighlightingEnabled:true, remoteBackendURL:'', font:{ size:11, family: $__tune.isMac ? "Consolas, 'Bitstream Vera Sans mono', 'Courier', 'Monaco', monospaced" : "Consolas, 'Courier New', 'Courier', monospaced", allowedSizes: [8, 9, 10, 11, 12, 13, 14, 17, 21, 24, 27, 30, 34, 38, 42] } }; if ( $isset(options.initial_caret_position) ) { this.options.initialCaretPosition = [options.initial_caret_position[0], options.initial_caret_position[1]]; } if ( $isset(options.language) ) { this.language = $new(options.language); } else { this.language = $new(ac.chap.Language); } if ( $isset(options.keymap) ) { this.keymap = $new(options.keymap); } else { this.keymap = $new(ac.chap.KeyMap); } if ( $isset(options.syntaxHighlightingEnabled) ) { this.options.syntaxHighlightingEnabled = options.syntaxHighlightingEnabled; } if ( $isset(options.remoteBackendURL) ) { this.options.remoteBackendURL = options.remoteBackendURL; } else { if ( client && client.conf && client.conf.fry ) { this.options.remoteBackendURL = client.conf.fry.backendURL; } } if ($isset(options.font)) { if ($isset(options.font['size'])) { this.options.font.size = options.font.size; } if ($isset(options.font['family'])) { this.options.font.family = options.font.family; } } } ac.chap.Window.prototype.setState = function() { this.state = { lastKeyTimePressed:0, caretPhase:1, lastKeyCode:0, lastControlKey:0, lastCaretPosition:[], tokenizerTimer:null, scheduledTokenizerTime:0, transactionLogStopped:false, actionListeners:[], actionListenersStopped:false, caretListener:null, commandListener:null, transactionListener:[null,800], passThroughKeysListener:null } this.caret = { position:[this.options.initialCaretPosition[0], this.options.initialCaretPosition[1]], mode:1 // 1 normal, 2 overwrite } } ac.chap.Window.prototype.addView = function(layoutNode, options, renderAfter) { var view_index = this.views.length; this.viewLayoutNodes.push(layoutNode); this.views.push($new(ac.chap.View, this, view_index, options||{})); this.row_id_map[view_index] = []; if ( 0 < view_index ) { // console.log(view_index); // creating duplicate var n = this.row_id_map[0].length; for ( var i=0; i= 0; i--) { if (font_size > font_sizes[i]) { font_size = font_sizes[i]; break; } } } else { if (font_sizes[0] <= value && value <= font_sizes[font_sizes.length-1]) { font_size = value; } } this.options.font.size = font_size; redraw = true; } else if ('font.family' == key) { this.options.font.family = value; redraw = true; } else if ('word.wrap' == key) { if (this.activeView) { this.hideCaret(); this.activeView.options.wordWrap = value; this.activeView.reloadOptions(); this.showCaret(); } } if (redraw) { this.hideCaret(); var num_views = this.views.length; for (var i=0; i caret_col ) { caret_col++; } else { if ( 'undefined' != typeof this.char_map[caret_row+1] ) { caret_row++; caret_col = 0; } } this.setCaretPosition(caret_row, caret_col); return ac.chap.ACTION_RES_REDRAWCARET; } else if ( 'up' == direction ) { if ( 0 < caret_row ) { var move_end = this.char_map[caret_row].length == caret_col; if ( move_end ) { caret_col = this.char_map[caret_row-1].length; } else { caret_col = Math.min(this.char_map[caret_row-1].length, caret_col); } this.setCaretPosition(caret_row-1, caret_col); return ac.chap.ACTION_RES_REDRAWCARET; } } else if ( 'down' == direction ) { if ( 'undefined' != typeof this.char_map[caret_row+1] ) { var move_end = this.char_map[caret_row].length == caret_col; if ( move_end ) { caret_col = this.char_map[caret_row+1].length; } else { caret_col = Math.min(this.char_map[caret_row+1].length, caret_col); } this.setCaretPosition(caret_row+1, caret_col); return ac.chap.ACTION_RES_REDRAWCARET; } } else if ( 'prev_word' == direction ) { if ( 0 < caret_col ) { var ch = this.char_map[caret_row].charAt(caret_col-1); var re = this.language.wordDelimiter; var look_for_wch = re.test(ch); while ( 0 != caret_col ) { ch = this.char_map[caret_row].charAt(caret_col-1); if ( look_for_wch != re.test(ch) ) { break; } caret_col--; } } else { if ( 0 < caret_row ) { caret_row--; caret_col = this.char_map[caret_row].length; } } this.setCaretPosition(caret_row, caret_col); return ac.chap.ACTION_RES_REDRAWCARET; } else if ( 'next_word' == direction ) { if ( this.char_map[caret_row].length > caret_col ) { var ch = this.char_map[caret_row].charAt(caret_col); var re = this.language.wordDelimiter; var look_for_wch = re.test(ch); while ( this.char_map[caret_row].length > caret_col ) { ch = this.char_map[caret_row].charAt(caret_col); if ( look_for_wch != re.test(ch) ) { break; } caret_col++; } } else { if ( 'undefined' != typeof this.char_map[caret_row+1] ) { caret_row++; caret_col = 0; } } this.setCaretPosition(caret_row, caret_col); return ac.chap.ACTION_RES_REDRAWCARET; } else if ( 'prev_regexp' == direction ) { if ( 0 < caret_col ) { var row = this.char_map[caret_row].substring(0, caret_col); var re = new RegExp(params['re'].replace('|', '\\')); var matches = re.exec(row); if (0 == matches.length) { console.warning('Invalid RE definition for `prev_regexp\' direction in ACTION_CARET.move action in keymap.'); caret_col--; } else { caret_col -= matches[0].length + 1; } } else { if ( 0 < caret_row ) { caret_row--; caret_col = this.char_map[caret_row].length; } } this.setCaretPosition(caret_row, caret_col); return ac.chap.ACTION_RES_REDRAWCARET; } else if ( 'next_regexp' == direction ) { if ( this.char_map[caret_row].length > caret_col ) { var row = this.char_map[caret_row].substr(caret_col + 1); var re = new RegExp(params['re'].replace('|', '\\')); var matches = re.exec(row); if (0 == matches.length) { console.warning('Invalid RE definition for `next_regexp\' direction in ACTION_CARET.move action in keymap.'); caret_col++; } else { caret_col += matches[0].length + 1; } } else { if ( 'undefined' != typeof this.char_map[caret_row+1] ) { caret_row++; caret_col = 0; } } this.setCaretPosition(caret_row, caret_col); return ac.chap.ACTION_RES_REDRAWCARET; } else if ( 'row_start' == direction ) { if ( 0 < caret_col ) { caret_col = 0; this.setCaretPosition(caret_row, caret_col); return ac.chap.ACTION_RES_REDRAWCARET; } } else if ( 'row_end' == direction ) { if ( this.char_map[caret_row].length > caret_col ) { caret_col = this.char_map[caret_row].length; this.setCaretPosition(caret_row, caret_col); return ac.chap.ACTION_RES_REDRAWCARET; } } else if ( 'page_up' == direction ) { if (this.activeView) { var row = caret_row - this.activeView.numRows; if (0 > row) { row = 0; } this.setCaretPosition(row, 0 != caret_col ? this.char_map[row].length : 0); return ac.chap.ACTION_RES_REDRAWCARET; } return 0; } else if ( 'page_down' == direction ) { if (this.activeView) { var row = caret_row + this.activeView.numRows; if (this.char_map.length <= row) { row = this.char_map.length-1; } this.setCaretPosition(row, 0 != caret_col ? this.char_map[row].length : 0); return ac.chap.ACTION_RES_REDRAWCARET; } return 0; } else if ( 'doc_start' == direction ) { this.setCaretPosition(0,0); return ac.chap.ACTION_RES_REDRAWCARET; } else if ( 'doc_end' == direction ) { var last_index = this.char_map.length-1 this.setCaretPosition(last_index, this.char_map[last_index].length-1); return ac.chap.ACTION_RES_REDRAWCARET; } } else if ( $isset(params.moveBy) ) { var offset = params.moveBy; if ( 'column' == offset ) { //move by params.value columns, newlines are counted as column, params.value may be negative indication caret moving to the left if ( 0 < params.value ) { var range_source = (this.char_map[caret_row].substr(caret_col)+'\n'+this.char_map.slice(caret_row+1).join('\n')).substr(0, params.value); range_source = range_source.split('\n'); caret_row += range_source.length-1; caret_col = range_source[range_source.length-1].length + (1==range_source.length ? caret_col : 0); } else { var range_source = (this.char_map.slice(0, caret_row).join('\n')+'\n'+this.char_map[caret_row].substr(0, caret_col)); range_source = range_source.substr(range_source.length+params.value); range_source = range_source.split('\n'); caret_row -= (range_source.length-1); caret_col = (1==range_source.length ? caret_col : this.char_map[caret_row].length) - range_source[0].length; } this.setCaretPosition(caret_row, caret_col); return ac.chap.ACTION_RES_REDRAWCARET; } else if ( 'row' == offset ) { // move by params.value rows } else if ( 'page' == offset ) { // move by params.value pages } } else if ( $isset(params.moveTo) ) { // move to params.moveTo[0], params.moveTo[1] this.setCaretPosition(params.moveTo[0], params.moveTo[1]); return ac.chap.ACTION_RES_REDRAWCARET; } };break; case ac.chap.ACTION_SELECTION: { if ( $isset(params.remove) ) { var changed = this.removeSelection(); return ac.chap.ACTION_RES_REDRAWCARET | (changed ? ac.chap.ACTION_RES_REDRAWTEXT : 0); } else if ( $isset(params.add) ) { this.addSelection([caret_row, caret_col], this.state.lastCaretPosition); this.renderSelection(); return ac.chap.ACTION_RES_REDRAWCARET | ac.chap.ACTION_RES_SELECTIONCHANGED; } else if ( $isset(params.all) ) { $__tune.behavior.clearSelection(); this.addAllSelection(); this.renderSelection(); return ac.chap.ACTION_RES_REDRAWCARET | ac.chap.ACTION_RES_SELECTIONCHANGED; } };break; case ac.chap.ACTION_INSERT: { var str = null; if ( $isset(params.row) ) { var ins_content = '\n'; caret_col = 0; // if ( 0 < caret_row ) // { // // indenting by previous row // var t = this.char_map[caret_row]; // var n = t.length; // var re = this.language.indentIgnoreMarker; // while ( caret_col width ) { // will go before [row,column] source = this.char_map.slice(0, row).join('\n')+'\n'+this.char_map[row].substr(0, column); return source.substr(source.length+width); } else { // will go after [row,column] source = this.char_map.slice(row).join('\n').substr(column); return source.substr(0, width); } } ac.chap.Window.prototype.getWordAt = function(row, column, numWords) { // if numWords <0 returns words before otherwise after position. if omitted, default value is -1 that is word before caret // also, if more than one word is required, returns array of words as result row = $getdef(row, this.caret.position[0]); column = $getdef(column, this.caret.position[1]); numWords = $getdef(numWords, -1); var words = []; var re = this.language.wordDelimiter; var required_words = numWords; var direction_after = 0 < numWords; var next_word = true; required_words = Math.abs(-numWords); if ( !direction_after ) { column--; if ( -1 == column ) { row--; if ( -1 == row ) { return words; } column = this.char_map[row].length-1; } } while (true) { var ch = this.char_map[row].charAt(column) if ( re.test(ch) ) { if ( next_word ) { words.push(''); next_word = false; } // word character found if ( direction_after ) { words[words.length-1] += ch; } else { words[words.length-1] = ch + words[words.length-1]; } } else { if ( required_words == words.length ) { break; } next_word = true; } column += (direction_after ? 1 : -1); if ( 0 > column ) { row--; if ( -1 == row ) { break; } next_word = true; column = this.char_map[row].length-1; } else if ( this.char_map[row].length <= column ) { row++; if ( this.char_map.length == row ) { break; } next_word = true; column = 0; } } if ( 1 == required_words ) { return words[0] ? words[0] : false; } return words; } ac.chap.Window.prototype.getLineAt = function(row) { return this.char_map[row]; } ac.chap.Window.prototype.getText = function() { return this.char_map.join('\n'); } ac.chap.Window.prototype.getNumRows = function() { return this.char_map.length; } ac.chap.Window.prototype.getSyntaxHighlightingSource = function() { if (null != this.activeView) { return this.activeView.getSyntaxHighlightingSource(); } return 'ni'; } ac.chap.Window.prototype.getCaretAbsolutePosition = function() { if ( null != this.activeView ) { var pos = this.activeView.getRenderedCharPosition(this.caret.position[0], this.caret.position[1]); if ( null != pos ) { var root_pos = this.activeView.nodeScrollArea.abspos(); return [pos[0]+root_pos.x+this.activeView.options.colWidth, pos[1]+root_pos.y+this.activeView.options.rowHeight]; } } return null; } ac.chap.Window.prototype.stopTransactionLog = function() { this.state.transactionLogStopped = true; } ac.chap.Window.prototype.startTransactionLog = function() { this.state.transactionLogStopped = false; } ac.chap.Window.prototype.addAllSelection = function() { var num_rows = this.char_map.length; var num_views = this.views.length; for ( var i=0; i offset_x - mid_char_w ) { col_index = i; break; } else if ( w - mid_char_w < offset_x && (dim[0] % w + 2*mid_char_w >= offset_x)) { // last char col_index = i+1; break; } } i++; } // console.log('%s, %s', row_index, col_index); if ( i == num_chars ) { col_index = i; } // console.log('CHANGE CARET to: %s', col_index); this.hideCaret(); if ( evt.shiftKey ) { this.addSelection([row_index, col_index], this.state.lastCaretPosition); this.renderText(); } else { this.setCaretPosition(row_index, col_index); this.state.caretPhase = 1; view.showCaret(); this.state.lastCaretPosition = [this.caret.position[0], this.caret.position[1]]; if ( this.removeSelection() ) { this.renderText(); } } ac.chap.setActiveComponent(this); } ac.chap.Window.prototype.foldingize = function() { var startRowIndex = 0; var source_rows = this.char_map.slice(startRowIndex); // creating folding info var n = source_rows.length; var foldings = []; var foldings_index = -1; for ( var i=0; i ixs[i][1] ) { found_marker_index = i; lowest = ixs[i][1]; } } } if ( -1 == found_marker_index ) { break; } var start_index = ixs[found_marker_index][1]; var skipped_source = source.substr(0, start_index); var num_skipped_rows = skipped_source.split('\n').length; cursor.row += num_skipped_rows - 1; cursor.col = (1 == num_skipped_rows ? col_offset : 0) + skipped_source.length - ('\n'+skipped_source).lastIndexOf('\n'); if ( 'undefined' == typeof syntax_map[cursor.row] ) { syntax_map[cursor.row] = []; } var start_marker_len = ixs[found_marker_index][2].length; var end_marker_len = ixs[found_marker_index][3].length; source = source.substr(start_index+start_marker_len); var token_type = ixs[found_marker_index][0]; var end_index = source.indexOf(ixs[found_marker_index][3]); var sub_source = source; var end_index_offset = 0; var except = false; while ( 0 < end_index && '' != ixs[found_marker_index][4] && ixs[found_marker_index][4] == sub_source.charAt(end_index-end_marker_len) ) { except = true; end_index_offset += end_index + end_marker_len; sub_source = sub_source.substr(end_index+end_marker_len); end_index = sub_source.indexOf(ixs[found_marker_index][3]); } if ( except && -1 != end_index ) { end_index += end_index_offset; } if ( -1 == end_index ) { syntax_map[cursor.row].push([token_type, cursor.col, -1, '']); fillRowTokens(token_type, cursor.row+1, -1); break; } else { var block_source = source.substr(0, end_index); var num_block_rows = '\n' == ixs[found_marker_index][3] ? 1 : block_source.split('\n').length; var cursor_col_end = block_source.length - ('\n'+block_source).lastIndexOf('\n'); syntax_map[cursor.row].push([token_type, cursor.col, 1 == num_block_rows ? (cursor.col+end_index+start_marker_len+end_marker_len) : -1, ixs[found_marker_index][2]]); fillRowTokens(token_type, cursor.row+1, cursor.row+num_block_rows-1); if ( 1 == num_block_rows ) { col_offset = cursor.col + end_index + start_marker_len + end_marker_len; if ( '\n' == ixs[found_marker_index][3] ) { cursor.row++; col_offset = 0; } } else { if ( 'undefined' == typeof syntax_map[cursor.row+num_block_rows] ) { syntax_map[cursor.row+num_block_rows-1] = []; } syntax_map[cursor.row+num_block_rows-1].push([token_type, -1, cursor_col_end + end_marker_len, '']); // var a = block_source.split('\n'); col_offset = cursor_col_end + end_marker_len; cursor.row += num_block_rows -1; } // console.log(num_block_rows); source = source.substr(end_index+end_marker_len); } } delete ixs; delete source; var n = Math.max(syntax_map.length, this.syntax_map.length); for ( i=0; i'; } } return ht; } var nodes = this.nodeEditArea.childNodes; var ht = ''; for (var i=0; i') ) { str = str.replace(/>/g, '>'); } if ( -1 != str.indexOf('<') ) { str = str.replace( / 1 2 3 =  1 2 3 function ch_encode_markup_spaces(str) { var n = str.length - str.replace(/ /g, '').length; for ( var i=0; i/g, '').length); return arguments[1]+(is_inside?'~`~`~`~`':' '); }); } return str.replace(/~`~`~`~`/g, ' '); } ac.chap.View.prototype.getRenderedCharDimension = function(rowIndex, colIndex) { return [this.options.colWidth, this.options.rowHeight]; } ac.chap.View.prototype.getRenderedStringDimension = function(rowIndex, colIndex, width) { if ( 'undefined' != typeof this.window.char_map[rowIndex] ) { if ( colIndex < this.window.char_map[rowIndex].length ) { var str = this.window.char_map[rowIndex].substr(colIndex, width); var ix = 0; var tab = this.options.tabelator; while ( -1 != ix ) { ix = str.indexOf('\t'); if ( -1 != ix ) { str = str.substr(0,ix)+tab.substr(0, tab.length-(ix % tab.length))+str.substr(ix+1); } } // console.log('(getrenderedstringdimension) = [%s], ix:%s w:%s %s', this.options.colWidth*str.length, colIndex, width, str); return [this.options.colWidth*str.length, this.options.rowHeight]; } } return [0,0]; } ac.chap.View.prototype.getVirtualStringDimension = function(row, colIndex, width) { if ( colIndex < row.length ) { var str = row.substr(colIndex, width); var ix = 0; var tab = this.options.tabelator; while ( -1 != ix ) { ix = str.indexOf('\t'); if ( -1 != ix ) { str = str.substr(0,ix)+tab.substr(0, tab.length-(ix % tab.length))+str.substr(ix+1); } } // console.log('(getrenderedstringdimension) = [%s], ix:%s w:%s %s', this.options.colWidth*str.length, colIndex, width, str); return [this.options.colWidth*str.length, this.options.rowHeight]; } return [0,0]; } ac.chap.View.prototype.getRenderedCharPosition = function(rowIndex, colIndex) { var node_row = this.getRowNode(rowIndex); if ( null != node_row && null != node_row.parentNode ) { var offset_x = this.getRenderedStringDimension(rowIndex, 0, colIndex)[0]; var offset_y = 0; var dim = this.getRenderedCharDimension(rowIndex, colIndex); offset_x -= dim[0]; if ( this.options.wordWrap ) { if ( 0 < colIndex ) { var w = this.options.colWidth * (this.numCols); offset_y = this.options.rowHeight * (Math.floor(offset_x/w)); offset_x = (offset_x) % w; } } return [offset_x, node_row.offsetTop+offset_y, node_row]; } return null; } ac.chap.View.prototype.getRowNode = function(rowIndex) { return document.getElementById('row-'+this.window.instanceId+'-'+this.index+'-'+rowIndex); } ac.chap.View.prototype.getVirtualCharPosition = function(nodeRow, row, colIndex) { var offset_x = this.getVirtualStringDimension(row, 0, colIndex)[0]; var offset_y = 0; var dim = this.getRenderedCharDimension(0, colIndex); offset_x -= dim[0]; if ( this.options.wordWrap ) { if ( 0 < colIndex ) { var w = this.options.colWidth * (this.numCols); offset_y = this.options.rowHeight * (Math.floor(offset_x/w)); offset_x = (offset_x) % w; } } return [offset_x, nodeRow.offsetTop+offset_y]; } ac.chap.View.prototype.showCaret = function(skipScroll) { var caret_row = this.window.caret.position[0]; var caret_col = this.window.caret.position[1]; pos = this.getRenderedCharPosition(caret_row, caret_col); if ( null != pos ) { // caret is visible var node_row = pos[2]; var node = document.getElementById('ac-chap-caret-'+this.window.instanceId); if ( null != node ) { node.parentNode.removeChild(node); } if ( 1 == this.window.state.caretPhase ) { // displaying caret node = document.createElement('div'); node.id = 'ac-chap-caret-'+this.window.instanceId; node.style.position = 'absolute'; node.style.font = '1px arial'; // IE node.style.width = this.options.colWidth + 'px'; node.style.height = this.options.rowHeight + 'px'; pos[2] = this.options.colWidth; pos[3] = this.options.rowHeight; pos = this.theme.adjustCaretPosition(this.window.caret.mode, pos); node.style.left = pos[0]+'px'; node.style.top = pos[1]+'px'; this.theme.renderCaret(this.window.caret.mode, node); this.nodeCaret = node_row.appendChild(node); node_row.style.background = this.theme.caretRowStyleActive; if ( !skipScroll ) { // might be out of borders, at least partially if ( 0 > node_row.offsetTop - (this.nodeScrollArea.$.scrollTop % this.options.rowHeight) ) { // top margin overlay, first rendered row is partially hidden this.scrollToRow(caret_row); } else if ( node_row.offsetTop > this.options.rowHeight*(this.numRows-1)-$__tune.ui.scrollbarWidth ) { // bottom margin overlay this.scrollToRow(caret_row-Math.floor(this.numRows/2)); } } this.nodeCaretRow = node_row; } if ('undefined' != typeof this.state.lastCaretRowIndex && this.state.lastCaretRowIndex != caret_row) { var last_node_row = this.getRowNode(this.state.lastCaretRowIndex); if (last_node_row) { last_node_row.style.background = 'transparent'; } } this.state.lastCaretRowIndex = caret_row; } else { if ( !skipScroll ) { // scrolling into view this.scrollToRow(caret_row - Math.floor(this.numRows/2)); } } } ac.chap.View.prototype.hideCaret = function(skipCaretRow) { if ( null != this.nodeCaret && null != this.nodeCaret.parentNode ) { this.nodeCaret.parentNode.removeChild(this.nodeCaret); this.nodeCaret = null; } if ( !skipCaretRow && null != this.nodeCaretRow ) { // console.log('off(hide) caret line background for %s', this.nodeCaretRow.id); this.nodeCaretRow.style.background = 'transparent'; } // console.log('hide caret'); } ac.chap.View.prototype.scrollToRow = function(rowIndex, setCaretToo, dontRefreshCaret) { this.nodeScrollArea.$.scrollTop = this.options.rowHeight * rowIndex - Math.floor(this.nodeRoot.$.offsetHeight/3); if (setCaretToo) { this.window.runAction(ac.chap.ACTION_CARET, {moveTo:[rowIndex, 0]}); this.window.runAction(ac.chap.ACTION_CARET, {move:'row_end'}); } if (!dontRefreshCaret) { this.window.state.caretPhase = 1; this.showCaret(true); } } ac.chap.View.prototype.expandFolding = function(rowIndex) { if ( 'undefined' == typeof this.window.row_id_map[this.index][rowIndex] ) { return; } var row_state = this.window.row_id_map[this.index][rowIndex][2]; if (0 == (ac.chap.ROWSTATE_FOLD_EXPAND & row_state)) { return; } var end_row_index = this.window.row_id_map[this.index][rowIndex][3][1]; this.window.row_id_map[this.index][rowIndex][2] &= (65535 - ac.chap.ROWSTATE_FOLD_EXPAND); this.window.row_id_map[this.index][rowIndex][1] = false; for ( var i=rowIndex+1; i<=end_row_index; i++ ) { this.window.row_id_map[this.index][i][1] = false; this.window.row_id_map[this.index][i][2] &= (65535 - ac.chap.ROWSTATE_FOLD_COLLAPSED); } this.recalculateVisibleRows(); var me = this; // console.log('expanding: %i, start: %i', rowIndex, end_row_index); $runafter(40, function(){me.renderText(true)}); } ac.chap.View.prototype.resize = function() { var h = this.nodeRoot.p().h(); this.nodeRoot.h(h); $(this.nodeSidebar).h(h); this.nodeScrollArea.h(h); this.nodeFillArea.h(h-$__tune.ui.scrollbarWidth); $(this.nodeSelectionArea).h(h-$__tune.ui.scrollbarWidth+this.options.rowHeight); this.recalculateNumRows(); this.recalculateVisibleRows(); this.renderText(true); } ac.chap.View.prototype.reloadOptions = function() { this.calculateColRowDim(); this.recalculateNumCols(false, true); this.recalculateNumRows(); this.recalculateVisibleRows(); this.renderSidebarStub(); this.renderText(true); } ac.chap.View.prototype.recalculateNumCols = function(node, withoutScrollbar) { node = node || this.nodeRoot; var w = node.$.offsetWidth; if (withoutScrollbar) { w -= $__tune.ui.scrollbarWidth+61; } this.numCols = Math.floor(w/this.options.colWidth); } ac.chap.View.prototype.recalculateNumRows = function(node) { node = node || this.nodeRoot; this.numRows = Math.floor(node.$.offsetHeight/this.options.rowHeight); } ac.chap.View.prototype.showInteractiveSearch = function() { this.hideInteractiveSearch(); var pos = this.nodeRoot.abspos(); var node = $().a($$()).pos(true).x(pos.x+58).y(pos.y).z(2000).w(this.nodeRoot.w()-$__tune.ui.scrollbarWidth-61).h(24).o(0.8); node.s('background:#000;border:1px solid #777;border-top:0;'); var search_key_id = 'is_key_?'.embed(this.window.ident); var ht = '
    '; node.t(ht); var me = this; var status_node = node.g('td:0'); var search_key_node = node.g('input:0'); var original_caret_pos = [me.window.caret.position[0], me.window.caret.position[1]]; var last_keyword = ''; var selection = me.window.getSelection(); search_key_node.e('keydown', function(evt) { evt.stopPropagation(); if (40 == evt.keyCode) { me.window.runAction(ac.chap.ACTION_CUSTOM, {action:'SearchKeyword', direction:'down'}); me.scrollToRow(me.window.caret.position[0], false, true); me.window.processActionResult(true, true); evt.preventDefault(); return true; } else if (38 == evt.keyCode) { me.window.runAction(ac.chap.ACTION_CUSTOM, {action:'SearchKeyword', direction:'up'}); me.scrollToRow(me.window.caret.position[0], false, true); me.window.processActionResult(true, true); evt.preventDefault(); return true; } else if (27 == evt.keyCode) { finish(true); evt.preventDefault(); return true; } else if (13 == evt.keyCode) { finish(); evt.preventDefault(); return true; } }).e('keyup', function(evt) { evt.stopPropagation(); search(); }).$.focus(); node.g('img:0').e('click', function(evt) { evt.stopPropagation(); finish(true); }); function finish(canceled) { if (canceled) { me.window.removeSelection(); me.window.runAction(ac.chap.ACTION_CARET, {moveTo:[original_caret_pos[0], original_caret_pos[1]]}); me.scrollToRow(me.window.caret.position[0], false, true); me.window.processActionResult(true, true); } ac.chap.setActiveComponent(me.window); me.hideInteractiveSearch(); } function update_status(numFound) { status_node.t('Found ? results.'.embed(numFound)); } function search() { var keyword = search_key_node.$.value.trim(); if ('' == keyword || last_keyword == keyword) { if ('' == keyword) { update_status(0); } return; } update_status(me.window.getText().split(keyword).length - 1); last_keyword = keyword; me.window.removeSelection(); me.window.runAction(ac.chap.ACTION_CARET, {moveTo:[original_caret_pos[0], original_caret_pos[1]]}); me.window.runAction(ac.chap.ACTION_CUSTOM, {action:'SetSearchKeyword', keyword:keyword}); me.window.runAction(ac.chap.ACTION_CUSTOM, {action:'SearchKeyword', direction:'down'}); me.scrollToRow(me.window.caret.position[0], false, true); me.window.processActionResult(true, true); } if (null != selection) { search_key_node.$.value = selection; search_key_node.$.select(); search_key_node.$.focus(); search(); } this.interactiveSearchNode = node; } ac.chap.View.prototype.hideInteractiveSearch = function() { if (this.interactiveSearchNode && this.interactiveSearchNode.is()) { this.interactiveSearchNode.rs(); } } ac.chap.View.prototype.render = function(node) { var w = node.$.offsetWidth; var h = node.$.offsetHeight; this.recalculateNumRows(node); this.recalculateNumCols(node); node.sa('chap-view', 'true'); var me = this; this.nodeRoot = node.a($$()).pos(true).w(w).h(h).n('acw-chap').s('background:?'.embed(this.theme.background)); this.interactiveSearchNode = null; var w_rows = 58; w -= w_rows; this.nodeSidebar = this.nodeRoot.a($$()).pos(true).x(0).y(0).w(w_rows).h(h).s('overflow:hidden').n('sidebar'); // rendering sidebar stub this.renderSidebarStub(); this.nodeScrollArea = this.nodeRoot.a($$()).pos(true).x(w_rows).y(0).w(w).h(h).n('scroll-area').s('overflow:auto'); this.nodeScrollArea.e('scroll', function(evt) { var offset = Math.floor(me.nodeScrollArea.$.scrollTop/me.options.rowHeight); var map = me.window.row_id_map[me.index]; var row_index = 0; for ( var i=0; i' + ch_encode_markup(token[1]) + ''; } else { rend_chunk += ch_encode_markup(token[1]); } i += token[1].length - 1; // offset = i + token[1].length; offset = i + 1; // console.log(token, offset, rend_chunk); } rend_chunk += ch_encode_markup(chunk.substr(offset)); chunk = rend_chunk; } else { chunk = ch_encode_markup(chunk); } return chunk; } ac.chap.View.prototype.renderTextRow = function(node, rowIndex, renderedPreviously) { var row = this.window.char_map[rowIndex]; var rendered_row = ''; var offset = 0; var font_style = ';font:' + this.window.options.font.size + 'px ' + this.window.options.font.family; var interpolation = this.window.language.stringInterpolation; var row_state = this.window.row_id_map[this.index][rowIndex][2]; if ( 'undefined' != typeof this.window.syntax_map[rowIndex] && 0 < this.window.syntax_map[rowIndex].length ) { // console.log(this.window.syntax_map[rowIndex]); var n = this.window.syntax_map[rowIndex].length; for ( var i=0; i' + ch_encode_markup(chunk.substring(0, m.index)) + ''; new_chunk += this.renderChunk(chunk.substr(m.index, m[interpolation[1]].length)); chunk = chunk.substr(m.index + m[interpolation[1]].length); // console.warn(chunk); } new_chunk += '' + ch_encode_markup(chunk) + ''; // console.info(new_chunk); rendered_row += new_chunk; } else { rendered_row += ''+ch_encode_markup(chunk)+''; // console.log(rendered_row); } } else { rendered_row += ch_encode_markup(chunk); } offset = -1 == end_offset ? row.length : end_offset; } } rendered_row += this.renderChunk(row.substr(offset)); // console.log(rendered_row); // rendering custom selection (search results, errors and such) // !!!!!!!!!! // NOT USED NOW !!!!! // !!!!!!!!!! // !!!!!!!!!! // !!!!!!!!!! // !!!!!!!!!! if ( false && ac.chap.ROWSTATE_SELECTION == (row_state & ac.chap.ROWSTATE_SELECTION) ) { var range = this.window.row_id_map[this.index][rowIndex][5]; if ( 0 == range[0] && this.window.char_map[rowIndex].length == range[1] ) { rendered_row = ''+rendered_row+''; } else { // console.log(range); var raw = rendered_row; var n = raw.length; var col_index = 0; var selection_started = false; var offset = 0; // console.log('before: %s', raw); for ( var i=0; i'); i += ix; // console.log('ix: %s', ix); if ( selection_started ) { var c = ''; rendered_row = rendered_row.substr(0, i+offset+1)+c+rendered_row.substr(i+offset+1); offset += c.length; } continue; } if ( range[0] == col_index ) { selection_started = true; var c = ''; rendered_row = rendered_row.substr(0, i+offset)+c+rendered_row.substr(i+offset); offset += c.length; } if ( selection_started && range[1]-1 < col_index ) { selection_started = false; var c = ''; rendered_row = rendered_row.substr(0, i+offset)+c+rendered_row.substr(i+offset); break; } if ( '&' == ch ) { if ( '<' == raw.substr(i, 4) || '>' == raw.substr(i, 4) ) { i += 3; } else if ( '&' == raw.substr(i, 5) ) { i += 4; } } col_index++; } if ( selection_started ) { rendered_row += ''; } } } // console.log(rendered_row); // making intelligent tabelators - note, using simple replace of \t doesn't work var ix = 0; var tab = this.options.tabelator; var raw = this.window.char_map[rowIndex]; var tab_stack = []; while ( -1 != ix ) { ix = raw.indexOf('\t'); if ( -1 != ix ) { var tab_length = tab.length - (ix % tab.length); raw = raw.substr(0,ix)+tab.substr(0, tab_length)+raw.substr(ix+1); tab_stack.push(tab_length); } } for ( var i=0; i'); if ( -1 == ix ) { break; } i += ix; continue; } var n_ch = 0; if ( '&' == ch ) { if ( '<' == rendered_row.substr(i,4) || '>' == rendered_row.substr(i,4) ) { n_ch = 3; } else if ( '&' == rendered_row.substr(i,5) ) { n_ch = 4; } } printable += ch.charAt(0); if ( this.numCols == printable.length ) { raw = raw.substr(0, i+offset+n_ch)+'
    '+raw.substr(i+offset+n_ch); num_subrows++; offset += 4; printable = ''; } i += n_ch; } rendered_row = raw; } if ( ac.chap.ROWSTATE_FOLD_EXPAND == (row_state & ac.chap.ROWSTATE_FOLD_EXPAND) ) { var end_index = this.window.row_id_map[this.index][rowIndex][3][1]; var content = ch_encode_markup(this.window.char_map.slice(rowIndex, end_index+1).join('\n').replace(/"/ig, "''")); rendered_row += '
    '.embed(content); } node.setAttribute('num-subrows', num_subrows); if ( $__tune.isIE ) { // IE trims input source in innerHTML rendered_row = ch_encode_markup_spaces(rendered_row); } node.innerHTML = rendered_row; } ac.chap.View.prototype.recalculateVisibleRows = function() { var map = this.window.row_id_map[this.index]; var n = map.length; var i = 0; var num_visibles = 0; while ( i < n ) { var state = map[i][2]; if ( 0 == (ac.chap.ROWSTATE_FOLD_COLLAPSED & state) ) { num_visibles++; } i++; } this.numVisibleRows = num_visibles; } ac.chap.View.prototype.getVisibleRowIndices = function() { var map = this.window.row_id_map[this.index]; var i = 0; var index = this.startRow; var indices = []; while ( i++ <= this.numRows ) { if ( 'undefined' == typeof this.window.row_id_map[this.index][index] ) { break; } var state = this.window.row_id_map[this.index][index][2]; if ( ac.chap.ROWSTATE_FOLD_COLLAPSED == (ac.chap.ROWSTATE_FOLD_COLLAPSED & state) ) { // collapsed i--; index++; continue; } indices.push(index); if ( ac.chap.ROWSTATE_FOLD_EXPAND == (state & ac.chap.ROWSTATE_FOLD_EXPAND) ) { // collapsed folding var refered_row_index = this.window.row_id_map[this.index][index][3][1]; index = refered_row_index + 1; } else { index++; } } return indices; } ac.chap.View.prototype.renderRowSidebar = function(position, rowIndex, rowNode, forceCompleteRedraw) { if (!this.nodeSidebar.firstChild.childNodes.item(position)) { return; } var bar_node = this.nodeSidebar.firstChild.childNodes.item(position).firstChild; if ( 0 == rowNode.offsetHeight ) { rowNode.style.height = this.options.rowHeight; } var num_subrows = parseInt(rowNode.getAttribute('num-subrows')); var cache_id = forceCompleteRedraw ? 'none' : (num_subrows+':'+this.window.row_id_map[this.index][rowIndex].join('-')); if (bar_node.getAttribute('sidebar-cache-id') == cache_id && 'none' != cache_id) { return; } if ('none' != cache_id) { bar_node.setAttribute('sidebar-cache-id', cache_id); bar_node.firstChild.style.fontSize = (this.window.options.font.size-2) + 'px'; } // console.log(cache_id); var row_height = num_subrows * this.options.rowHeight; bar_node.parentNode.style.height = row_height + 'px'; if (forceCompleteRedraw) { bar_node.firstChild.style.fontSize = (this.window.options.font.size-2) + 'px'; } var ht = rowIndex+1; if ( this.options.wordWrap ) { var htt = '
    '; for ( var i=1; i this.numCols ) { ix_r++; ix_c -= this.numCols; } if ( ii == range[1] ) { offset[2] = ix_r; offset[3] = ix_c; break; } } if ( -1 == offset[3] ) { offset[2] = ix_r+1;//offset[0]+1; } node_row_selection.style.top = (node_row.offsetTop + this.options.rowHeight*offset[0]) + 'px'; // console.log('%o', offset); if ( offset[0] == offset[2] ) { // selection stays non-wrapped node_row_selection.style.left = offset[1]*this.options.colWidth + 'px'; node_row_selection.style.width = ((offset[3]-offset[1])*this.options.colWidth) + 'px'; // console.log(node_row_selection.style.width); } else { // finishing current node if ( -1 == offset[1] ) { // caret stays on the end of the row node_row_selection.style.left = (ix_c*this.options.colWidth) + 'px'; node_row_selection.style.width = (node_row.offsetWidth - (ix_c*this.options.colWidth)) + 'px'; } else { node_row_selection.style.left = (offset[1]*this.options.colWidth) + 'px'; node_row_selection.style.width = (node_row.offsetWidth - (offset[1]*this.options.colWidth)) + 'px'; } // marking as non-cacheable node_row_selection.removeAttribute('cachid'); // creating additional ones for ( ii=offset[0]+1; ii<=offset[2]; ii++ ) { node_row_selection = node_cache.appendChild(document.createElement('div')); node_row_selection.style.background = this.theme.selectionStyle; node_row_selection.style.position = 'absolute'; node_row_selection.style.left = '0px'; node_row_selection.style.top = (node_row.offsetTop+ii*this.options.rowHeight) + 'px'; node_row_selection.style.height = this.options.rowHeight + 'px'; if ( ii != offset[2] ) { node_row_selection.style.width = node_row.offsetWidth + 'px'; } else { node_row_selection.style.width = ((offset[3])*this.options.colWidth) + 'px'; } } } } else { var offset_x1 = this.getRenderedStringDimension(row_index, 0, range[0])[0]; var offset_x2 = this.getRenderedStringDimension(row_index, 0, range[1]+1)[0]; node_row_selection.style.left = offset_x1 + 'px'; node_row_selection.style.width = (offset_x2 - offset_x1) + 'px'; } } } // console.log('selection after range: %o', this.window.row_id_map[this.index][row_index][3]); } } // console.log('%o', this.window.row_id_map[this.index][0]); var ht = node_cache.innerHTML; this.nodeSelectionArea.innerHTML = ht; } ac.chap.View.prototype.renderText = function(forceCompleteRedraw) { var row_indices = this.getVisibleRowIndices(); var num_rows = row_indices.length; // console.log('view: %s - row indices: %o', this.index, row_indices); // console.log('view: %s - num rows x cols [%s x %s]', this.index, this.numRows, this.numCols); // checking to see if only one row changed - the most usual case var changed_row_index = -1; var changed_row_position = -1; for ( var i=0; i fill_area_h ) { fill_area_h = this.nodeRoot.h()-$__tune.ui.scrollbarWidth; } this.nodeFillArea.h(fill_area_h); } else { this.nodeEditAreaCache.innerHTML = ''; } if ( parseInt(this.nodeSidebar.firstChild.style.top) != top_offset ) { this.nodeSidebar.firstChild.style.top = (top_offset)+'px'; this.nodeSidebar.firstChild.style.height = (this.nodeSidebar.offsetHeight - $__tune.ui.scrollbarWidth - top_offset)+'px'; } this.renderSelection(); } /* * ac.Chap - Text Editing Component widget - Settings file */ if ( 'undefined' == typeof ac ) { var ac = {chap:{}}; } $class('ac.chap.KeyMap', { construct:function() { this.definition = {}; this.isMac = true; this.wordCompleteCache = null; this.snippetCompleteCache = null; this.searchKeyword = ''; this.initDefinition(); } }); ac.chap.KeyMap.prototype.initDefinition = function() { } ac.chap.KeyMap.prototype.importCommands = function(commands) { var n = commands.length; for ( var i=0; i looking_for_len && words_prev[i+1].substr(0, looking_for_len) == looking_for ) { if ( -1 == found_words_index.indexOf(' '+words_prev[i+1]) ) { found_words.push(words_prev[i+1]); found_words_index += ' '+words_prev[i+1]; } } if ( words_next[i] && words_next[i].length > looking_for_len && words_next[i].substr(0, looking_for_len) == looking_for ) { if ( -1 == found_words_index.indexOf(' '+words_next[i]) ) { found_words.push(words_next[i]); found_words_index += ' '+words_next[i]; } } } if ( 1 < found_words.length ) { // console.log('results found: %o', found_words); wcc.results = found_words; wcc.index = 0; proceed_complete = true; } } else { proceed_complete = true; } var num_results = wcc.results.length; if ( proceed_complete && 0 < num_results ) { var index = wcc.index; index += params.direction ? 1 : -1; if ( num_results <= index ) { index = 0; } else if ( 0 > index ) { index = num_results-1; } // console.log('n:%s i:%s', num_results, index); // let's not add the following operation to the transaction/undo log component.stopTransactionLog(); component.runAction(ac.chap.ACTION_CARET, {move:'prev_word'}); component.runAction(ac.chap.ACTION_SELECTION, {add:true}); component.runAction(ac.chap.ACTION_DELETE, {character:false}); component.runAction(ac.chap.ACTION_INSERT, {string:wcc.results[index]}); component.startTransactionLog(); wcc.index = index; wcc.position = [component.caret.position[0], component.caret.position[1]]; } else { wcc.results = []; } this.wordCompleteCache = wcc; return ac.chap.ACTION_RES_REDRAWCARET | ac.chap.ACTION_RES_REDRAWTEXT; } ac.chap.KeyMap.prototype.getAffectedRows = function(component, caretRow) { var from_row = caretRow; var to_row = caretRow; if (null != component.selection) { var start_pos = component.selection.startPosition[0]; var end_pos = component.selection.endPosition[0]; if (-1 == component.selection.endPosition[1]) { end_pos--; } from_row = Math.min(start_pos, end_pos); to_row = Math.max(start_pos, end_pos); } return [from_row, to_row]; } ac.chap.KeyMap.prototype.action_Indent = function(keyCode, controlKeysMask, caretRow, caretCol, component, params) { var affected_rows = this.getAffectedRows(component, caretRow); var tab = component.getTabelator(); for (var i=affected_rows[0]; i<=affected_rows[1]; i++) { if ('right' == params.direction) { component.insertIntoCharacterMap(tab, i, 0); } else { var row = component.char_map[i]; var index = 0; while (('\t' == row.charAt(index) || ' ' == row.charAt(index)) && (row.length > index) && (tab.length > index)) index++; if (0 < index) { component.removeFromCharacterMap(i, 0, i, index); } } } return ac.chap.ACTION_RES_REDRAWCARET | ac.chap.ACTION_RES_REDRAWTEXT | ac.chap.ACTION_RES_SELECTIONCHANGED; } ac.chap.KeyMap.prototype.action_Comment = function(keyCode, controlKeysMask, caretRow, caretCol, component, params) { if (!component.language) { return 0; } var markers = component.language.singleRowCommentStartMarkers; if (0 == markers.length) { return 0; } var marker = markers[0]; var tab = component.getTabelator(); var affected_rows = this.getAffectedRows(component, caretRow); var tab = component.getTabelator(); var prepend_text = marker + ' '; for (var i=affected_rows[0]; i<=affected_rows[1]; i++) { var row = component.char_map[i]; var index = row.indexOf(marker); if (-1 != index && 0 == row.substring(0, index).replace(tab, '').replace(' ', '')) { // was commented component.removeFromCharacterMap(i, 0, i, index+marker.length); } else { // will be commented component.insertIntoCharacterMap(marker, i, 0); } } return ac.chap.ACTION_RES_REDRAWCARET | ac.chap.ACTION_RES_REDRAWTEXT | ac.chap.ACTION_RES_SELECTIONCHANGED; } ac.chap.KeyMap.prototype.action_RuntimeOption = function(keyCode, controlKeysMask, caretRow, caretCol, component, params) { component.setRuntimeOption(params['key'], params['value']); return ac.chap.ACTION_RES_REDRAWCARET | ac.chap.ACTION_RES_REDRAWTEXT | ac.chap.ACTION_RES_SELECTIONCHANGED; } ac.chap.KeyMap.prototype.action_SearchInteractive = function(keyCode, controlKeysMask, caretRow, caretCol, component, params) { component.showInteractiveSearch(); return ac.chap.ACTION_RES_REDRAWCARET | ac.chap.ACTION_RES_SELECTIONCHANGED; } ac.chap.KeyMap.prototype.action_SetSearchKeyword = function(keyCode, controlKeysMask, caretRow, caretCol, component, params) { if (params['keyword']) { this.searchKeyword = params['keyword']; return 0; } if (component.selection && component.selection.startPosition[0] == component.selection.endPosition[0]) { this.searchKeyword = component.getSelection(); return ac.chap.ACTION_RES_SELECTIONCHANGED; } return 0; } ac.chap.KeyMap.prototype.action_SearchKeyword = function(keyCode, controlKeysMask, caretRow, caretCol, component, params) { if ('' == this.searchKeyword) { return 0; } row_index = caretRow; var index = 0; var search_down = 'down' == params['direction']; do { var row = component.char_map[row_index]; var offset = 0; console.log(ac.chap.activeComponent.activeView); if (row_index == caretRow) { if (search_down) { // if (row.substring(caretCol, this.searchKeyword.length) == this.searchKeyword) // { // // offset = this.searchKeyword.length; // } row = row.substr(caretCol) offset += caretCol; } else { if (row.substring(caretCol-this.searchKeyword.length, caretCol)) { offset = this.searchKeyword.length; } row = row.substring(0, caretCol - offset); offset = 0; } } index = search_down ? row.indexOf(this.searchKeyword) : row.lastIndexOf(this.searchKeyword); if (-1 != index) { index += offset; component.runAction(ac.chap.ACTION_SELECTION, {remove:true}); component.runAction(ac.chap.ACTION_CARET, {moveTo:[row_index, index]}); component.runAction(ac.chap.ACTION_CARET, {store:true}); component.runAction(ac.chap.ACTION_CARET, {moveTo:[row_index, index+this.searchKeyword.length]}); component.runAction(ac.chap.ACTION_SELECTION, {add:true}); return ac.chap.ACTION_RES_REDRAWCARET | ac.chap.ACTION_RES_SELECTIONCHANGED | ac.chap.ACTION_RES_SCROLLTOCARET; } row_index += search_down ? 1 : -1; if (search_down && row_index == component.char_map.length) { row_index = 0; } else if (!search_down && -1 == row_index) { row_index = component.char_map.length-1; } } while (caretRow != row_index); return ac.chap.ACTION_RES_REDRAWCARET | ac.chap.ACTION_RES_SELECTIONCHANGED; } ac.chap.KeyMap.prototype.action_SmartIndent = function(keyCode, controlKeysMask, caretRow, caretCol, component, params) { // console.log(params); var line = component.getLineAt(caretRow); var m = params['indent_tab_when_ends'] ? line.match(/^([ \t]*)(.*)$/) : line.match(/^([ \t]*)([^ \t]*)/); // console.log(m); var prepend_text = m[1]; if (params['indent_tab_when_ends'] || params['indent_tab_when_starts']) { m[2] = m[2].trim(); var indent_when_values = params['indent_tab_when_ends'] ? params['indent_tab_when_ends'].split(' ') : params['indent_tab_when_starts'].split(' '); for (var i=0; i#'); code = code.substr(start_ix+4, m[3].length)+'##'+code.substr(start_ix+m[0].length-m[1].length); any_change = true; } else { break; } } code_chunks.push(code); code = code_chunks.join(''); } re = /##/; while ( true ) { m = re.exec(code) if ( null == m ) { break; } tabstops[m[1]][1] = tabstops[m[1]][1].replace(/##/g, ''); tabstops[m[1]][2] = m.index; tabstops[m[1]][3] = tabstops[m[1]][1].length; code = code.substr(0, m.index)+code.substr(m.index+m[0].length).replace('##', ''); } // [getting mirrors] re = /\{\$\{(\d)\:([^\}]*)\}\}/; while ( true ) { m = re.exec(code) if ( null == m ) { break; } code = code.substr(0, m.index)+m[2]+code.substr(m.index+m[0].length); var ix_end = code.indexOf('{$'+m[1]+'}'); if ( -1 == ix_end ) { console.error('Invalid snippet definition. Mirror `?` does not have `{$?}` mirrored location specified.'.embed(m[1], m[1])); break; } tabstops[m[1]] = ['mi', m[2], m.index, m[2].length, ix_end]; if ( m.index > ix_end ) { console.error('Unsupported feature. Mirror `?` should have mirrored location positioned AFTER itself.'.embed(m[1])); } code = code.substr(0, ix_end)+code.substr(ix_end+4); } // [getting tabstops] re = /(^|[^\\])\$(\d)/; while (true) { m = re.exec(code); if ( null == m ) { break; } tab_id = m[2]; if ( tabstops[tab_id] ) { console.error('Invalid snippet definition. Tabstop `?` already defined as placeholder at position `?`. Snippet source: `?`.'.embed(tab_id, m.index, code)); break; } var start_ix = m.index+m[1].length; tabstops[tab_id] = ['ts', '', start_ix, 0]; code = code.substr(0, start_ix)+code.substr(start_ix+2); var offset = m[1].length + 2; for ( var tab_id in tabstops ) { // console.log('adjusting: %s, %s < %s', tab_id, start_ix, tabstops[tab_id][2]); if ( 'mi' == tabstops[tab_id][0] ) { if ( start_ix < tabstops[tab_id][2] ) { tabstops[tab_id][2] -= offset; } if ( start_ix < tabstops[tab_id][4] ) { tabstops[tab_id][4] -= offset; } } else if ( 'ph' == tabstops[tab_id][0] && start_ix < tabstops[tab_id][2] ) { tabstops[tab_id][2] -= offset; } } } // $0 not defined, will be at the end of the snippet by default if ( !tabstops[0] ) { tabstops[0] = ['ts', '', code.length, 0]; } // [postprocessing - unescape] code = code.replace(/\0/g, '$'); for ( var tab_id in tabstops ) { var placeholder = tabstops[tab_id]; // console.log('#%s : %o', tab_id, placeholder); } var scc = { firstInitialized:true, insertCaretPosition:[caretRow, caretCol], tabstops: tabstops, callbackIndex: -1, activeTabStopIndex:tabstops[1] ? 1 : 0, activeTabStopRange:[], activeTabStopContent:'', activeTabStopNested:[], wasSelection:wasSelection, tabActivation:tabActivation } if ( !scc.wasSelection ) { component.runAction(ac.chap.ACTION_CARET, {move:'prev_word'}); component.runAction(ac.chap.ACTION_SELECTION, {add:true}); component.runAction(ac.chap.ACTION_DELETE, {character:true}); } var tabstop = tabstops[scc.activeTabStopIndex]; component.runAction(ac.chap.ACTION_INSERT, {string:code.substr(0, tabstop[2])}); component.runAction(ac.chap.ACTION_INSERT, {string:code.substr(tabstop[2]), skipCaretChange:true}); // selecting default value var selection_changed = false; if ( '' != tabstop[1] ) { component.runAction(ac.chap.ACTION_CARET, {store:true}); component.runAction(ac.chap.ACTION_CARET, {moveBy:'column', value:tabstop[1].length}); component.runAction(ac.chap.ACTION_SELECTION, {add:true}); selection_changed = true; } if ( 0 != scc.activeTabStopIndex ) { // starting action listener this.snippetCompleteCache = scc; this.snippetCompleteCache.callbackIndex = component.addActionListener(ac.chap.ACTION_LISTENER_BOTH, this, this.snippetCompleteActionListener); } } return ac.chap.ACTION_RES_REDRAWCARET | ac.chap.ACTION_RES_REDRAWTEXT | (selection_changed ? ac.chap.ACTION_RES_SELECTIONCHANGED : 0); // return ac.chap.ACTION_RES_REDRAWCARET | ac.chap.ACTION_RES_REDRAWTEXT; } ac.chap.KeyMap.prototype.snippetCompleteActionListener = function(component, action, type, actionResult, actionType, params, caretRow, caretCol) { var scc = action.snippetCompleteCache; if ( ac.chap.ACTION_LISTENER_BEFORE == type && !scc.firstInitialized ) { // before action listener // check if we are still in the tabstop range // var offset = component.char_map[caretRow].substr() // console.log('activeTabStopRange: %o', scc.activeTabStopRange); if ( caretRow < scc.activeTabStopRange[0] || caretRow > scc.activeTabStopRange[2] || caretCol < scc.activeTabStopRange[1] || caretCol > scc.activeTabStopRange[3] ) { // out of range, canceling whole snippet logic component.removeActionListener(scc.callbackIndex); component.removeSelection(); delete action.snippetCompleteCache; // console.log('CANCELED'); return; } // console.log('before: %s - [%s,%s]', actionType, caretRow, caretCol); } else { // after action listener if ( scc.firstInitialized ) { scc.firstInitialized = false; var tabstop = scc.tabstops[scc.activeTabStopIndex]; caretCol -= tabstop[1].length; var code_rows = tabstop[1].split('\n'); var num_code_rows = code_rows.length; var to_caret_row = caretRow + num_code_rows - 1; var to_caret_col = (to_caret_row == caretRow ? caretCol : 0) + code_rows[num_code_rows-1].length; scc.activeTabStopRange = [caretRow, caretCol, to_caret_row, to_caret_col]; scc.stopMarker = component.char_map[to_caret_row].substr(to_caret_col); // creating list of nested tabstops for ( var i in scc.tabstops ) { if ( i == scc.activeTabStopIndex ) { continue; } var c_tabstop = scc.tabstops[i]; if ( c_tabstop[2] >= tabstop[2] && (c_tabstop[2] + c_tabstop[3] <= tabstop[2] + tabstop[3]) ) { scc.activeTabStopNested[i] = true; } } if ( 'mi' != tabstop[0] ) { scc.activeTabStopContent = tabstop[1]; } scc.firstRealRun = false; // action.snippetCompletePostInit(component, caretRow, caretCol); // console.log('firstRealRun: %o', scc.activeTabStopRange); } else { // console.log('next: %o', scc.activeTabStopRange); // adjust the range by finding the stop marker var n = component.char_map.length; var i = scc.activeTabStopRange[0]; var found = false; var max_iter = 50; // var offset_range = [scc.activeTabStopRange[2], scc.activeTabStopRange[3]]; var new_content = ''; var old_content = scc.activeTabStopContent; while ( i active_offset ) { if ( scc.activeTabStopNested[i] ) { // nested delete scc.tabstops[i]; } else { tabstop[2] += offset; // console.log('ADJUSTING: #%s by %s, new: %s', i, offset, tabstop[2]); } } } } } // console.log('after %s(%s, %s) : %o', actionType, caretRow, caretCol, scc.activeTabStopRange); } } ac.chap.KeyMap.prototype.compile = function(source) { /* example: KEY: -13+shift selection(add:true) caret(move:'up') KEY: -27 caret(move:'row_end') ... .. . */ var rows = source.split('\n'); var n = rows.length; var re_definition = /^KEY\:\s*[-\d]*[\+\w\s]*$/; var re_chain = /^[^\(]*\(.*\)\s*$/; var src = ''; var chain = []; var last_key_code = null; for ( var i=0; i)/i, 0, ac.chap.CHUNK_OPERATOR], [/(\(|\)|\[|\]|\{|\})/i, 0, ac.chap.CHUNK_PARENTHESIS] ]; this.wordDelimiter = /[\w\.\d]/; this.indentIgnoreMarker = /[\.]/; } ac.chap.lang = {}; /* loader stuff - you are free to modify as needed */ // !! Make sure, bundle_*.js is loaded prior launching this function - the bundle defines ac.chap.langEAmy, EAmyJavaScript etc. function showEditor(templateNode) { var source = templateNode.value; templateNode = $(templateNode); var w = templateNode.w(); var h = templateNode.h(); var node = templateNode.p().ib($$(), templateNode).w(w).h(h); templateNode.d(false); var language = ac.chap.lang.JavaScript; var keymap = ac.chap.keymap.EAmyJavaScript; var instance = $new(ac.chap.Window, {language:ac.chap.lang.EAmy, keymap:ac.chap.Keymap}); instance.addView(node, {theme:ac.chap.theme.EAmy, rowHeight:11, colWidth:7, wordWrap:true, tabelator:' '}); instance.show(); instance.setSnippets(eamy.snippets); instance.keymap.importSnippets(eamy.snippets); instance.edit(source); eamy.instances.push(instance); } // !! Remove from here and include in your section if you want. // document.write(''); // Performed upon loading the page. You are free to remove it and call the showEditor() (or modified version of it) in order to launch the editing component. Code of the showEditor should give you enough clue. $__tune.event.addListener(self, 'load', function(evt) { // this is basically a search for any
    ";html=t.translate(html,eAs[id]["settings"]["language"]);span.innerHTML=html;father=d.getElementById(id).parentNode;next=d.getElementById(id).nextSibling;if(next==null)father.appendChild(span); else father.insertBefore(span,next);}if(!eAs[id]["initialized"]){t.execCommand(id,"EA_init");if(eAs[id]["settings"]["display"]=="later"){eAs[id]["initialized"]=true;return;}}if(t.isIE){t.init_ie_textarea(id);}var area=eAs[id];for(i=0;i';}for(i=0;i';t.iframe_script+='';}if(!t.iframe_css){t.iframe_css="";}template=t.template.replace(/\[__BASEURL__\]/g,t.baseURL);template=template.replace("[__TOOLBAR__]",html_toolbar_content);template=t.translate(template,area["settings"]["language"],"template");template=template.replace("[__CSSRULES__]",t.iframe_css);template=template.replace("[__JSCODE__]",t.iframe_script);template=template.replace("[__EA_VERSION__]",t.version);area.textarea=d.getElementById(area["settings"]["id"]);eAs[area["settings"]["id"]]["textarea"]=area.textarea;if(typeof(window.frames["frame_"+area["settings"]["id"]])!='undefined')delete window.frames["frame_"+area["settings"]["id"]];father=area.textarea.parentNode;content=d.createElement("iframe");content.name="frame_"+area["settings"]["id"];content.id="frame_"+area["settings"]["id"];content.style.borderWidth="0px";setAttribute(content,"frameBorder","0");content.style.overflow="hidden";content.style.display="none";next=area.textarea.nextSibling;if(next==null)father.appendChild(content); else father.insertBefore(content,next);f=window.frames["frame_"+area["settings"]["id"]];f.document.open();f.eAs=eAs;f.area_id=area["settings"]["id"];f.document.area_id=area["settings"]["id"];f.document.write(template);f.document.close();},toggle:function(id,toggle_to){if(!toggle_to)toggle_to=(eAs[id]["displayed"]==true)?"off":"on";if(eAs[id]["displayed"]==true&&toggle_to=="off"){this.toggle_off(id);} else if(eAs[id]["displayed"]==false&&toggle_to=="on"){this.toggle_on(id);}return false;},toggle_off:function(id){var fs=window.frames,f,t,parNod,nxtSib,selStart,selEnd,scrollTop,scrollLeft;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];if(f.editArea.fullscreen['isFull'])f.editArea.toggle_full_screen(false);eAs[id]["displayed"]=false;t.wrap="off";setAttribute(t,"wrap","off");parNod=t.parentNode;nxtSib=t.nextSibling;parNod.removeChild(t);parNod.insertBefore(t,nxtSib);t.value=f.editArea.textarea.value;selStart=f.editArea.last_selection["selectionStart"];selEnd=f.editArea.last_selection["selectionEnd"];scrollTop=f.document.getElementById("result").scrollTop;scrollLeft=f.document.getElementById("result").scrollLeft;document.getElementById("frame_"+id).style.display='none';t.style.display="inline";try{t.focus();}catch(e){};if(this.isIE){t.selectionStart=selStart;t.selectionEnd=selEnd;t.focused=true;set_IE_selection(t);} else{if(this.isOpera&&this.isOpera < 9.6){t.setSelectionRange(0,0);}try{t.setSelectionRange(selStart,selEnd);}catch(e){};}t.scrollTop=scrollTop;t.scrollLeft=scrollLeft;f.editArea.execCommand("toggle_off");}},toggle_on:function(id){var fs=window.frames,f,t,selStart=0,selEnd=0,scrollTop=0,scrollLeft=0,curPos,elem;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];area=f.editArea;area.textarea.value=t.value;curPos=eAs[id]["settings"]["cursor_position"];if(t.use_last==true){selStart=t.last_selectionStart;selEnd=t.last_selectionEnd;scrollTop=t.last_scrollTop;scrollLeft=t.last_scrollLeft;t.use_last=false;} else if(curPos=="auto"){try{selStart=t.selectionStart;selEnd=t.selectionEnd;scrollTop=t.scrollTop;scrollLeft=t.scrollLeft;}catch(ex){}}this.set_editarea_size_from_textarea(id,document.getElementById("frame_"+id));t.style.display="none";document.getElementById("frame_"+id).style.display="inline";area.execCommand("focus");eAs[id]["displayed"]=true;area.execCommand("update_size");f.document.getElementById("result").scrollTop=scrollTop;f.document.getElementById("result").scrollLeft=scrollLeft;area.area_select(selStart,selEnd-selStart);area.execCommand("toggle_on");} else{elem=document.getElementById(id);elem.last_selectionStart=elem.selectionStart;elem.last_selectionEnd=elem.selectionEnd;elem.last_scrollTop=elem.scrollTop;elem.last_scrollLeft=elem.scrollLeft;elem.use_last=true;eAL.start(id);}},set_editarea_size_from_textarea:function(id,frame){var elem,width,height;elem=document.getElementById(id);width=Math.max(eAs[id]["settings"]["min_width"],elem.offsetWidth)+"px";height=Math.max(eAs[id]["settings"]["min_height"],elem.offsetHeight)+"px";if(elem.style.width.indexOf("%")!=-1)width=elem.style.width;if(elem.style.height.indexOf("%")!=-1)height=elem.style.height;frame.style.width=width;frame.style.height=height;},set_base_url:function(){var t=this,elems,i,docBasePath;if(!this.baseURL){elems=document.getElementsByTagName('script');for(i=0;i';html+='';return html;},get_control_html:function(button_name,lang){var t=this,i,but,html,si;for(i=0;i";case "|":case "separator":return '';case "select_font":html="";return html;case "syntax_selection":html="";return html;}return "["+button_name+"]";},get_template:function(){if(this.template==""){var xhr_object=null;if(window.XMLHttpRequest)xhr_object=new XMLHttpRequest(); else if(window.ActiveXObject)xhr_object=new ActiveXObject("Microsoft.XMLHTTP"); else{alert("XMLHTTPRequest not supported. EditArea not loaded");return;}xhr_object.open("GET",this.baseURL+"template.html",false);xhr_object.send(null);if(xhr_object.readyState==4)this.template=xhr_object.responseText; else this.has_error();}},translate:function(text,lang,mode){if(mode=="word")text=eAL.get_word_translation(text,lang); else if(mode="template"){eAL.current_language=lang;text=text.replace(/\{\$([^\}]+)\}/gm,eAL.translate_template);}return text;},translate_template:function(){return eAL.get_word_translation(EAL.prototype.translate_template.arguments[1],eAL.current_language);},get_word_translation:function(val,lang){var i;for(i in eAL.lang[lang]){if(i==val)return eAL.lang[lang][i];}return "_"+val;},load_script:function(url){var t=this,d=document,script,head;if(t.loadedFiles[url])return;try{script=d.createElement("script");script.type="text/javascript";script.src=url;script.charset="UTF-8";d.getElementsByTagName("head")[0].appendChild(script);}catch(e){d.write('');}t.loadedFiles[url]=true;},add_event:function(obj,name,handler){try{if(obj.attachEvent){obj.attachEvent("on"+name,handler);} else{obj.addEventListener(name,handler,false);}}catch(e){}},remove_event:function(obj,name,handler){try{if(obj.detachEvent)obj.detachEvent("on"+name,handler); else obj.removeEventListener(name,handler,false);}catch(e){}},reset:function(e){var formObj,is_child,i,x;formObj=eAL.isIE ? window.event.srcElement:e.target;if(formObj.tagName!='FORM')formObj=formObj.form;for(i in eAs){is_child=false;for(x=0;x old_sel["start"])this.setSelectionRange(id,new_sel["end"],new_sel["end"]); else this.setSelectionRange(id,old_sel["start"]+open_tag.length,old_sel["start"]+open_tag.length);},hide:function(id){var fs=window.frames,d=document,t=this,scrollTop,scrollLeft,span;if(d.getElementById(id)&&!t.hidden[id]){t.hidden[id]={};t.hidden[id]["selectionRange"]=t.getSelectionRange(id);if(d.getElementById(id).style.display!="none"){t.hidden[id]["scrollTop"]=d.getElementById(id).scrollTop;t.hidden[id]["scrollLeft"]=d.getElementById(id).scrollLeft;}if(fs["frame_"+id]){t.hidden[id]["toggle"]=eAs[id]["displayed"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){scrollTop=fs["frame_"+id].document.getElementById("result").scrollTop;scrollLeft=fs["frame_"+id].document.getElementById("result").scrollLeft;} else{scrollTop=d.getElementById(id).scrollTop;scrollLeft=d.getElementById(id).scrollLeft;}t.hidden[id]["scrollTop"]=scrollTop;t.hidden[id]["scrollLeft"]=scrollLeft;if(eAs[id]["displayed"]==true)eAL.toggle_off(id);}span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='none';}d.getElementById(id).style.display="none";}},show:function(id){var fs=window.frames,d=document,t=this,span;if((elem=d.getElementById(id))&&t.hidden[id]){elem.style.display="inline";elem.scrollTop=t.hidden[id]["scrollTop"];elem.scrollLeft=t.hidden[id]["scrollLeft"];span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='inline';}if(fs["frame_"+id]){elem.style.display="inline";if(t.hidden[id]["toggle"]==true)eAL.toggle_on(id);scrollTop=t.hidden[id]["scrollTop"];scrollLeft=t.hidden[id]["scrollLeft"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].document.getElementById("result").scrollTop=scrollTop;fs["frame_"+id].document.getElementById("result").scrollLeft=scrollLeft;} else{elem.scrollTop=scrollTop;elem.scrollLeft=scrollLeft;}}sel=t.hidden[id]["selectionRange"];t.setSelectionRange(id,sel["start"],sel["end"]);delete t.hidden[id];}},getCurrentFile:function(id){return this.execCommand(id,'get_file',this.execCommand(id,'curr_file'));},getFile:function(id,file_id){return this.execCommand(id,'get_file',file_id);},getAllFiles:function(id){return this.execCommand(id,'get_all_files()');},openFile:function(id,file_infos){return this.execCommand(id,'open_file',file_infos);},closeFile:function(id,file_id){return this.execCommand(id,'close_file',file_id);},setFileEditedMode:function(id,file_id,to){var reg1,reg2;reg1=new RegExp('\\\\','g');reg2=new RegExp('"','g');return this.execCommand(id,'set_file_edited_mode("'+file_id.replace(reg1,'\\\\').replace(reg2,'\\"')+'",'+to+')');},execCommand:function(id,cmd,fct_param){switch(cmd){case "EA_init":if(eAs[id]['settings']["EA_init_callback"].length>0)eval(eAs[id]['settings']["EA_init_callback"]+"('"+id+"');");break;case "EA_delete":if(eAs[id]['settings']["EA_delete_callback"].length>0)eval(eAs[id]['settings']["EA_delete_callback"]+"('"+id+"');");break;case "EA_submit":if(eAs[id]['settings']["submit_callback"].length>0)eval(eAs[id]['settings']["submit_callback"]+"('"+id+"');");break;}if(window.frames["frame_"+id]&&window.frames["frame_"+id].editArea){if(fct_param!=undefined)return eval('window.frames["frame_'+id+'"].editArea.'+cmd+'(fct_param);'); else return eval('window.frames["frame_'+id+'"].editArea.'+cmd+';');}return false;}};var eAL=new EAL();var eAs={}; function getAttribute(elm,aName){var aValue,taName,i;try{aValue=elm.getAttribute(aName);}catch(exept){}if(! aValue){for(i=0;i < elm.attributes.length;i++){taName=elm.attributes[i] .name.toLowerCase();if(taName==aName){aValue=elm.attributes[i] .value;return aValue;}}}return aValue;};function setAttribute(elm,attr,val){if(attr=="class"){elm.setAttribute("className",val);elm.setAttribute("class",val);} else{elm.setAttribute(attr,val);}};function getChildren(elem,elem_type,elem_attribute,elem_attribute_match,option,depth){if(!option)var option="single";if(!depth)var depth=-1;if(elem){var children=elem.childNodes;var result=null;var results=[];for(var x=0;x0){results=results.concat(result);}} else if(result!=null){return result;}}}}if(option=="all")return results;}return null;};function isChildOf(elem,parent){if(elem){if(elem==parent)return true;while(elem.parentNode !='undefined'){return isChildOf(elem.parentNode,parent);}}return false;};function getMouseX(e){if(e!=null&&typeof(e.pageX)!="undefined"){return e.pageX;} else{return(e!=null?e.x:event.x)+document.documentElement.scrollLeft;}};function getMouseY(e){if(e!=null&&typeof(e.pageY)!="undefined"){return e.pageY;} else{return(e!=null?e.y:event.y)+document.documentElement.scrollTop;}};function calculeOffsetLeft(r){return calculeOffset(r,"offsetLeft")};function calculeOffsetTop(r){return calculeOffset(r,"offsetTop")};function calculeOffset(element,attr){var offset=0;while(element){offset+=element[attr];element=element.offsetParent}return offset;};function get_css_property(elem,prop){if(document.defaultView){return document.defaultView.getComputedStyle(elem,null).getPropertyValue(prop);} else if(elem.currentStyle){var prop=prop.replace(/-\D/gi,function(sMatch){return sMatch.charAt(sMatch.length-1).toUpperCase();});return elem.currentStyle[prop];} else return null;}var _mCE;function start_move_element(e,id,frame){var elem_id=(e.target||e.srcElement).id;if(id)elem_id=id;if(!frame)frame=window;if(frame.event)e=frame.event;_mCE=frame.document.getElementById(elem_id);_mCE.frame=frame;frame.document.onmousemove=move_element;frame.document.onmouseup=end_move_element;mouse_x=getMouseX(e);mouse_y=getMouseY(e);_mCE.start_pos_x=mouse_x-(_mCE.style.left.replace("px","")||calculeOffsetLeft(_mCE));_mCE.start_pos_y=mouse_y-(_mCE.style.top.replace("px","")||calculeOffsetTop(_mCE));return false;};function end_move_element(e){_mCE.frame.document.onmousemove="";_mCE.frame.document.onmouseup="";_mCE=null;};function move_element(e){var newTop,newLeft,maxLeft;if(_mCE.frame&&_mCE.frame.event)e=_mCE.frame.event;newTop=getMouseY(e)-_mCE.start_pos_y;newLeft=getMouseX(e)-_mCE.start_pos_x;maxLeft=_mCE.frame.document.body.offsetWidth-_mCE.offsetWidth;max_top=_mCE.frame.document.body.offsetHeight-_mCE.offsetHeight;newTop=Math.min(Math.max(0,newTop),max_top);newLeft=Math.min(Math.max(0,newLeft),maxLeft);_mCE.style.top=newTop+"px";_mCE.style.left=newLeft+"px";return false;};var nav=eAL.nav;function getSelectionRange(textarea){return{"start":textarea.selectionStart,"end":textarea.selectionEnd};};function setSelectionRange(t,start,end){t.focus();start=Math.max(0,Math.min(t.value.length,start));end=Math.max(start,Math.min(t.value.length,end));if(nav.isOpera&&nav.isOpera < 9.6){t.selectionEnd=1;t.selectionStart=0;t.selectionEnd=1;t.selectionStart=0;}t.selectionStart=start;t.selectionEnd=end;if(nav.isIE)set_IE_selection(t);};function get_IE_selection(t){var d=document,div,range,stored_range,elem,scrollTop,relative_top,line_start,line_nb,range_start,range_end,tab;if(t&&t.focused){if(!t.ea_line_height){div=d.createElement("div");div.style.fontFamily=get_css_property(t,"font-family");div.style.fontSize=get_css_property(t,"font-size");div.style.visibility="hidden";div.innerHTML="0";d.body.appendChild(div);t.ea_line_height=div.offsetHeight;d.body.removeChild(div);}range=d.selection.createRange();try{stored_range=range.duplicate();stored_range.moveToElementText(t);stored_range.setEndPoint('EndToEnd',range);if(stored_range.parentElement()==t){elem=t;scrollTop=0;while(elem.parentNode){scrollTop+=elem.scrollTop;elem=elem.parentNode;}relative_top=range.offsetTop-calculeOffsetTop(t)+scrollTop;line_start=Math.round((relative_top / t.ea_line_height)+1);line_nb=Math.round(range.boundingHeight / t.ea_line_height);range_start=stored_range.text.length-range.text.length;tab=t.value.substr(0,range_start).split("\n");range_start+=(line_start-tab.length)*2;t.selectionStart=range_start;range_end=t.selectionStart+range.text.length;tab=t.value.substr(0,range_start+range.text.length).split("\n");range_end+=(line_start+line_nb-1-tab.length)*2;t.selectionEnd=range_end;}}catch(e){}}if(t&&t.id){setTimeout("get_IE_selection(document.getElementById('"+t.id+"'));",50);}};function IE_textarea_focus(){event.srcElement.focused=true;}function IE_textarea_blur(){event.srcElement.focused=false;}function set_IE_selection(t){var nbLineStart,nbLineStart,nbLineEnd,range;if(!window.closed){nbLineStart=t.value.substr(0,t.selectionStart).split("\n").length-1;nbLineEnd=t.value.substr(0,t.selectionEnd).split("\n").length-1;try{range=document.selection.createRange();range.moveToElementText(t);range.setEndPoint('EndToStart',range);range.moveStart('character',t.selectionStart-nbLineStart);range.moveEnd('character',t.selectionEnd-nbLineEnd-(t.selectionStart-nbLineStart));range.select();}catch(e){}}};eAL.waiting_loading["elements_functions.js"]="loaded"; EAL.prototype.start_resize_area=function(){var d=document,a,div,width,height,father;d.onmouseup=eAL.end_resize_area;d.onmousemove=eAL.resize_area;eAL.toggle(eAL.resize["id"]);a=eAs[eAL.resize["id"]]["textarea"];div=d.getElementById("edit_area_resize");if(!div){div=d.createElement("div");div.id="edit_area_resize";div.style.border="dashed #888888 1px";}width=a.offsetWidth-2;height=a.offsetHeight-2;div.style.display="block";div.style.width=width+"px";div.style.height=height+"px";father=a.parentNode;father.insertBefore(div,a);a.style.display="none";eAL.resize["start_top"]=calculeOffsetTop(div);eAL.resize["start_left"]=calculeOffsetLeft(div);};EAL.prototype.end_resize_area=function(e){var d=document,div,a,width,height;d.onmouseup="";d.onmousemove="";div=d.getElementById("edit_area_resize");a=eAs[eAL.resize["id"]]["textarea"];width=Math.max(eAs[eAL.resize["id"]]["settings"]["min_width"],div.offsetWidth-4);height=Math.max(eAs[eAL.resize["id"]]["settings"]["min_height"],div.offsetHeight-4);if(eAL.isIE==6){width-=2;height-=2;}a.style.width=width+"px";a.style.height=height+"px";div.style.display="none";a.style.display="inline";a.selectionStart=eAL.resize["selectionStart"];a.selectionEnd=eAL.resize["selectionEnd"];eAL.toggle(eAL.resize["id"]);return false;};EAL.prototype.resize_area=function(e){var allow,newHeight,newWidth;allow=eAs[eAL.resize["id"]]["settings"]["allow_resize"];if(allow=="both"||allow=="y"){newHeight=Math.max(20,getMouseY(e)-eAL.resize["start_top"]);document.getElementById("edit_area_resize").style.height=newHeight+"px";}if(allow=="both"||allow=="x"){newWidth=Math.max(20,getMouseX(e)-eAL.resize["start_left"]);document.getElementById("edit_area_resize").style.width=newWidth+"px";}return false;};eAL.waiting_loading["resize_area.js"]="loaded"; EAL.prototype.get_regexp=function(text_array){res="(\\b)(";for(i=0;i0)res+="|";res+=this.get_escaped_regexp(text_array[i]);}res+=")(\\b)";reg=new RegExp(res);return res;};EAL.prototype.get_escaped_regexp=function(str){return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g,"\\$1");};EAL.prototype.init_syntax_regexp=function(){var lang_style={};for(var lang in this.load_syntax){if(!this.syntax[lang]){this.syntax[lang]={};this.syntax[lang]["keywords_reg_exp"]={};this.keywords_reg_exp_nb=0;if(this.load_syntax[lang]['KEYWORDS']){param="g";if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false)param+="i";for(var i in this.load_syntax[lang]['KEYWORDS']){if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function")continue;this.syntax[lang]["keywords_reg_exp"][i]=new RegExp(this.get_regexp(this.load_syntax[lang]['KEYWORDS'][i]),param);this.keywords_reg_exp_nb++;}}if(this.load_syntax[lang]['OPERATORS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['OPERATORS']){if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);nb++;}if(str.length>0)this.syntax[lang]["operators_reg_exp"]=new RegExp("("+str+")","g");}if(this.load_syntax[lang]['DELIMITERS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['DELIMITERS']){if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);nb++;}if(str.length>0)this.syntax[lang]["delimiters_reg_exp"]=new RegExp("("+str+")","g");}var syntax_trace=[];this.syntax[lang]["quotes"]={};var quote_tab=[];if(this.load_syntax[lang]['QUOTEMARKS']){for(var i in this.load_syntax[lang]['QUOTEMARKS']){if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);this.syntax[lang]["quotes"][x]=x;quote_tab[quote_tab.length]="("+x+"(\\\\.|[^"+x+"])*(?:"+x+"|$))";syntax_trace.push(x);}}this.syntax[lang]["comments"]={};if(this.load_syntax[lang]['COMMENT_SINGLE']){for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))";syntax_trace.push(x);this.syntax[lang]["comments"][x]="\n";}}if(this.load_syntax[lang]['COMMENT_MULTI']){for(var i in this.load_syntax[lang]['COMMENT_MULTI']){if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function")continue;var start=this.get_escaped_regexp(i);var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))";syntax_trace.push(start);syntax_trace.push(end);this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i];}}if(quote_tab.length>0)this.syntax[lang]["comment_or_quote_reg_exp"]=new RegExp("("+quote_tab.join("|")+")","gi");if(syntax_trace.length>0)this.syntax[lang]["syntax_trace_regexp"]=new RegExp("((.|\n)*?)(\\\\*("+syntax_trace.join("|")+"|$))","gmi");if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){this.syntax[lang]["script_delimiters"]={};for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function")continue;this.syntax[lang]["script_delimiters"][i]=this.load_syntax[lang]['SCRIPT_DELIMITERS'];}}this.syntax[lang]["custom_regexp"]={};if(this.load_syntax[lang]['REGEXPS']){for(var i in this.load_syntax[lang]['REGEXPS']){if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function")continue;var val=this.load_syntax[lang]['REGEXPS'][i];if(!this.syntax[lang]["custom_regexp"][val['execute']])this.syntax[lang]["custom_regexp"][val['execute']]={};this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp':new RegExp(val['search'],val['modifiers']),'class':val['class']};}}if(this.load_syntax[lang]['STYLES']){lang_style[lang]={};for(var i in this.load_syntax[lang]['STYLES']){if(typeof(this.load_syntax[lang]['STYLES'][i])=="function")continue;if(typeof(this.load_syntax[lang]['STYLES'][i])!="string"){for(var j in this.load_syntax[lang]['STYLES'][i]){lang_style[lang][j]=this.load_syntax[lang]['STYLES'][i][j];}} else{lang_style[lang][i]=this.load_syntax[lang]['STYLES'][i];}}}var style="";for(var i in lang_style[lang]){if(lang_style[lang][i].length>0){style+="."+lang+" ."+i.toLowerCase()+" span{"+lang_style[lang][i]+"}\n";style+="."+lang+" ."+i.toLowerCase()+"{"+lang_style[lang][i]+"}\n";}}this.syntax[lang]["styles"]=style;}}};eAL.waiting_loading["reg_syntax.js"]="loaded"; var editAreaLoader= eAL;var editAreas=eAs;EditAreaLoader=EAL;editAreaLoader.iframe_script= "".replace(/Á/g,'this').replace(/Â/g,'textarea').replace(/Ã/g,'function').replace(/Ä/g,'prototype').replace(/Å/g,'settings').replace(/Æ/g,'length').replace(/Ç/g,'style').replace(/È/g,'parent').replace(/É/g,'last_selection').replace(/Ê/g,'value').replace(/Ë/g,'true').replace(/Ì/g,'false'); editAreaLoader.template= " EditArea [__CSSRULES__] [__JSCODE__]
    [__TOOLBAR__]
     
     
    {$position}: {$line_abbr} 0, {$char_abbr} 0 {$total}: {$line_abbr} 0, {$char_abbr} 0 resize
    {$processing}
    {$search} {$close_popup}
    {$replace} {$move_popup}

    {$find_next} {$replace} {$replace_all}
    {$close_popup}

    Editarea [__EA_VERSION__]


    {$shortcuts}:

    {$tab}: {$add_tab}
    {$shift}+{$tab}: {$remove_tab}
    {$ctrl}+f: {$search_command}
    {$ctrl}+r: {$replace_command}
    {$ctrl}+h: {$highlight}
    {$ctrl}+g: {$go_to_line}
    {$ctrl}+z: {$undo}
    {$ctrl}+y: {$redo}
    {$ctrl}+e: {$help}
    {$ctrl}+q, {$esc}: {$close_popup}
    {$accesskey} E: {$toggle}

    {$about_notice}
    "; editAreaLoader.iframe_css= ""; web2py-1.99.7.orig/applications/admin/static/edit_area/license.txt0000755000175000017500000000000011724764235023623 0ustar josejoseweb2py-1.99.7.orig/applications/admin/static/edit_area/license_lgpl.txt0000755000175000017500000005747611724764235024676 0ustar josejose GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS web2py-1.99.7.orig/applications/admin/static/edit_area/highlight.js0000755000175000017500000003704411724764235023767 0ustar josejose // change_to: "on" or "off" EditArea.prototype.change_highlight= function(change_to){ if(this.settings["syntax"].length==0 && change_to==false){ this.switchClassSticky(_$("highlight"), 'editAreaButtonDisabled', true); this.switchClassSticky(_$("reset_highlight"), 'editAreaButtonDisabled', true); return false; } if(this.do_highlight==change_to) return false; this.getIESelection(); var pos_start= this.textarea.selectionStart; var pos_end= this.textarea.selectionEnd; if(this.do_highlight===true || change_to==false) this.disable_highlight(); else this.enable_highlight(); this.textarea.focus(); this.textarea.selectionStart = pos_start; this.textarea.selectionEnd = pos_end; this.setIESelection(); }; EditArea.prototype.disable_highlight= function(displayOnly){ var t= this, a=t.textarea, new_Obj, old_class, new_class; t.selection_field.innerHTML=""; t.selection_field_text.innerHTML=""; t.content_highlight.style.visibility="hidden"; // replacing the node is far more faster than deleting it's content in firefox new_Obj= t.content_highlight.cloneNode(false); new_Obj.innerHTML= ""; t.content_highlight.parentNode.insertBefore(new_Obj, t.content_highlight); t.content_highlight.parentNode.removeChild(t.content_highlight); t.content_highlight= new_Obj; old_class= parent.getAttribute( a,"class" ); if(old_class){ new_class= old_class.replace( "hidden","" ); parent.setAttribute( a, "class", new_class ); } a.style.backgroundColor="transparent"; // needed in order to see the bracket finders //var icon= document.getElementById("highlight"); //setAttribute(icon, "class", getAttribute(icon, "class").replace(/ selected/g, "") ); //t.restoreClass(icon); //t.switchClass(icon,'editAreaButtonNormal'); t.switchClassSticky(_$("highlight"), 'editAreaButtonNormal', true); t.switchClassSticky(_$("reset_highlight"), 'editAreaButtonDisabled', true); t.do_highlight=false; t.switchClassSticky(_$("change_smooth_selection"), 'editAreaButtonSelected', true); if(typeof(t.smooth_selection_before_highlight)!="undefined" && t.smooth_selection_before_highlight===false){ t.change_smooth_selection_mode(false); } // this.textarea.style.backgroundColor="#FFFFFF"; }; EditArea.prototype.enable_highlight= function(){ var t=this, a=t.textarea, new_class; t.show_waiting_screen(); t.content_highlight.style.visibility="visible"; new_class =parent.getAttribute(a,"class")+" hidden"; parent.setAttribute( a, "class", new_class ); // IE can't manage mouse click outside text range without this if( t.isIE ) a.style.backgroundColor="#FFFFFF"; t.switchClassSticky(_$("highlight"), 'editAreaButtonSelected', false); t.switchClassSticky(_$("reset_highlight"), 'editAreaButtonNormal', false); t.smooth_selection_before_highlight=t.smooth_selection; if(!t.smooth_selection) t.change_smooth_selection_mode(true); t.switchClassSticky(_$("change_smooth_selection"), 'editAreaButtonDisabled', true); t.do_highlight=true; t.resync_highlight(); t.hide_waiting_screen(); }; /** * Ask to update highlighted text * @param Array infos - Array of datas returned by EditArea.get_selection_infos() */ EditArea.prototype.maj_highlight= function(infos){ // for speed mesure var debug_opti="",tps_start= new Date().getTime(), tps_middle_opti=new Date().getTime(); var t=this, hightlighted_text, updated_highlight; var textToHighlight=infos["full_text"], doSyntaxOpti = false, doHtmlOpti = false, stay_begin="", stay_end="", trace_new , trace_last; if(t.last_text_to_highlight==infos["full_text"] && t.resync_highlight!==true) return; // OPTIMISATION: will search to update only changed lines if(t.reload_highlight===true){ t.reload_highlight=false; }else if(textToHighlight.length==0){ textToHighlight="\n "; }else{ // get text change datas changes = t.checkTextEvolution(t.last_text_to_highlight,textToHighlight); // check if it can only reparse the changed text trace_new = t.get_syntax_trace(changes.newTextLine).replace(/\r/g, ''); trace_last = t.get_syntax_trace(changes.lastTextLine).replace(/\r/g, ''); doSyntaxOpti = ( trace_new == trace_last ); // check if the difference comes only from a new line created // => we have to remember that the editor can automaticaly add tabulation or space after the new line) if( !doSyntaxOpti && trace_new == "\n"+trace_last && /^[ \t\s]*\n[ \t\s]*$/.test( changes.newText.replace(/\r/g, '') ) && changes.lastText =="" ) { doSyntaxOpti = true; } // we do the syntax optimisation if( doSyntaxOpti ){ tps_middle_opti=new Date().getTime(); stay_begin= t.last_hightlighted_text.split("\n").slice(0, changes.lineStart).join("\n"); if(changes.lineStart>0) stay_begin+= "\n"; stay_end= t.last_hightlighted_text.split("\n").slice(changes.lineLastEnd+1).join("\n"); if(stay_end.length>0) stay_end= "\n"+stay_end; // Final check to see that we're not in the middle of span tags if( stay_begin.split(' trace: "+trace_new +"\nchanged_last_text: "+ch.lastText+" => trace: "+trace_last //debug_opti+= "\nchanged: "+ infos["full_text"].substring(ch.posStart, ch.posNewEnd); + "\nchanged_line: "+ch.newTextLine + "\nlast_changed_line: "+ch.lastTextLine +"\nstay_begin: "+ stay_begin.slice(-100) +"\nstay_end: "+ stay_end.substr( 0, 100 ); //debug_opti="start: "+stay_begin_len+ "("+nb_line_start_unchanged+") end: "+ (stay_end_len)+ "("+(splited.length-nb_line_end_unchanged)+") "; //debug_opti+="changed: "+ textToHighlight.substring(stay_begin_len, textToHighlight.length-stay_end_len)+" \n"; //debug_opti+="changed: "+ stay_begin.substr(stay_begin.length-200)+ "----------"+ textToHighlight+"------------------"+ stay_end.substr(0,200) +"\n"; +"\n"; } // END OPTIMISATION } tps_end_opti = new Date().getTime(); // apply highlight updated_highlight = t.colorize_text(textToHighlight); tpsAfterReg = new Date().getTime(); /*** * see if we can optimize for updating only the required part of the HTML code * * The goal here will be to find the text node concerned by the modification and to update it */ //------------------------------------------- // disable latest optimization tricks (introduced in 0.8.1 and removed in 0.8.2), TODO: check for another try later doSyntaxOpti = doHtmlOpti = false; if( doSyntaxOpti ) { try { var replacedBloc, i, nbStart = '', nbEnd = '', newHtml, lengthOld, lengthNew; replacedBloc = t.last_hightlighted_text.substring( stay_begin.length, t.last_hightlighted_text.length - stay_end.length ); lengthOld = replacedBloc.length; lengthNew = updated_highlight.length; // find the identical caracters at the beginning for( i=0; i < lengthOld && i < lengthNew && replacedBloc.charAt(i) == updated_highlight.charAt(i) ; i++ ) { } nbStart = i; // find the identical caracters at the end for( i=0; i + nbStart < lengthOld && i + nbStart < lengthNew && replacedBloc.charAt(lengthOld-i-1) == updated_highlight.charAt(lengthNew-i-1) ; i++ ) { } nbEnd = i; //console.log( nbStart, nbEnd, replacedBloc, updated_highlight ); // get the changes lastHtml = replacedBloc.substring( nbStart, lengthOld - nbEnd ); newHtml = updated_highlight.substring( nbStart, lengthNew - nbEnd ); // We can do the optimisation only if we havn't touch to span elements if( newHtml.indexOf('').replace( /&/g, '&'); nbOpendedSpan = beginStr.split(' 0 ) { nbClosed--; parentSpan = parentSpan.parentNode; } // find the position of the last opended tag while( parentSpan.parentNode != t.content_highlight && parentSpan.parentNode.tagName != 'PRE' && ( tmpMaxStartOffset = Math.max( 0, beginStr.lastIndexOf( '', maxStartOffset ) ); // count the number of sub spans nbSubSpanBefore = beginStr.substr( lastEndPos ).split('' ) ) == -1 ? beginStr.length : beginStr.length - ( lastIndex + 1 ); //nbUnchangedChars = ? beginStr.length : beginStr.substr( lastIndex + 1 ).replace( /</g, '<').replace( />/g, '>').replace( /&/g, '&').length; if( ( lastIndex = beginStr.lastIndexOf( '>' ) ) == -1 ) { nbUnchangedChars = beginStr.length; } else { nbUnchangedChars = beginStr.substr( lastIndex + 1 ).replace( /</g, '<').replace( />/g, '>').replace( /&/g, '&').length; //nbUnchangedChars += beginStr.substr( ).replace( /&/g, '&').replace( //g, '>').length - beginStr.length; } //alert( nbUnchangedChars ); // console.log( span, textNode, nbOpendedSpan,nbClosedSpan, span.nextSibling, textNode.length, nbUnchangedChars, lastHtml, lastHtml.length, newHtml, newHtml.length ); // alert( textNode.parentNode.className +'-'+ textNode.parentNode.tagName+"\n"+ textNode.data +"\n"+ nbUnchangedChars +"\n"+ lastHtml.length +"\n"+ newHtml +"\n"+ newHtml.length ); // console.log( nbUnchangedChars, lastIndex, beginStr.length, beginStr.replace(/&/g, '&'), lastHtml.length, '|', newHtml.replace( /\t/g, 't').replace( /\n/g, 'n').replace( /\r/g, 'r'), lastHtml.replace( /\t/g, 't').replace( /\n/g, 'n').replace( /\r/, 'r') ); // console.log( textNode.data.replace(/&/g, '&') ); // IE only manage \r for cariage return in textNode and not \n or \r\n if( t.isIE ) { nbUnchangedChars -= ( beginStr.substr( beginStr.length - nbUnchangedChars ).split("\n").length - 1 ); //alert( textNode.data.replace(/\r/g, '_r').replace(/\n/g, '_n')); textNode.replaceData( nbUnchangedChars, lastHtml.replace(/\n/g, '').length, newHtml.replace(/\n/g, '') ); } else { textNode.replaceData( nbUnchangedChars, lastHtml.length, newHtml ); } //--------] } } // an exception shouldn't occured but if replaceData failed at least it won't break everything catch( e ) { // throw e; // console.log( e ); doHtmlOpti = false; } } /*** END HTML update's optimisation ***/ // end test // console.log( (TPS6-TPS5), (TPS5-TPS4), (TPS4-TPS3), (TPS3-TPS2), (TPS2-TPS1), _CPT ); // get the new highlight content tpsAfterOpti2 = new Date().getTime(); hightlighted_text = stay_begin + updated_highlight + stay_end; if( !doHtmlOpti ) { // update the content of the highlight div by first updating a clone node (as there is no display in the same time for t node it's quite faster (5*)) var new_Obj= t.content_highlight.cloneNode(false); if( ( t.isIE && t.isIE < 8 ) || ( t.isOpera && t.isOpera < 9.6 ) ) new_Obj.innerHTML= "
    " + hightlighted_text + "
    "; else new_Obj.innerHTML= ""+ hightlighted_text +""; t.content_highlight.parentNode.replaceChild(new_Obj, t.content_highlight); t.content_highlight= new_Obj; } t.last_text_to_highlight= infos["full_text"]; t.last_hightlighted_text= hightlighted_text; tps3=new Date().getTime(); if(t.settings["debug"]){ //lineNumber=tab_text.length; //t.debug.value+=" \nNB char: "+_$("src").value.length+" Nb line: "+ lineNumber; t.debug.value= "Tps optimisation "+(tps_end_opti-tps_start) +" | tps reg exp: "+ (tpsAfterReg-tps_end_opti) +" | tps opti HTML : "+ (tpsAfterOpti2-tpsAfterReg) + ' '+ ( doHtmlOpti ? 'yes' : 'no' ) +" | tps update highlight content: "+ (tps3-tpsAfterOpti2) +" | tpsTotal: "+ (tps3-tps_start) + "("+tps3+")\n"+ debug_opti; // t.debug.value+= "highlight\n"+hightlighted_text;*/ } }; EditArea.prototype.resync_highlight= function(reload_now){ this.reload_highlight=true; this.last_text_to_highlight=""; this.focus(); if(reload_now) this.check_line_selection(false); }; web2py-1.99.7.orig/applications/admin/static/edit_area/edit_area_loader.js0000755000175000017500000010621211724764235025255 0ustar josejose/****** * * EditArea * Developped by Christophe Dolivet * Released under LGPL, Apache and BSD licenses (use the one you want) * ******/ function EditAreaLoader(){ var t=this; t.version= "0.8.2"; date= new Date(); t.start_time=date.getTime(); t.win= "loading"; // window loading state t.error= false; // to know if load is interrrupt t.baseURL=""; //t.suffix=""; t.template=""; t.lang= {}; // array of loaded speech language t.load_syntax= {}; // array of loaded syntax language for highlight mode t.syntax= {}; // array of initilized syntax language for highlight mode t.loadedFiles= []; t.waiting_loading= {}; // files that must be loaded in order to allow the script to really start // scripts that must be loaded in the iframe t.scripts_to_load= ["elements_functions", "resize_area", "reg_syntax"]; t.sub_scripts_to_load= ["edit_area", "manage_area" ,"edit_area_functions", "keyboard", "search_replace", "highlight", "regexp"]; t.syntax_display_name= { /*syntax_display_name_AUTO-FILL-BY-COMPRESSOR*/ }; t.resize= []; // contain resizing datas t.hidden= {}; // store datas of the hidden textareas t.default_settings= { //id: "src" // id of the textarea to transform debug: false ,smooth_selection: true ,font_size: "10" // not for IE ,font_family: "monospace" // can be "verdana,monospace". Allow non monospace font but Firefox get smaller tabulation with non monospace fonts. IE doesn't change the tabulation width and Opera doesn't take this option into account... ,start_highlight: false // if start with highlight ,toolbar: "search, go_to_line, fullscreen, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, word_wrap, |, help" ,begin_toolbar: "" // "new_document, save, load, |" ,end_toolbar: "" // or end_toolbar ,is_multi_files: false // enable the multi file mode (the textarea content is ignored) ,allow_resize: "both" // possible values: "no", "both", "x", "y" ,show_line_colors: false // if the highlight is disabled for the line currently beeing edited (if enabled => heavy CPU use) ,min_width: 400 ,min_height: 125 ,replace_tab_by_spaces: false ,allow_toggle: true // true or false ,language: "en" ,syntax: "" ,syntax_selection_allow: "basic,brainfuck,c,coldfusion,cpp,css,html,java,js,pas,perl,php,python,ruby,robotstxt,sql,tsql,vb,xml" ,display: "onload" // onload or later ,max_undo: 30 ,browsers: "known" // all or known ,plugins: "" // comma separated plugin list ,gecko_spellcheck: false // enable/disable by default the gecko_spellcheck ,fullscreen: false ,is_editable: true ,cursor_position: "begin" ,word_wrap: false // define if the text is wrapped of not in the textarea ,autocompletion: false // NOT IMPLEMENTED ,load_callback: "" // click on load button (function name) ,save_callback: "" // click on save button (function name) ,change_callback: "" // textarea onchange trigger (function name) ,submit_callback: "" // form submited (function name) ,EA_init_callback: "" // EditArea initiliazed (function name) ,EA_delete_callback: "" // EditArea deleted (function name) ,EA_load_callback: "" // EditArea fully loaded and displayed (function name) ,EA_unload_callback: "" // EditArea delete while being displayed (function name) ,EA_toggle_on_callback: "" // EditArea toggled on (function name) ,EA_toggle_off_callback: "" // EditArea toggled off (function name) ,EA_file_switch_on_callback: "" // a new tab is selected (called for the newly selected file) ,EA_file_switch_off_callback: "" // a new tab is selected (called for the previously selected file) ,EA_file_close_callback: "" // close a tab }; t.advanced_buttons = [ // id, button img, command (it will try to find the translation of "id"), is_file_specific ['new_document', 'newdocument.gif', 'new_document', false], ['search', 'search.gif', 'show_search', false], ['go_to_line', 'go_to_line.gif', 'go_to_line', false], ['undo', 'undo.gif', 'undo', true], ['redo', 'redo.gif', 'redo', true], ['change_smooth_selection', 'smooth_selection.gif', 'change_smooth_selection_mode', true], ['reset_highlight', 'reset_highlight.gif', 'resync_highlight', true], ['highlight', 'highlight.gif','change_highlight', true], ['help', 'help.gif', 'show_help', false], ['save', 'save.gif', 'save', false], ['load', 'load.gif', 'load', false], ['fullscreen', 'fullscreen.gif', 'toggle_full_screen', false], ['word_wrap', 'word_wrap.gif', 'toggle_word_wrap', true], ['autocompletion', 'autocompletion.gif', 'toggle_autocompletion', true] ]; // navigator identification t.set_browser_infos(t); if(t.isIE>=6 || t.isGecko || ( t.isWebKit && !t.isSafari<3 ) || t.isOpera>=9 || t.isCamino ) t.isValidBrowser=true; else t.isValidBrowser=false; t.set_base_url(); for(var i=0; i delete the previous one if(editAreas[s["id"]]) t.delete_instance(s["id"]); // init settings for(i in t.default_settings){ if(typeof(s[i])=="undefined") s[i]=t.default_settings[i]; } if(s["browsers"]=="known" && t.isValidBrowser==false){ return; } if(s["begin_toolbar"].length>0) s["toolbar"]= s["begin_toolbar"] +","+ s["toolbar"]; if(s["end_toolbar"].length>0) s["toolbar"]= s["toolbar"] +","+ s["end_toolbar"]; s["tab_toolbar"]= s["toolbar"].replace(/ /g,"").split(","); s["plugins"]= s["plugins"].replace(/ /g,"").split(","); for(i=0; i0){ s["syntax"]=s["syntax"].toLowerCase(); t.load_script(t.baseURL + "reg_syntax/"+ s["syntax"] + ".js"); } //alert(this.template); editAreas[s["id"]]= {"settings": s}; editAreas[s["id"]]["displayed"]=false; editAreas[s["id"]]["hidden"]=false; //if(settings["display"]=="onload") t.start(s["id"]); }, // delete an instance of an EditArea delete_instance : function(id){ var d=document,fs=window.frames,span,iframe; editAreaLoader.execCommand(id, "EA_delete"); if(fs["frame_"+id] && fs["frame_"+id].editArea) { if(editAreas[id]["displayed"]) editAreaLoader.toggle(id, "off"); fs["frame_"+id].editArea.execCommand("EA_unload"); } // remove toggle infos and debug textarea span= d.getElementById("EditAreaArroundInfos_"+id); if(span) span.parentNode.removeChild(span); // remove the iframe iframe= d.getElementById("frame_"+id); if(iframe){ iframe.parentNode.removeChild(iframe); //delete iframe; try { delete fs["frame_"+id]; } catch (e) {// Do nothing } } delete editAreas[id]; }, start : function(id){ var t=this,d=document,f,span,father,next,html='',html_toolbar_content='',template,content,i; // check that the window is loaded if(t.win!="loaded"){ setTimeout("editAreaLoader.start('"+id+"');", 50); return; } // check that all needed scripts are loaded for( i in t.waiting_loading){ if(t.waiting_loading[i]!="loaded" && typeof(t.waiting_loading[i])!="function"){ setTimeout("editAreaLoader.start('"+id+"');", 50); return; } } // wait until language and syntax files are loaded if(!t.lang[editAreas[id]["settings"]["language"]] || (editAreas[id]["settings"]["syntax"].length>0 && !t.load_syntax[editAreas[id]["settings"]["syntax"]]) ){ setTimeout("editAreaLoader.start('"+id+"');", 50); return; } // init the regexp for syntax highlight if(editAreas[id]["settings"]["syntax"].length>0) t.init_syntax_regexp(); // display toggle option and debug area if(!d.getElementById("EditAreaArroundInfos_"+id) && (editAreas[id]["settings"]["debug"] || editAreas[id]["settings"]["allow_toggle"])) { span= d.createElement("span"); span.id= "EditAreaArroundInfos_"+id; if(editAreas[id]["settings"]["allow_toggle"]){ checked=(editAreas[id]["settings"]["display"]=="onload")?"checked='checked'":""; html+="
    "; html+=""; html+="
    "; } if(editAreas[id]["settings"]["debug"]) html+="
    "; html= t.translate(html, editAreas[id]["settings"]["language"]); span.innerHTML= html; father= d.getElementById(id).parentNode; next= d.getElementById(id).nextSibling; if(next==null) father.appendChild(span); else father.insertBefore(span, next); } if(!editAreas[id]["initialized"]) { t.execCommand(id, "EA_init"); // ini callback if(editAreas[id]["settings"]["display"]=="later"){ editAreas[id]["initialized"]= true; return; } } if(t.isIE){ // launch IE selection checkup t.init_ie_textarea(id); } // get toolbar content var area=editAreas[id]; for(i=0; i'; } // add plugins scripts if not already loaded by the compressor (but need to load language in all the case) for(i=0; i'; t.iframe_script+=''; } // create css link for the iframe if the whole css text has not been already loaded by the compressor if(!t.iframe_css){ t.iframe_css=""; } // create template template= t.template.replace(/\[__BASEURL__\]/g, t.baseURL); template= template.replace("[__TOOLBAR__]",html_toolbar_content); // fill template with good language sentences template= t.translate(template, area["settings"]["language"], "template"); // add css_code template= template.replace("[__CSSRULES__]", t.iframe_css); // add js_code template= template.replace("[__JSCODE__]", t.iframe_script); // add version_code template= template.replace("[__EA_VERSION__]", t.version); //template=template.replace(/\{\$([^\}]+)\}/gm, this.traduc_template); //editAreas[area["settings"]["id"]]["template"]= template; area.textarea=d.getElementById(area["settings"]["id"]); editAreas[area["settings"]["id"]]["textarea"]=area.textarea; // if removing previous instances from DOM before (fix from Marcin) if(typeof(window.frames["frame_"+area["settings"]["id"]])!='undefined') delete window.frames["frame_"+area["settings"]["id"]]; // insert template in the document after the textarea father= area.textarea.parentNode; /* var container= document.createElement("div"); container.id= "EditArea_frame_container_"+area["settings"]["id"]; */ content= d.createElement("iframe"); content.name= "frame_"+area["settings"]["id"]; content.id= "frame_"+area["settings"]["id"]; content.style.borderWidth= "0px"; setAttribute(content, "frameBorder", "0"); // IE content.style.overflow="hidden"; content.style.display="none"; next= area.textarea.nextSibling; if(next==null) father.appendChild(content); else father.insertBefore(content, next) ; f=window.frames["frame_"+area["settings"]["id"]]; f.document.open(); f.editAreas=editAreas; f.area_id= area["settings"]["id"]; f.document.area_id= area["settings"]["id"]; f.document.write(template); f.document.close(); // frame.editAreaLoader=this; //editAreas[area["settings"]["id"]]["displayed"]=true; }, toggle : function(id, toggle_to){ /* if((editAreas[id]["displayed"]==true && toggle_to!="on") || toggle_to=="off"){ this.toggle_off(id); }else if((editAreas[id]["displayed"]==false && toggle_to!="off") || toggle_to=="on"){ this.toggle_on(id); }*/ if(!toggle_to) toggle_to= (editAreas[id]["displayed"]==true)?"off":"on"; if(editAreas[id]["displayed"]==true && toggle_to=="off"){ this.toggle_off(id); }else if(editAreas[id]["displayed"]==false && toggle_to=="on"){ this.toggle_on(id); } return false; }, // static function toggle_off : function(id){ var fs=window.frames,f,t,parNod,nxtSib,selStart,selEnd,scrollTop,scrollLeft; if(fs["frame_"+id]) { f = fs["frame_"+id]; t = editAreas[id]["textarea"]; if(f.editArea.fullscreen['isFull']) f.editArea.toggle_full_screen(false); editAreas[id]["displayed"]=false; // set wrap to off to keep same display mode (some browser get problem with this, so it need more complex operation t.wrap = "off"; // for IE setAttribute(t, "wrap", "off"); // for Firefox parNod = t.parentNode; nxtSib = t.nextSibling; parNod.removeChild(t); parNod.insertBefore(t, nxtSib); // restore values t.value= f.editArea.textarea.value; selStart = f.editArea.last_selection["selectionStart"]; selEnd = f.editArea.last_selection["selectionEnd"]; scrollTop = f.document.getElementById("result").scrollTop; scrollLeft = f.document.getElementById("result").scrollLeft; document.getElementById("frame_"+id).style.display='none'; t.style.display="inline"; try{ // IE will give an error when trying to focus an invisible or disabled textarea t.focus(); } catch(e){}; if(this.isIE){ t.selectionStart= selStart; t.selectionEnd = selEnd; t.focused = true; set_IE_selection(t); }else{ if(this.isOpera && this.isOpera < 9.6 ){ // Opera bug when moving selection start and selection end t.setSelectionRange(0, 0); } try{ t.setSelectionRange(selStart, selEnd); } catch(e) {}; } t.scrollTop= scrollTop; t.scrollLeft= scrollLeft; f.editArea.execCommand("toggle_off"); } }, // static function toggle_on : function(id){ var fs=window.frames,f,t,selStart=0,selEnd=0,scrollTop=0,scrollLeft=0,curPos,elem; if(fs["frame_"+id]) { f = fs["frame_"+id]; t = editAreas[id]["textarea"]; area= f.editArea; area.textarea.value= t.value; // store display values; curPos = editAreas[id]["settings"]["cursor_position"]; if(t.use_last==true) { selStart = t.last_selectionStart; selEnd = t.last_selectionEnd; scrollTop = t.last_scrollTop; scrollLeft = t.last_scrollLeft; t.use_last=false; } else if( curPos == "auto" ) { try{ selStart = t.selectionStart; selEnd = t.selectionEnd; scrollTop = t.scrollTop; scrollLeft = t.scrollLeft; //alert(scrollTop); }catch(ex){} } // set to good size this.set_editarea_size_from_textarea(id, document.getElementById("frame_"+id)); t.style.display="none"; document.getElementById("frame_"+id).style.display="inline"; area.execCommand("focus"); // without this focus opera doesn't manage well the iframe body height // restore display values editAreas[id]["displayed"]=true; area.execCommand("update_size"); f.document.getElementById("result").scrollTop= scrollTop; f.document.getElementById("result").scrollLeft= scrollLeft; area.area_select(selStart, selEnd-selStart); area.execCommand("toggle_on"); } else { /* if(this.isIE) get_IE_selection(document.getElementById(id)); */ elem= document.getElementById(id); elem.last_selectionStart= elem.selectionStart; elem.last_selectionEnd= elem.selectionEnd; elem.last_scrollTop= elem.scrollTop; elem.last_scrollLeft= elem.scrollLeft; elem.use_last=true; editAreaLoader.start(id); } }, set_editarea_size_from_textarea : function(id, frame){ var elem,width,height; elem = document.getElementById(id); width = Math.max(editAreas[id]["settings"]["min_width"], elem.offsetWidth)+"px"; height = Math.max(editAreas[id]["settings"]["min_height"], elem.offsetHeight)+"px"; if(elem.style.width.indexOf("%")!=-1) width = elem.style.width; if(elem.style.height.indexOf("%")!=-1) height = elem.style.height; //alert("h: "+height+" w: "+width); frame.style.width= width; frame.style.height= height; }, set_base_url : function(){ var t=this,elems,i,docBasePath; if( !this.baseURL ){ elems = document.getElementsByTagName('script'); for( i=0; i'; html += ''; return html; }, get_control_html : function(button_name, lang) { var t=this,i,but,html,si; for (i=0; i"; case "|": case "separator": return ''; case "select_font": html= ""; return html; case "syntax_selection": html= ""; return html; } return "["+button_name+"]"; }, get_template : function(){ if(this.template=="") { var xhr_object = null; if(window.XMLHttpRequest) // Firefox xhr_object = new XMLHttpRequest(); else if(window.ActiveXObject) // Internet Explorer xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); else { // XMLHttpRequest not supported alert("XMLHTTPRequest not supported. EditArea not loaded"); return; } xhr_object.open("GET", this.baseURL+"template.html", false); xhr_object.send(null); if(xhr_object.readyState == 4) this.template=xhr_object.responseText; else this.has_error(); } }, // translate text translate : function(text, lang, mode){ if(mode=="word") text=editAreaLoader.get_word_translation(text, lang); else if(mode="template"){ editAreaLoader.current_language= lang; text=text.replace(/\{\$([^\}]+)\}/gm, editAreaLoader.translate_template); } return text; }, translate_template : function(){ return editAreaLoader.get_word_translation(EditAreaLoader.prototype.translate_template.arguments[1], editAreaLoader.current_language); }, get_word_translation : function(val, lang){ var i; for( i in editAreaLoader.lang[lang]){ if(i == val) return editAreaLoader.lang[lang][i]; } return "_"+val; }, load_script : function(url){ var t=this,d=document,script,head; if( t.loadedFiles[url] ) return; //alert("load: "+url); try{ script= d.createElement("script"); script.type= "text/javascript"; script.src= url; script.charset= "UTF-8"; d.getElementsByTagName("head")[0].appendChild(script); }catch(e){ d.write(''); } t.loadedFiles[url] = true; }, add_event : function(obj, name, handler) { try{ if (obj.attachEvent) { obj.attachEvent("on" + name, handler); } else{ obj.addEventListener(name, handler, false); } }catch(e){} }, remove_event : function(obj, name, handler){ try{ if (obj.detachEvent) obj.detachEvent("on" + name, handler); else obj.removeEventListener(name, handler, false); }catch(e){} }, // reset all the editareas in the form that have been reseted reset : function(e){ var formObj,is_child,i,x; formObj = editAreaLoader.isIE ? window.event.srcElement : e.target; if(formObj.tagName!='FORM') formObj= formObj.form; for( i in editAreas ){ is_child= false; for( x=0;x old_sel["start"]) // if text was selected, cursor at the end this.setSelectionRange(id, new_sel["end"], new_sel["end"]); else // cursor in the middle this.setSelectionRange(id, old_sel["start"]+open_tag.length, old_sel["start"]+open_tag.length); }, // hide both EditArea and normal textarea hide : function(id){ var fs= window.frames,d=document,t=this,scrollTop,scrollLeft,span; if(d.getElementById(id) && !t.hidden[id]) { t.hidden[id]= {}; t.hidden[id]["selectionRange"]= t.getSelectionRange(id); if(d.getElementById(id).style.display!="none") { t.hidden[id]["scrollTop"]= d.getElementById(id).scrollTop; t.hidden[id]["scrollLeft"]= d.getElementById(id).scrollLeft; } if(fs["frame_"+id]) { t.hidden[id]["toggle"]= editAreas[id]["displayed"]; if(fs["frame_"+id] && editAreas[id]["displayed"]==true){ scrollTop = fs["frame_"+ id].document.getElementById("result").scrollTop; scrollLeft = fs["frame_"+ id].document.getElementById("result").scrollLeft; }else{ scrollTop = d.getElementById(id).scrollTop; scrollLeft = d.getElementById(id).scrollLeft; } t.hidden[id]["scrollTop"]= scrollTop; t.hidden[id]["scrollLeft"]= scrollLeft; if(editAreas[id]["displayed"]==true) editAreaLoader.toggle_off(id); } // hide toggle button and debug box span= d.getElementById("EditAreaArroundInfos_"+id); if(span){ span.style.display='none'; } // hide textarea d.getElementById(id).style.display= "none"; } }, // restore hidden EditArea and normal textarea show : function(id){ var fs= window.frames,d=document,t=this,span; if((elem=d.getElementById(id)) && t.hidden[id]) { elem.style.display= "inline"; elem.scrollTop= t.hidden[id]["scrollTop"]; elem.scrollLeft= t.hidden[id]["scrollLeft"]; span= d.getElementById("EditAreaArroundInfos_"+id); if(span){ span.style.display='inline'; } if(fs["frame_"+id]) { // restore toggle button and debug box // restore textarea elem.style.display= "inline"; // restore EditArea if(t.hidden[id]["toggle"]==true) editAreaLoader.toggle_on(id); scrollTop = t.hidden[id]["scrollTop"]; scrollLeft = t.hidden[id]["scrollLeft"]; if(fs["frame_"+id] && editAreas[id]["displayed"]==true){ fs["frame_"+ id].document.getElementById("result").scrollTop = scrollTop; fs["frame_"+ id].document.getElementById("result").scrollLeft = scrollLeft; }else{ elem.scrollTop = scrollTop; elem.scrollLeft = scrollLeft; } } // restore selection sel = t.hidden[id]["selectionRange"]; t.setSelectionRange(id, sel["start"], sel["end"]); delete t.hidden[id]; } }, // get the current file datas (for multi file editing mode) getCurrentFile : function(id){ return this.execCommand(id, 'get_file', this.execCommand(id, 'curr_file')); }, // get the given file datas (for multi file editing mode) getFile : function(id, file_id){ return this.execCommand(id, 'get_file', file_id); }, // get all the openned files datas (for multi file editing mode) getAllFiles : function(id){ return this.execCommand(id, 'get_all_files()'); }, // open a file (for multi file editing mode) openFile : function(id, file_infos){ return this.execCommand(id, 'open_file', file_infos); }, // close the given file (for multi file editing mode) closeFile : function(id, file_id){ return this.execCommand(id, 'close_file', file_id); }, // close the given file (for multi file editing mode) setFileEditedMode : function(id, file_id, to){ var reg1,reg2; reg1 = new RegExp('\\\\', 'g'); reg2 = new RegExp('"', 'g'); return this.execCommand(id, 'set_file_edited_mode("'+ file_id.replace(reg1, '\\\\').replace(reg2, '\\"') +'", '+ to +')'); }, // allow to access to editarea functions and datas (for advanced users only) execCommand : function(id, cmd, fct_param){ switch(cmd){ case "EA_init": if(editAreas[id]['settings']["EA_init_callback"].length>0) eval(editAreas[id]['settings']["EA_init_callback"]+"('"+ id +"');"); break; case "EA_delete": if(editAreas[id]['settings']["EA_delete_callback"].length>0) eval(editAreas[id]['settings']["EA_delete_callback"]+"('"+ id +"');"); break; case "EA_submit": if(editAreas[id]['settings']["submit_callback"].length>0) eval(editAreas[id]['settings']["submit_callback"]+"('"+ id +"');"); break; } if(window.frames["frame_"+id] && window.frames["frame_"+ id].editArea){ if(fct_param!=undefined) return eval('window.frames["frame_'+ id +'"].editArea.'+ cmd +'(fct_param);'); else return eval('window.frames["frame_'+ id +'"].editArea.'+ cmd +';'); } return false; } }; var editAreaLoader= new EditAreaLoader(); var editAreas= {}; web2py-1.99.7.orig/applications/admin/static/edit_area/resize_area.js0000755000175000017500000000441111724764235024301 0ustar josejose EditAreaLoader.prototype.start_resize_area= function(){ var d=document,a,div,width,height,father; d.onmouseup= editAreaLoader.end_resize_area; d.onmousemove= editAreaLoader.resize_area; editAreaLoader.toggle(editAreaLoader.resize["id"]); a = editAreas[editAreaLoader.resize["id"]]["textarea"]; div = d.getElementById("edit_area_resize"); if(!div){ div= d.createElement("div"); div.id="edit_area_resize"; div.style.border="dashed #888888 1px"; } width = a.offsetWidth -2; height = a.offsetHeight -2; div.style.display = "block"; div.style.width = width+"px"; div.style.height = height+"px"; father= a.parentNode; father.insertBefore(div, a); a.style.display="none"; editAreaLoader.resize["start_top"]= calculeOffsetTop(div); editAreaLoader.resize["start_left"]= calculeOffsetLeft(div); }; EditAreaLoader.prototype.end_resize_area= function(e){ var d=document,div,a,width,height; d.onmouseup=""; d.onmousemove=""; div = d.getElementById("edit_area_resize"); a= editAreas[editAreaLoader.resize["id"]]["textarea"]; width = Math.max(editAreas[editAreaLoader.resize["id"]]["settings"]["min_width"], div.offsetWidth-4); height = Math.max(editAreas[editAreaLoader.resize["id"]]["settings"]["min_height"], div.offsetHeight-4); if(editAreaLoader.isIE==6){ width-=2; height-=2; } a.style.width = width+"px"; a.style.height = height+"px"; div.style.display = "none"; a.style.display = "inline"; a.selectionStart = editAreaLoader.resize["selectionStart"]; a.selectionEnd = editAreaLoader.resize["selectionEnd"]; editAreaLoader.toggle(editAreaLoader.resize["id"]); return false; }; EditAreaLoader.prototype.resize_area= function(e){ var allow,newHeight,newWidth; allow = editAreas[editAreaLoader.resize["id"]]["settings"]["allow_resize"]; if(allow=="both" || allow=="y") { newHeight = Math.max(20, getMouseY(e)- editAreaLoader.resize["start_top"]); document.getElementById("edit_area_resize").style.height= newHeight+"px"; } if(allow=="both" || allow=="x") { newWidth= Math.max(20, getMouseX(e)- editAreaLoader.resize["start_left"]); document.getElementById("edit_area_resize").style.width= newWidth+"px"; } return false; }; editAreaLoader.waiting_loading["resize_area.js"]= "loaded"; web2py-1.99.7.orig/applications/admin/static/edit_area/edit_area.css0000755000175000017500000002054611724764235024110 0ustar josejosebody, html{ margin: 0; padding: 0; height: 100%; border: none; overflow: hidden; background-color: #FFF; } body, html, table, form, textarea{ font: 12px monospace, sans-serif; } #editor{ border: solid #888 1px; overflow: hidden; } #result{ z-index: 4; overflow-x: auto; overflow-y: scroll; border-top: solid #888 1px; border-bottom: solid #888 1px; position: relative; clear: both; } #result.empty{ overflow: hidden; } #container{ overflow: hidden; border: solid blue 0; position: relative; z-index: 10; padding: 0 5px 0 45px; /*padding-right: 5px;*/ } #textarea{ position: relative; top: 0; left: 0; margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; z-index: 7; border-width: 0; background-color: transparent; resize: none; } #textarea, #textarea:hover{ outline: none; /* safari outline fix */ } #content_highlight{ white-space: pre; margin: 0; padding: 0; position : absolute; z-index: 4; overflow: visible; } #selection_field, #selection_field_text{ margin: 0; background-color: #E1F2F9; /* height: 1px; */ position: absolute; z-index: 5; top: -100px; padding: 0; white-space: pre; overflow: hidden; } #selection_field.show_colors { z-index: 3; background-color:#EDF9FC; } #selection_field strong{ font-weight:normal; } #selection_field.show_colors *, #selection_field_text * { visibility: hidden; } #selection_field_text{ background-color:transparent; } #selection_field_text strong{ font-weight:normal; background-color:#3399FE; color: #FFF; visibility:visible; } #container.word_wrap #content_highlight, #container.word_wrap #selection_field, #container.word_wrap #selection_field_text, #container.word_wrap #test_font_size{ white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ width: 99%; } #line_number{ position: absolute; overflow: hidden; border-right: solid black 1px; z-index:8; width: 38px; padding: 0 5px 0 0; margin: 0 0 0 -45px; text-align: right; color: #AAAAAA; } #test_font_size{ padding: 0; margin: 0; visibility: hidden; position: absolute; white-space: pre; } pre{ margin: 0; padding: 0; } .hidden{ opacity: 0.2; filter:alpha(opacity=20); } #result .edit_area_cursor{ position: absolute; z-index:6; background-color: #FF6633; top: -100px; margin: 0; } #result .edit_area_selection_field .overline{ background-color: #996600; } /* area popup */ .editarea_popup{ border: solid 1px #888888; background-color: #ECE9D8; width: 250px; padding: 4px; position: absolute; visibility: hidden; z-index: 15; top: -500px; } .editarea_popup, .editarea_popup table{ font-family: sans-serif; font-size: 10pt; } .editarea_popup img{ border: 0; } .editarea_popup .close_popup{ float: right; line-height: 16px; border: 0; padding: 0; } .editarea_popup h1,.editarea_popup h2,.editarea_popup h3,.editarea_popup h4,.editarea_popup h5,.editarea_popup h6{ margin: 0; padding: 0; } .editarea_popup .copyright{ text-align: right; } /* Area_search */ div#area_search_replace{ /*width: 250px;*/ } div#area_search_replace img{ border: 0; } div#area_search_replace div.button{ text-align: center; line-height: 1.7em; } div#area_search_replace .button a{ cursor: pointer; border: solid 1px #888888; background-color: #DEDEDE; text-decoration: none; padding: 0 2px; color: #000000; white-space: nowrap; } div#area_search_replace a:hover{ /*border: solid 1px #888888;*/ background-color: #EDEDED; } div#area_search_replace #move_area_search_replace{ cursor: move; border: solid 1px #888; } div#area_search_replace #close_area_search_replace{ text-align: right; vertical-align: top; white-space: nowrap; } div#area_search_replace #area_search_msg{ height: 18px; overflow: hidden; border-top: solid 1px #888; margin-top: 3px; } /* area help */ #edit_area_help{ width: 350px; } #edit_area_help div.close_popup{ float: right; } /* area_toolbar */ .area_toolbar{ /*font: 11px sans-serif;*/ width: 100%; /*height: 21px; */ margin: 0; padding: 0; background-color: #ECE9D8; text-align: center; } .area_toolbar, .area_toolbar table{ font: 11px sans-serif; } .area_toolbar img{ border: 0; vertical-align: middle; } .area_toolbar input{ margin: 0; padding: 0; } .area_toolbar select{ font-family: 'MS Sans Serif',sans-serif,Verdana,Arial; font-size: 7pt; font-weight: normal; margin: 2px 0 0 0 ; padding: 0; vertical-align: top; background-color: #F0F0EE; } table.statusbar{ width: 100%; } .area_toolbar td.infos{ text-align: center; width: 130px; border-right: solid 1px #888; border-width: 0 1px 0 0; padding: 0; } .area_toolbar td.total{ text-align: right; width: 50px; padding: 0; } .area_toolbar td.resize{ text-align: right; } /* .area_toolbar span{ line-height: 1px; padding: 0; margin: 0; }*/ .area_toolbar span#resize_area{ cursor: nw-resize; visibility: hidden; } /* toolbar buttons */ .editAreaButtonNormal, .editAreaButtonOver, .editAreaButtonDown, .editAreaSeparator, .editAreaSeparatorLine, .editAreaButtonDisabled, .editAreaButtonSelected { border: 0; margin: 0; padding: 0; background: transparent; margin-top: 0; margin-left: 1px; padding: 0; } .editAreaButtonNormal { border: 1px solid #ECE9D8 !important; cursor: pointer; } .editAreaButtonOver { border: 1px solid #0A246A !important; cursor: pointer; background-color: #B6BDD2; } .editAreaButtonDown { cursor: pointer; border: 1px solid #0A246A !important; background-color: #8592B5; } .editAreaButtonSelected { border: 1px solid #C0C0BB !important; cursor: pointer; background-color: #F4F2E8; } .editAreaButtonDisabled { filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); -moz-opacity:0.3; opacity: 0.3; border: 1px solid #F0F0EE !important; cursor: pointer; } .editAreaSeparatorLine { margin: 1px 2px; background-color: #C0C0BB; width: 2px; height: 18px; } /* waiting screen */ #processing{ display: none; background-color:#ECE9D8; border: solid #888 1px; position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 100; text-align: center; } #processing_text{ position:absolute; left: 50%; top: 50%; width: 200px; height: 20px; margin-left: -100px; margin-top: -10px; text-align: center; } /* end */ /**** tab browsing area ****/ #tab_browsing_area{ display: none; background-color: #CCC9A8; border-top: 1px solid #888; text-align: left; margin: 0; } #tab_browsing_list { padding: 0; margin: 0; list-style-type: none; white-space: nowrap; } #tab_browsing_list li { float: left; margin: -1px; } #tab_browsing_list a { position: relative; display: block; text-decoration: none; float: left; cursor: pointer; line-height:14px; } #tab_browsing_list a span { display: block; color: #000; background: #ECE9D8; border: 1px solid #888; border-width: 1px 1px 0; text-align: center; padding: 2px 2px 1px 4px; position: relative; /*IE 6 hack */ } #tab_browsing_list a b { display: block; border-bottom: 2px solid #617994; } #tab_browsing_list a .edited { display: none; } #tab_browsing_list a.edited .edited { display: inline; } #tab_browsing_list a img{ margin-left: 7px; } #tab_browsing_list a.edited img{ margin-left: 3px; } #tab_browsing_list a:hover span { background: #F4F2E8; border-color: #0A246A; } #tab_browsing_list .selected a span{ background: #046380; color: #FFF; } #no_file_selected{ height: 100%; width: 150%; /* Opera need more than 100% */ background: #CCC; display: none; z-index: 20; position: absolute; } /*** Non-editable mode ***/ .non_editable #editor { border-width: 0 1px; } .non_editable .area_toolbar { display: none; } /*** Auto completion ***/ #auto_completion_area { background: #FFF; border: solid 1px #888; position: absolute; z-index: 15; width: 280px; height: 180px; overflow: auto; display:none; } #auto_completion_area a, #auto_completion_area a:visited { display: block; padding: 0 2px 1px; color: #000; text-decoration:none; } #auto_completion_area a:hover, #auto_completion_area a:focus, #auto_completion_area a.focus { background: #D6E1FE; text-decoration:none; } #auto_completion_area ul { margin: 0; padding: 0; list-style: none inside; } #auto_completion_area li { padding: 0; } #auto_completion_area .prefix { font-style: italic; padding: 0 3px; } web2py-1.99.7.orig/applications/admin/static/edit_area/license_bsd.txt0000755000175000017500000000272311724764235024471 0ustar josejoseCopyright (c) 2008, Christophe Dolivet All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of EditArea nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.web2py-1.99.7.orig/applications/admin/static/edit_area/plugins/0000755000175000017500000000000011724764235023130 5ustar josejoseweb2py-1.99.7.orig/applications/admin/static/edit_area/plugins/zencoding/0000755000175000017500000000000011724764235025110 5ustar josejoseweb2py-1.99.7.orig/applications/admin/static/edit_area/plugins/zencoding/core.js0000644000175000017500000010416311724764235026403 0ustar josejosevar zen_settings={"variables":{"lang":"en","locale":"en-US","charset":"UTF-8","profile":"xhtml","indentation":"\t"},"css":{"snippets":{"@i":"@import url(|);","@m":"@media print {\n\t|\n}","@f":"@font-face {\n\tfont-family:|;\n\tsrc:url(|);\n}","!":"!important","pos":"position:|;","pos:s":"position:static;","pos:a":"position:absolute;","pos:r":"position:relative;","pos:f":"position:fixed;","t":"top:|;","t:a":"top:auto;","r":"right:|;","r:a":"right:auto;","b":"bottom:|;","b:a":"bottom:auto;","l":"left:|;","l:a":"left:auto;","z":"z-index:|;","z:a":"z-index:auto;","fl":"float:|;","fl:n":"float:none;","fl:l":"float:left;","fl:r":"float:right;","cl":"clear:|;","cl:n":"clear:none;","cl:l":"clear:left;","cl:r":"clear:right;","cl:b":"clear:both;","d":"display:|;","d:n":"display:none;","d:b":"display:block;","d:ib":"display:inline;","d:li":"display:list-item;","d:ri":"display:run-in;","d:cp":"display:compact;","d:tb":"display:table;","d:itb":"display:inline-table;","d:tbcp":"display:table-caption;","d:tbcl":"display:table-column;","d:tbclg":"display:table-column-group;","d:tbhg":"display:table-header-group;","d:tbfg":"display:table-footer-group;","d:tbr":"display:table-row;","d:tbrg":"display:table-row-group;","d:tbc":"display:table-cell;","d:rb":"display:ruby;","d:rbb":"display:ruby-base;","d:rbbg":"display:ruby-base-group;","d:rbt":"display:ruby-text;","d:rbtg":"display:ruby-text-group;","v":"visibility:|;","v:v":"visibility:visible;","v:h":"visibility:hidden;","v:c":"visibility:collapse;","ov":"overflow:|;","ov:v":"overflow:visible;","ov:h":"overflow:hidden;","ov:s":"overflow:scroll;","ov:a":"overflow:auto;","ovx":"overflow-x:|;","ovx:v":"overflow-x:visible;","ovx:h":"overflow-x:hidden;","ovx:s":"overflow-x:scroll;","ovx:a":"overflow-x:auto;","ovy":"overflow-y:|;","ovy:v":"overflow-y:visible;","ovy:h":"overflow-y:hidden;","ovy:s":"overflow-y:scroll;","ovy:a":"overflow-y:auto;","ovs":"overflow-style:|;","ovs:a":"overflow-style:auto;","ovs:s":"overflow-style:scrollbar;","ovs:p":"overflow-style:panner;","ovs:m":"overflow-style:move;","ovs:mq":"overflow-style:marquee;","zoo":"zoom:1;","cp":"clip:|;","cp:a":"clip:auto;","cp:r":"clip:rect(|);","bxz":"box-sizing:|;","bxz:cb":"box-sizing:content-box;","bxz:bb":"box-sizing:border-box;","bxsh":"box-shadow:|;","bxsh:n":"box-shadow:none;","bxsh:w":"-webkit-box-shadow:0 0 0 #000;","bxsh:m":"-moz-box-shadow:0 0 0 0 #000;","m":"margin:|;","m:a":"margin:auto;","m:0":"margin:0;","m:2":"margin:0 0;","m:3":"margin:0 0 0;","m:4":"margin:0 0 0 0;","mt":"margin-top:|;","mt:a":"margin-top:auto;","mr":"margin-right:|;","mr:a":"margin-right:auto;","mb":"margin-bottom:|;","mb:a":"margin-bottom:auto;","ml":"margin-left:|;","ml:a":"margin-left:auto;","p":"padding:|;","p:0":"padding:0;","p:2":"padding:0 0;","p:3":"padding:0 0 0;","p:4":"padding:0 0 0 0;","pt":"padding-top:|;","pr":"padding-right:|;","pb":"padding-bottom:|;","pl":"padding-left:|;","w":"width:|;","w:a":"width:auto;","h":"height:|;","h:a":"height:auto;","maw":"max-width:|;","maw:n":"max-width:none;","mah":"max-height:|;","mah:n":"max-height:none;","miw":"min-width:|;","mih":"min-height:|;","o":"outline:|;","o:n":"outline:none;","oo":"outline-offset:|;","ow":"outline-width:|;","os":"outline-style:|;","oc":"outline-color:#000;","oc:i":"outline-color:invert;","bd":"border:|;","bd+":"border:1px solid #000;","bd:n":"border:none;","bdbk":"border-break:|;","bdbk:c":"border-break:close;","bdcl":"border-collapse:|;","bdcl:c":"border-collapse:collapse;","bdcl:s":"border-collapse:separate;","bdc":"border-color:#000;","bdi":"border-image:url(|);","bdi:n":"border-image:none;","bdi:w":"-webkit-border-image:url(|) 0 0 0 0 stretch stretch;","bdi:m":"-moz-border-image:url(|) 0 0 0 0 stretch stretch;","bdti":"border-top-image:url(|);","bdti:n":"border-top-image:none;","bdri":"border-right-image:url(|);","bdri:n":"border-right-image:none;","bdbi":"border-bottom-image:url(|);","bdbi:n":"border-bottom-image:none;","bdli":"border-left-image:url(|);","bdli:n":"border-left-image:none;","bdci":"border-corner-image:url(|);","bdci:n":"border-corner-image:none;","bdci:c":"border-corner-image:continue;","bdtli":"border-top-left-image:url(|);","bdtli:n":"border-top-left-image:none;","bdtli:c":"border-top-left-image:continue;","bdtri":"border-top-right-image:url(|);","bdtri:n":"border-top-right-image:none;","bdtri:c":"border-top-right-image:continue;","bdbri":"border-bottom-right-image:url(|);","bdbri:n":"border-bottom-right-image:none;","bdbri:c":"border-bottom-right-image:continue;","bdbli":"border-bottom-left-image:url(|);","bdbli:n":"border-bottom-left-image:none;","bdbli:c":"border-bottom-left-image:continue;","bdf":"border-fit:|;","bdf:c":"border-fit:clip;","bdf:r":"border-fit:repeat;","bdf:sc":"border-fit:scale;","bdf:st":"border-fit:stretch;","bdf:ow":"border-fit:overwrite;","bdf:of":"border-fit:overflow;","bdf:sp":"border-fit:space;","bdl":"border-length:|;","bdl:a":"border-length:auto;","bdsp":"border-spacing:|;","bds":"border-style:|;","bds:n":"border-style:none;","bds:h":"border-style:hidden;","bds:dt":"border-style:dotted;","bds:ds":"border-style:dashed;","bds:s":"border-style:solid;","bds:db":"border-style:double;","bds:dtds":"border-style:dot-dash;","bds:dtdtds":"border-style:dot-dot-dash;","bds:w":"border-style:wave;","bds:g":"border-style:groove;","bds:r":"border-style:ridge;","bds:i":"border-style:inset;","bds:o":"border-style:outset;","bdw":"border-width:|;","bdt":"border-top:|;","bdt+":"border-top:1px solid #000;","bdt:n":"border-top:none;","bdtw":"border-top-width:|;","bdts":"border-top-style:|;","bdts:n":"border-top-style:none;","bdtc":"border-top-color:#000;","bdr":"border-right:|;","bdr+":"border-right:1px solid #000;","bdr:n":"border-right:none;","bdrw":"border-right-width:|;","bdrs":"border-right-style:|;","bdrs:n":"border-right-style:none;","bdrc":"border-right-color:#000;","bdb":"border-bottom:|;","bdb+":"border-bottom:1px solid #000;","bdb:n":"border-bottom:none;","bdbw":"border-bottom-width:|;","bdbs":"border-bottom-style:|;","bdbs:n":"border-bottom-style:none;","bdbc":"border-bottom-color:#000;","bdl":"border-left:|;","bdl+":"border-left:1px solid #000;","bdl:n":"border-left:none;","bdlw":"border-left-width:|;","bdls":"border-left-style:|;","bdls:n":"border-left-style:none;","bdlc":"border-left-color:#000;","bdrs":"border-radius:|;","bdtrrs":"border-top-right-radius:|;","bdtlrs":"border-top-left-radius:|;","bdbrrs":"border-bottom-right-radius:|;","bdblrs":"border-bottom-left-radius:|;","bg":"background:|;","bg+":"background:#FFF url(|) 0 0 no-repeat;","bg:n":"background:none;","bg:ie":"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='|x.png');","bgc":"background-color:#FFF;","bgi":"background-image:url(|);","bgi:n":"background-image:none;","bgr":"background-repeat:|;","bgr:n":"background-repeat:no-repeat;","bgr:x":"background-repeat:repeat-x;","bgr:y":"background-repeat:repeat-y;","bga":"background-attachment:|;","bga:f":"background-attachment:fixed;","bga:s":"background-attachment:scroll;","bgp":"background-position:0 0;","bgpx":"background-position-x:|;","bgpy":"background-position-y:|;","bgbk":"background-break:|;","bgbk:bb":"background-break:bounding-box;","bgbk:eb":"background-break:each-box;","bgbk:c":"background-break:continuous;","bgcp":"background-clip:|;","bgcp:bb":"background-clip:border-box;","bgcp:pb":"background-clip:padding-box;","bgcp:cb":"background-clip:content-box;","bgcp:nc":"background-clip:no-clip;","bgo":"background-origin:|;","bgo:pb":"background-origin:padding-box;","bgo:bb":"background-origin:border-box;","bgo:cb":"background-origin:content-box;","bgz":"background-size:|;","bgz:a":"background-size:auto;","bgz:ct":"background-size:contain;","bgz:cv":"background-size:cover;","c":"color:#000;","tbl":"table-layout:|;","tbl:a":"table-layout:auto;","tbl:f":"table-layout:fixed;","cps":"caption-side:|;","cps:t":"caption-side:top;","cps:b":"caption-side:bottom;","ec":"empty-cells:|;","ec:s":"empty-cells:show;","ec:h":"empty-cells:hide;","lis":"list-style:|;","lis:n":"list-style:none;","lisp":"list-style-position:|;","lisp:i":"list-style-position:inside;","lisp:o":"list-style-position:outside;","list":"list-style-type:|;","list:n":"list-style-type:none;","list:d":"list-style-type:disc;","list:c":"list-style-type:circle;","list:s":"list-style-type:square;","list:dc":"list-style-type:decimal;","list:dclz":"list-style-type:decimal-leading-zero;","list:lr":"list-style-type:lower-roman;","list:ur":"list-style-type:upper-roman;","lisi":"list-style-image:|;","lisi:n":"list-style-image:none;","q":"quotes:|;","q:n":"quotes:none;","q:ru":"quotes:'\00AB' '\00BB' '\201E' '\201C';","q:en":"quotes:'\201C' '\201D' '\2018' '\2019';","ct":"content:|;","ct:n":"content:normal;","ct:oq":"content:open-quote;","ct:noq":"content:no-open-quote;","ct:cq":"content:close-quote;","ct:ncq":"content:no-close-quote;","ct:a":"content:attr(|);","ct:c":"content:counter(|);","ct:cs":"content:counters(|);","coi":"counter-increment:|;","cor":"counter-reset:|;","va":"vertical-align:|;","va:sup":"vertical-align:super;","va:t":"vertical-align:top;","va:tt":"vertical-align:text-top;","va:m":"vertical-align:middle;","va:bl":"vertical-align:baseline;","va:b":"vertical-align:bottom;","va:tb":"vertical-align:text-bottom;","va:sub":"vertical-align:sub;","ta":"text-align:|;","ta:l":"text-align:left;","ta:c":"text-align:center;","ta:r":"text-align:right;","tal":"text-align-last:|;","tal:a":"text-align-last:auto;","tal:l":"text-align-last:left;","tal:c":"text-align-last:center;","tal:r":"text-align-last:right;","td":"text-decoration:|;","td:n":"text-decoration:none;","td:u":"text-decoration:underline;","td:o":"text-decoration:overline;","td:l":"text-decoration:line-through;","te":"text-emphasis:|;","te:n":"text-emphasis:none;","te:ac":"text-emphasis:accent;","te:dt":"text-emphasis:dot;","te:c":"text-emphasis:circle;","te:ds":"text-emphasis:disc;","te:b":"text-emphasis:before;","te:a":"text-emphasis:after;","th":"text-height:|;","th:a":"text-height:auto;","th:f":"text-height:font-size;","th:t":"text-height:text-size;","th:m":"text-height:max-size;","ti":"text-indent:|;","ti:-":"text-indent:-9999px;","tj":"text-justify:|;","tj:a":"text-justify:auto;","tj:iw":"text-justify:inter-word;","tj:ii":"text-justify:inter-ideograph;","tj:ic":"text-justify:inter-cluster;","tj:d":"text-justify:distribute;","tj:k":"text-justify:kashida;","tj:t":"text-justify:tibetan;","to":"text-outline:|;","to+":"text-outline:0 0 #000;","to:n":"text-outline:none;","tr":"text-replace:|;","tr:n":"text-replace:none;","tt":"text-transform:|;","tt:n":"text-transform:none;","tt:c":"text-transform:capitalize;","tt:u":"text-transform:uppercase;","tt:l":"text-transform:lowercase;","tw":"text-wrap:|;","tw:n":"text-wrap:normal;","tw:no":"text-wrap:none;","tw:u":"text-wrap:unrestricted;","tw:s":"text-wrap:suppress;","tsh":"text-shadow:|;","tsh+":"text-shadow:0 0 0 #000;","tsh:n":"text-shadow:none;","lh":"line-height:|;","whs":"white-space:|;","whs:n":"white-space:normal;","whs:p":"white-space:pre;","whs:nw":"white-space:nowrap;","whs:pw":"white-space:pre-wrap;","whs:pl":"white-space:pre-line;","whsc":"white-space-collapse:|;","whsc:n":"white-space-collapse:normal;","whsc:k":"white-space-collapse:keep-all;","whsc:l":"white-space-collapse:loose;","whsc:bs":"white-space-collapse:break-strict;","whsc:ba":"white-space-collapse:break-all;","wob":"word-break:|;","wob:n":"word-break:normal;","wob:k":"word-break:keep-all;","wob:l":"word-break:loose;","wob:bs":"word-break:break-strict;","wob:ba":"word-break:break-all;","wos":"word-spacing:|;","wow":"word-wrap:|;","wow:nm":"word-wrap:normal;","wow:n":"word-wrap:none;","wow:u":"word-wrap:unrestricted;","wow:s":"word-wrap:suppress;","lts":"letter-spacing:|;","f":"font:|;","f+":"font:1em Arial,sans-serif;","fw":"font-weight:|;","fw:n":"font-weight:normal;","fw:b":"font-weight:bold;","fw:br":"font-weight:bolder;","fw:lr":"font-weight:lighter;","fs":"font-style:|;","fs:n":"font-style:normal;","fs:i":"font-style:italic;","fs:o":"font-style:oblique;","fv":"font-variant:|;","fv:n":"font-variant:normal;","fv:sc":"font-variant:small-caps;","fz":"font-size:|;","fza":"font-size-adjust:|;","fza:n":"font-size-adjust:none;","ff":"font-family:|;","ff:s":"font-family:serif;","ff:ss":"font-family:sans-serif;","ff:c":"font-family:cursive;","ff:f":"font-family:fantasy;","ff:m":"font-family:monospace;","fef":"font-effect:|;","fef:n":"font-effect:none;","fef:eg":"font-effect:engrave;","fef:eb":"font-effect:emboss;","fef:o":"font-effect:outline;","fem":"font-emphasize:|;","femp":"font-emphasize-position:|;","femp:b":"font-emphasize-position:before;","femp:a":"font-emphasize-position:after;","fems":"font-emphasize-style:|;","fems:n":"font-emphasize-style:none;","fems:ac":"font-emphasize-style:accent;","fems:dt":"font-emphasize-style:dot;","fems:c":"font-emphasize-style:circle;","fems:ds":"font-emphasize-style:disc;","fsm":"font-smooth:|;","fsm:a":"font-smooth:auto;","fsm:n":"font-smooth:never;","fsm:aw":"font-smooth:always;","fst":"font-stretch:|;","fst:n":"font-stretch:normal;","fst:uc":"font-stretch:ultra-condensed;","fst:ec":"font-stretch:extra-condensed;","fst:c":"font-stretch:condensed;","fst:sc":"font-stretch:semi-condensed;","fst:se":"font-stretch:semi-expanded;","fst:e":"font-stretch:expanded;","fst:ee":"font-stretch:extra-expanded;","fst:ue":"font-stretch:ultra-expanded;","op":"opacity:|;","op:ie":"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);","op:ms":"-ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';","rz":"resize:|;","rz:n":"resize:none;","rz:b":"resize:both;","rz:h":"resize:horizontal;","rz:v":"resize:vertical;","cur":"cursor:|;","cur:a":"cursor:auto;","cur:d":"cursor:default;","cur:c":"cursor:crosshair;","cur:ha":"cursor:hand;","cur:he":"cursor:help;","cur:m":"cursor:move;","cur:p":"cursor:pointer;","cur:t":"cursor:text;","pgbb":"page-break-before:|;","pgbb:au":"page-break-before:auto;","pgbb:al":"page-break-before:always;","pgbb:l":"page-break-before:left;","pgbb:r":"page-break-before:right;","pgbi":"page-break-inside:|;","pgbi:au":"page-break-inside:auto;","pgbi:av":"page-break-inside:avoid;","pgba":"page-break-after:|;","pgba:au":"page-break-after:auto;","pgba:al":"page-break-after:always;","pgba:l":"page-break-after:left;","pgba:r":"page-break-after:right;","orp":"orphans:|;","wid":"widows:|;"}},"html":{"snippets":{"cc:ie6":"","cc:ie":"","cc:noie":"\n\t${child}|\n","html:4t":'\n'+'\n'+"\n"+" \n"+' \n'+"\n"+"\n\t${child}|\n\n"+"","html:4s":'\n'+'\n'+"\n"+" \n"+' \n'+"\n"+"\n\t${child}|\n\n"+"","html:xt":'\n'+'\n'+"\n"+" \n"+' \n'+"\n"+"\n\t${child}|\n\n"+"","html:xs":'\n'+'\n'+"\n"+" \n"+' \n'+"\n"+"\n\t${child}|\n\n"+"","html:xxs":'\n'+'\n'+"\n"+" \n"+' \n'+"\n"+"\n\t${child}|\n\n"+"","html:5":"\n"+'\n'+"\n"+" \n"+' \n'+"\n"+"\n\t${child}|\n\n"+""},"abbreviations":{"a":'',"a:link":'',"a:mail":'',"abbr":'',"acronym":'',"base":'',"bdo":'',"bdo:r":'',"bdo:l":'',"link:css":'',"link:print":'',"link:favicon":'',"link:touch":'',"link:rss":'',"link:atom":'',"meta:utf":'',"meta:win":'',"meta:compat":'',"style":'',"script":'

    {$charmap_title}:

    web2py-1.99.7.orig/applications/admin/static/edit_area/plugins/charmap/charmap.js0000755000175000017500000000536711724764235026532 0ustar josejose/** * Charmap plugin * by Christophe Dolivet * v0.1 (2006/09/22) * * * This plugin allow to use a visual keyboard allowing to insert any UTF-8 characters in the text. * * - plugin name to add to the plugin list: "charmap" * - plugin name to add to the toolbar list: "charmap" * - possible parameters to add to EditAreaLoader.init(): * "charmap_default": (String) define the name of the default character range displayed on popup display * (default: "arrows") * * */ var EditArea_charmap= { /** * Get called once this file is loaded (editArea still not initialized) * * @return nothing */ init: function(){ this.default_language="Arrows"; } /** * Returns the HTML code for a specific control string or false if this plugin doesn't have that control. * A control can be a button, select list or any other HTML item to present in the EditArea user interface. * Language variables such as {$lang_somekey} will also be replaced with contents from * the language packs. * * @param {string} ctrl_name: the name of the control to add * @return HTML code for a specific control or false. * @type string or boolean */ ,get_control_html: function(ctrl_name){ switch(ctrl_name){ case "charmap": // Control id, button img, command return parent.editAreaLoader.get_button_html('charmap_but', 'charmap.gif', 'charmap_press', false, this.baseURL); } return false; } /** * Get called once EditArea is fully loaded and initialised * * @return nothing */ ,onload: function(){ if(editArea.settings["charmap_default"] && editArea.settings["charmap_default"].length>0) this.default_language= editArea.settings["charmap_default"]; } /** * Is called each time the user touch a keyboard key. * * @param (event) e: the keydown event * @return true - pass to next handler in chain, false - stop chain execution * @type boolean */ ,onkeydown: function(e){ } /** * Executes a specific command, this function handles plugin commands. * * @param {string} cmd: the name of the command being executed * @param {unknown} param: the parameter of the command * @return true - pass to next handler in chain, false - stop chain execution * @type boolean */ ,execCommand: function(cmd, param){ // Handle commands switch(cmd){ case "charmap_press": win= window.open(this.baseURL+"popup.html", "charmap", "width=500,height=270,scrollbars=yes,resizable=yes"); win.focus(); return false; } // Pass to next handler in chain return true; } }; // Adds the plugin class to the list of available EditArea plugins editArea.add_plugin("charmap", EditArea_charmap); web2py-1.99.7.orig/applications/admin/static/edit_area/plugins/charmap/images/0000755000175000017500000000000011724764235026010 5ustar josejoseweb2py-1.99.7.orig/applications/admin/static/edit_area/plugins/charmap/images/charmap.gif0000755000175000017500000000036511724764235030121 0ustar josejoseGIF89a &J"{js\.O‚bb7A=s`z$bFRRrЖʼ䞿6M8~;bǢFRFXvnz!,r'dihTqOBw$IPlPJ!sr\&apz4&)DhN r unlimited) */ function getChildren(elem, elem_type, elem_attribute, elem_attribute_match, option, depth) { if(!option) var option="single"; if(!depth) var depth=-1; if(elem){ var children= elem.childNodes; var result=null; var results= []; for (var x=0;x0){ results= results.concat(result); } }else if(result!=null){ return result; } } } } if(option=="all") return results; } return null; }; function isChildOf(elem, parent){ if(elem){ if(elem==parent) return true; while(elem.parentNode != 'undefined'){ return isChildOf(elem.parentNode, parent); } } return false; }; function getMouseX(e){ if(e!=null && typeof(e.pageX)!="undefined"){ return e.pageX; }else{ return (e!=null?e.x:event.x)+ document.documentElement.scrollLeft; } }; function getMouseY(e){ if(e!=null && typeof(e.pageY)!="undefined"){ return e.pageY; }else{ return (e!=null?e.y:event.y)+ document.documentElement.scrollTop; } }; function calculeOffsetLeft(r){ return calculeOffset(r,"offsetLeft") }; function calculeOffsetTop(r){ return calculeOffset(r,"offsetTop") }; function calculeOffset(element,attr){ var offset=0; while(element){ offset+=element[attr]; element=element.offsetParent } return offset; }; /** return the computed style * @param: elem: the reference to the element * @param: prop: the name of the css property */ function get_css_property(elem, prop) { if(document.defaultView) { return document.defaultView.getComputedStyle(elem, null).getPropertyValue(prop); } else if(elem.currentStyle) { var prop = prop.replace(/-\D/gi, function(sMatch) { return sMatch.charAt(sMatch.length - 1).toUpperCase(); }); return elem.currentStyle[prop]; } else return null; } /**** * Moving an element ***/ var _mCE; // currently moving element /* allow to move an element in a window e: the event id: the id of the element frame: the frame of the element ex of use: in html: or in javascript: document.getElementById("my_div").onmousedown= start_move_element */ function start_move_element(e, id, frame){ var elem_id=(e.target || e.srcElement).id; if(id) elem_id=id; if(!frame) frame=window; if(frame.event) e=frame.event; _mCE= frame.document.getElementById(elem_id); _mCE.frame=frame; frame.document.onmousemove= move_element; frame.document.onmouseup= end_move_element; /*_mCE.onmousemove= move_element; _mCE.onmouseup= end_move_element;*/ //alert(_mCE.frame.document.body.offsetHeight); mouse_x= getMouseX(e); mouse_y= getMouseY(e); //window.status=frame+ " elem: "+elem_id+" elem: "+ _mCE + " mouse_x: "+mouse_x; _mCE.start_pos_x = mouse_x - (_mCE.style.left.replace("px","") || calculeOffsetLeft(_mCE)); _mCE.start_pos_y = mouse_y - (_mCE.style.top.replace("px","") || calculeOffsetTop(_mCE)); return false; }; function end_move_element(e){ _mCE.frame.document.onmousemove= ""; _mCE.frame.document.onmouseup= ""; _mCE=null; }; function move_element(e){ var newTop,newLeft,maxLeft; if( _mCE.frame && _mCE.frame.event ) e=_mCE.frame.event; newTop = getMouseY(e) - _mCE.start_pos_y; newLeft = getMouseX(e) - _mCE.start_pos_x; maxLeft = _mCE.frame.document.body.offsetWidth- _mCE.offsetWidth; max_top = _mCE.frame.document.body.offsetHeight- _mCE.offsetHeight; newTop = Math.min(Math.max(0, newTop), max_top); newLeft = Math.min(Math.max(0, newLeft), maxLeft); _mCE.style.top = newTop+"px"; _mCE.style.left = newLeft+"px"; return false; }; /*** * Managing a textarea (this part need the navigator infos from editAreaLoader ***/ var nav= editAreaLoader.nav; // allow to get infos on the selection: array(start, end) function getSelectionRange(textarea){ return {"start": textarea.selectionStart, "end": textarea.selectionEnd}; }; // allow to set the selection function setSelectionRange(t, start, end){ t.focus(); start = Math.max(0, Math.min(t.value.length, start)); end = Math.max(start, Math.min(t.value.length, end)); if( nav.isOpera && nav.isOpera < 9.6 ){ // Opera bug when moving selection start and selection end t.selectionEnd = 1; t.selectionStart = 0; t.selectionEnd = 1; t.selectionStart = 0; } t.selectionStart = start; t.selectionEnd = end; //textarea.setSelectionRange(start, end); if(nav.isIE) set_IE_selection(t); }; // set IE position in Firefox mode (textarea.selectionStart and textarea.selectionEnd). should work as a repeated task function get_IE_selection(t){ var d=document,div,range,stored_range,elem,scrollTop,relative_top,line_start,line_nb,range_start,range_end,tab; if(t && t.focused) { if(!t.ea_line_height) { // calculate the lineHeight div= d.createElement("div"); div.style.fontFamily= get_css_property(t, "font-family"); div.style.fontSize= get_css_property(t, "font-size"); div.style.visibility= "hidden"; div.innerHTML="0"; d.body.appendChild(div); t.ea_line_height= div.offsetHeight; d.body.removeChild(div); } //t.focus(); range = d.selection.createRange(); try { stored_range = range.duplicate(); stored_range.moveToElementText( t ); stored_range.setEndPoint( 'EndToEnd', range ); if(stored_range.parentElement() == t){ // the range don't take care of empty lines in the end of the selection elem = t; scrollTop = 0; while(elem.parentNode){ scrollTop+= elem.scrollTop; elem = elem.parentNode; } // var scrollTop= t.scrollTop + document.body.scrollTop; // var relative_top= range.offsetTop - calculeOffsetTop(t) + scrollTop; relative_top= range.offsetTop - calculeOffsetTop(t)+ scrollTop; // alert("rangeoffset: "+ range.offsetTop +"\ncalcoffsetTop: "+ calculeOffsetTop(t) +"\nrelativeTop: "+ relative_top); line_start = Math.round((relative_top / t.ea_line_height) +1); line_nb = Math.round(range.boundingHeight / t.ea_line_height); range_start = stored_range.text.length - range.text.length; tab = t.value.substr(0, range_start).split("\n"); range_start += (line_start - tab.length)*2; // add missing empty lines to the selection t.selectionStart = range_start; range_end = t.selectionStart + range.text.length; tab = t.value.substr(0, range_start + range.text.length).split("\n"); range_end += (line_start + line_nb - 1 - tab.length)*2; t.selectionEnd = range_end; } } catch(e){} } if( t && t.id ) { setTimeout("get_IE_selection(document.getElementById('"+ t.id +"'));", 50); } }; function IE_textarea_focus(){ event.srcElement.focused= true; } function IE_textarea_blur(){ event.srcElement.focused= false; } // select the text for IE (take into account the \r difference) function set_IE_selection( t ){ var nbLineStart,nbLineStart,nbLineEnd,range; if(!window.closed){ nbLineStart=t.value.substr(0, t.selectionStart).split("\n").length - 1; nbLineEnd=t.value.substr(0, t.selectionEnd).split("\n").length - 1; try { range = document.selection.createRange(); range.moveToElementText( t ); range.setEndPoint( 'EndToStart', range ); range.moveStart('character', t.selectionStart - nbLineStart); range.moveEnd('character', t.selectionEnd - nbLineEnd - (t.selectionStart - nbLineStart) ); range.select(); } catch(e){} } }; editAreaLoader.waiting_loading["elements_functions.js"]= "loaded"; web2py-1.99.7.orig/applications/admin/static/edit_area/search_replace.js0000755000175000017500000001226411724764235024755 0ustar josejose EditArea.prototype.show_search = function(){ if(_$("area_search_replace").style.visibility=="visible"){ this.hidden_search(); }else{ this.open_inline_popup("area_search_replace"); var text= this.area_get_selection(); var search= text.split("\n")[0]; _$("area_search").value= search; _$("area_search").focus(); } }; EditArea.prototype.hidden_search= function(){ /*_$("area_search_replace").style.visibility="hidden"; this.textarea.focus(); var icon= _$("search"); setAttribute(icon, "class", getAttribute(icon, "class").replace(/ selected/g, "") );*/ this.close_inline_popup("area_search_replace"); }; EditArea.prototype.area_search= function(mode){ if(!mode) mode="search"; _$("area_search_msg").innerHTML=""; var search=_$("area_search").value; this.textarea.focus(); this.textarea.textareaFocused=true; var infos= this.get_selection_infos(); var start= infos["selectionStart"]; var pos=-1; var pos_begin=-1; var length=search.length; if(_$("area_search_replace").style.visibility!="visible"){ this.show_search(); return; } if(search.length==0){ _$("area_search_msg").innerHTML=this.get_translation("search_field_empty"); return; } // advance to the next occurence if no text selected if(mode!="replace" ){ if(_$("area_search_reg_exp").checked) start++; else start+= search.length; } //search if(_$("area_search_reg_exp").checked){ // regexp search var opt="m"; if(!_$("area_search_match_case").checked) opt+="i"; var reg= new RegExp(search, opt); pos= infos["full_text"].substr(start).search(reg); pos_begin= infos["full_text"].search(reg); if(pos!=-1){ pos+=start; length=infos["full_text"].substr(start).match(reg)[0].length; }else if(pos_begin!=-1){ length=infos["full_text"].match(reg)[0].length; } }else{ if(_$("area_search_match_case").checked){ pos= infos["full_text"].indexOf(search, start); pos_begin= infos["full_text"].indexOf(search); }else{ pos= infos["full_text"].toLowerCase().indexOf(search.toLowerCase(), start); pos_begin= infos["full_text"].toLowerCase().indexOf(search.toLowerCase()); } } // interpret result if(pos==-1 && pos_begin==-1){ _$("area_search_msg").innerHTML=""+search+" "+this.get_translation("not_found"); return; }else if(pos==-1 && pos_begin != -1){ begin= pos_begin; _$("area_search_msg").innerHTML=this.get_translation("restart_search_at_begin"); }else begin= pos; //_$("area_search_msg").innerHTML+=""+search+" found at "+begin+" strat at "+start+" pos "+pos+" curs"+ infos["indexOfCursor"]+"."; if(mode=="replace" && pos==infos["indexOfCursor"]){ var replace= _$("area_replace").value; var new_text=""; if(_$("area_search_reg_exp").checked){ var opt="m"; if(!_$("area_search_match_case").checked) opt+="i"; var reg= new RegExp(search, opt); new_text= infos["full_text"].substr(0, begin) + infos["full_text"].substr(start).replace(reg, replace); }else{ new_text= infos["full_text"].substr(0, begin) + replace + infos["full_text"].substr(begin + length); } this.textarea.value=new_text; this.area_select(begin, length); this.area_search(); }else this.area_select(begin, length); }; EditArea.prototype.area_replace= function(){ this.area_search("replace"); }; EditArea.prototype.area_replace_all= function(){ /* this.area_select(0, 0); _$("area_search_msg").innerHTML=""; while(_$("area_search_msg").innerHTML==""){ this.area_replace(); }*/ var base_text= this.textarea.value; var search= _$("area_search").value; var replace= _$("area_replace").value; if(search.length==0){ _$("area_search_msg").innerHTML=this.get_translation("search_field_empty"); return ; } var new_text=""; var nb_change=0; if(_$("area_search_reg_exp").checked){ // regExp var opt="mg"; if(!_$("area_search_match_case").checked) opt+="i"; var reg= new RegExp(search, opt); nb_change= infos["full_text"].match(reg).length; new_text= infos["full_text"].replace(reg, replace); }else{ if(_$("area_search_match_case").checked){ var tmp_tab=base_text.split(search); nb_change= tmp_tab.length -1 ; new_text= tmp_tab.join(replace); }else{ // case insensitive var lower_value=base_text.toLowerCase(); var lower_search=search.toLowerCase(); var start=0; var pos= lower_value.indexOf(lower_search); while(pos!=-1){ nb_change++; new_text+= this.textarea.value.substring(start , pos)+replace; start=pos+ search.length; pos= lower_value.indexOf(lower_search, pos+1); } new_text+= this.textarea.value.substring(start); } } if(new_text==base_text){ _$("area_search_msg").innerHTML=""+search+" "+this.get_translation("not_found"); }else{ this.textarea.value= new_text; _$("area_search_msg").innerHTML=""+nb_change+" "+this.get_translation("occurrence_replaced"); // firefox and opera doesn't manage with the focus if it's done directly //editArea.textarea.focus();editArea.textarea.textareaFocused=true; setTimeout("editArea.textarea.focus();editArea.textarea.textareaFocused=true;", 100); } }; web2py-1.99.7.orig/applications/admin/static/edit_area/autocompletion.js0000755000175000017500000004044711724764235025063 0ustar josejose/** * Autocompletion class * * An auto completion box appear while you're writing. It's possible to force it to appear with Ctrl+Space short cut * * Loaded as a plugin inside editArea (everything made here could have been made in the plugin directory) * But is definitly linked to syntax selection (no need to do 2 different files for color and auto complete for each syntax language) * and add a too important feature that many people would miss if included as a plugin * * - init param: autocompletion_start * - Button name: "autocompletion" */ var EditArea_autocompletion= { /** * Get called once this file is loaded (editArea still not initialized) * * @return nothing */ init: function(){ // alert("test init: "+ this._someInternalFunction(2, 3)); if(editArea.settings["autocompletion"]) this.enabled= true; else this.enabled= false; this.current_word = false; this.shown = false; this.selectIndex = -1; this.forceDisplay = false; this.isInMiddleWord = false; this.autoSelectIfOneResult = false; this.delayBeforeDisplay = 100; this.checkDelayTimer = false; this.curr_syntax_str = ''; this.file_syntax_datas = {}; } /** * Returns the HTML code for a specific control string or false if this plugin doesn't have that control. * A control can be a button, select list or any other HTML item to present in the EditArea user interface. * Language variables such as {$lang_somekey} will also be replaced with contents from * the language packs. * * @param {string} ctrl_name: the name of the control to add * @return HTML code for a specific control or false. * @type string or boolean */ /*,get_control_html: function(ctrl_name){ switch( ctrl_name ){ case 'autocompletion': // Control id, button img, command return parent.editAreaLoader.get_button_html('autocompletion_but', 'autocompletion.gif', 'toggle_autocompletion', false, this.baseURL); break; } return false; }*/ /** * Get called once EditArea is fully loaded and initialised * * @return nothing */ ,onload: function(){ if(this.enabled) { var icon= document.getElementById("autocompletion"); if(icon) editArea.switchClassSticky(icon, 'editAreaButtonSelected', true); } this.container = document.createElement('div'); this.container.id = "auto_completion_area"; editArea.container.insertBefore( this.container, editArea.container.firstChild ); // add event detection for hiding suggestion box parent.editAreaLoader.add_event( document, "click", function(){ editArea.plugins['autocompletion']._hide();} ); parent.editAreaLoader.add_event( editArea.textarea, "blur", function(){ editArea.plugins['autocompletion']._hide();} ); } /** * Is called each time the user touch a keyboard key. * * @param (event) e: the keydown event * @return true - pass to next handler in chain, false - stop chain execution * @type boolean */ ,onkeydown: function(e){ if(!this.enabled) return true; if (EA_keys[e.keyCode]) letter=EA_keys[e.keyCode]; else letter=String.fromCharCode(e.keyCode); // shown if( this._isShown() ) { // if escape, hide the box if(letter=="Esc") { this._hide(); return false; } // Enter else if( letter=="Entrer") { var as = this.container.getElementsByTagName('A'); // select a suggested entry if( this.selectIndex >= 0 && this.selectIndex < as.length ) { as[ this.selectIndex ].onmousedown(); return false } // simply add an enter in the code else { this._hide(); return true; } } else if( letter=="Tab" || letter=="Down") { this._selectNext(); return false; } else if( letter=="Up") { this._selectBefore(); return false; } } // hidden else { } // show current suggestion list and do autoSelect if possible (no matter it's shown or hidden) if( letter=="Space" && CtrlPressed(e) ) { //parent.console.log('SHOW SUGGEST'); this.forceDisplay = true; this.autoSelectIfOneResult = true; this._checkLetter(); return false; } // wait a short period for check that the cursor isn't moving setTimeout("editArea.plugins['autocompletion']._checkDelayAndCursorBeforeDisplay();", editArea.check_line_selection_timer +5 ); this.checkDelayTimer = false; return true; } /** * Executes a specific command, this function handles plugin commands. * * @param {string} cmd: the name of the command being executed * @param {unknown} param: the parameter of the command * @return true - pass to next handler in chain, false - stop chain execution * @type boolean */ ,execCommand: function(cmd, param){ switch( cmd ){ case 'toggle_autocompletion': var icon= document.getElementById("autocompletion"); if(!this.enabled) { if(icon != null){ editArea.restoreClass(icon); editArea.switchClassSticky(icon, 'editAreaButtonSelected', true); } this.enabled= true; } else { this.enabled= false; if(icon != null) editArea.switchClassSticky(icon, 'editAreaButtonNormal', false); } return true; } return true; } ,_checkDelayAndCursorBeforeDisplay: function() { this.checkDelayTimer = setTimeout("if(editArea.textarea.selectionStart == "+ editArea.textarea.selectionStart +") EditArea_autocompletion._checkLetter();", this.delayBeforeDisplay - editArea.check_line_selection_timer - 5 ); } // hide the suggested box ,_hide: function(){ this.container.style.display="none"; this.selectIndex = -1; this.shown = false; this.forceDisplay = false; this.autoSelectIfOneResult = false; } // display the suggested box ,_show: function(){ if( !this._isShown() ) { this.container.style.display="block"; this.selectIndex = -1; this.shown = true; } } // is the suggested box displayed? ,_isShown: function(){ return this.shown; } // setter and getter ,_isInMiddleWord: function( new_value ){ if( typeof( new_value ) == "undefined" ) return this.isInMiddleWord; else this.isInMiddleWord = new_value; } // select the next element in the suggested box ,_selectNext: function() { var as = this.container.getElementsByTagName('A'); // clean existing elements for( var i=0; i= as.length || this.selectIndex < 0 ) ? 0 : this.selectIndex; as[ this.selectIndex ].className += " focus"; } // select the previous element in the suggested box ,_selectBefore: function() { var as = this.container.getElementsByTagName('A'); // clean existing elements for( var i=0; i= as.length || this.selectIndex < 0 ) ? as.length-1 : this.selectIndex; as[ this.selectIndex ].className += " focus"; } ,_select: function( content ) { cursor_forced_position = content.indexOf( '{@}' ); content = content.replace(/{@}/g, '' ); editArea.getIESelection(); // retrive the number of matching characters var start_index = Math.max( 0, editArea.textarea.selectionEnd - content.length ); line_string = editArea.textarea.value.substring( start_index, editArea.textarea.selectionEnd + 1); limit = line_string.length -1; nbMatch = 0; for( i =0; i 0 ) parent.editAreaLoader.setSelectionRange(editArea.id, editArea.textarea.selectionStart - nbMatch , editArea.textarea.selectionEnd); parent.editAreaLoader.setSelectedText(editArea.id, content ); range= parent.editAreaLoader.getSelectionRange(editArea.id); if( cursor_forced_position != -1 ) new_pos = range["end"] - ( content.length-cursor_forced_position ); else new_pos = range["end"]; parent.editAreaLoader.setSelectionRange(editArea.id, new_pos, new_pos); this._hide(); } /** * Parse the AUTO_COMPLETION part of syntax definition files */ ,_parseSyntaxAutoCompletionDatas: function(){ //foreach syntax loaded for(var lang in parent.editAreaLoader.load_syntax) { if(!parent.editAreaLoader.syntax[lang]['autocompletion']) // init the regexp if not already initialized { parent.editAreaLoader.syntax[lang]['autocompletion']= {}; // the file has auto completion datas if(parent.editAreaLoader.load_syntax[lang]['AUTO_COMPLETION']) { // parse them for(var i in parent.editAreaLoader.load_syntax[lang]['AUTO_COMPLETION']) { datas = parent.editAreaLoader.load_syntax[lang]['AUTO_COMPLETION'][i]; tmp = {}; if(datas["CASE_SENSITIVE"]!="undefined" && datas["CASE_SENSITIVE"]==false) tmp["modifiers"]="i"; else tmp["modifiers"]=""; tmp["prefix_separator"]= datas["REGEXP"]["prefix_separator"]; tmp["match_prefix_separator"]= new RegExp( datas["REGEXP"]["prefix_separator"] +"$", tmp["modifiers"]); tmp["match_word"]= new RegExp("(?:"+ datas["REGEXP"]["before_word"] +")("+ datas["REGEXP"]["possible_words_letters"] +")$", tmp["modifiers"]); tmp["match_next_letter"]= new RegExp("^("+ datas["REGEXP"]["letter_after_word_must_match"] +")$", tmp["modifiers"]); tmp["keywords"]= {}; //console.log( datas["KEYWORDS"] ); for( var prefix in datas["KEYWORDS"] ) { tmp["keywords"][prefix]= { prefix: prefix, prefix_name: prefix, prefix_reg: new RegExp("(?:"+ parent.editAreaLoader.get_escaped_regexp( prefix ) +")(?:"+ tmp["prefix_separator"] +")$", tmp["modifiers"] ), datas: [] }; for( var j=0; j it's valid if( !match_prefix_separator && this.curr_syntax[i]["keywords"][prefix]['prefix'].length == 0 ) { if( ! before.match( this.curr_syntax[i]["keywords"][prefix]['prefix_reg'] ) ) hasMatch = true; } // we still need to check the prefix if there is one else if( this.curr_syntax[i]["keywords"][prefix]['prefix'].length > 0 ) { if( before.match( this.curr_syntax[i]["keywords"][prefix]['prefix_reg'] ) ) hasMatch = true; } if( hasMatch ) results[results.length]= [ this.curr_syntax[i]["keywords"][prefix], this.curr_syntax[i]["keywords"][prefix]['datas'][j] ]; } } } } // it doesn't match any possible word but we want to display something // we'll display to list of all available words else if( this.forceDisplay || match_prefix_separator ) { for(var prefix in this.curr_syntax[i]["keywords"]) { for(var j=0; j it's valid if( !match_prefix_separator && this.curr_syntax[i]["keywords"][prefix]['prefix'].length == 0 ) { hasMatch = true; } // we still need to check the prefix if there is one else if( match_prefix_separator && this.curr_syntax[i]["keywords"][prefix]['prefix'].length > 0 ) { var before = last_chars; //.substr( 0, last_chars.length ); if( before.match( this.curr_syntax[i]["keywords"][prefix]['prefix_reg'] ) ) hasMatch = true; } if( hasMatch ) results[results.length]= [ this.curr_syntax[i]["keywords"][prefix], this.curr_syntax[i]["keywords"][prefix]['datas'][j] ]; } } } } } // there is only one result, and we can select it automatically if( results.length == 1 && this.autoSelectIfOneResult ) { // console.log( results ); this._select( results[0][1]['replace_with'] ); } else if( results.length == 0 ) { this._hide(); } else { // build the suggestion box content var lines=[]; for(var i=0; i"+ results[i][1]['comment']; if(results[i][0]['prefix_name'].length>0) line+=''+ results[i][0]['prefix_name'] +''; line+=''; lines[lines.length]=line; } // sort results this.container.innerHTML = '
      '+ lines.sort().join('') +'
    '; var cursor = _$("cursor_pos"); this.container.style.top = ( cursor.cursor_top + editArea.lineHeight ) +"px"; this.container.style.left = ( cursor.cursor_left + 8 ) +"px"; this._show(); } this.autoSelectIfOneResult = false; time=new Date; t2= time.getTime(); //parent.console.log( begin_word +"\n"+ (t2-t1) +"\n"+ html ); } } }; // Load as a plugin editArea.settings['plugins'][ editArea.settings['plugins'].length ] = 'autocompletion'; editArea.add_plugin('autocompletion', EditArea_autocompletion); web2py-1.99.7.orig/applications/admin/static/edit_area/keyboard.js0000755000175000017500000001014711724764235023613 0ustar josejosevar EA_keys = {8:"Retour arriere",9:"Tabulation",12:"Milieu (pave numerique)",13:"Entrer",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"Verr Maj",27:"Esc",32:"Space",33:"Page up",34:"Page down",35:"End",36:"Begin",37:"Left",38:"Up",39:"Right",40:"Down",44:"Impr ecran",45:"Inser",46:"Suppr",91:"Menu Demarrer Windows / touche pomme Mac",92:"Menu Demarrer Windows",93:"Menu contextuel Windows",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Verr Num",145:"Arret defil"}; function keyDown(e){ if(!e){ // if IE e=event; } // send the event to the plugins for(var i in editArea.plugins){ if(typeof(editArea.plugins[i].onkeydown)=="function"){ if(editArea.plugins[i].onkeydown(e)===false){ // stop propaging if(editArea.isIE) e.keyCode=0; return false; } } } var target_id=(e.target || e.srcElement).id; var use=false; if (EA_keys[e.keyCode]) letter=EA_keys[e.keyCode]; else letter=String.fromCharCode(e.keyCode); var low_letter= letter.toLowerCase(); if(letter=="Page up" && !AltPressed(e) && !editArea.isOpera){ editArea.execCommand("scroll_page", {"dir": "up", "shift": ShiftPressed(e)}); use=true; }else if(letter=="Page down" && !AltPressed(e) && !editArea.isOpera){ editArea.execCommand("scroll_page", {"dir": "down", "shift": ShiftPressed(e)}); use=true; }else if(editArea.is_editable==false){ // do nothing but also do nothing else (allow to navigate with page up and page down) return true; }else if(letter=="Tabulation" && target_id=="textarea" && !CtrlPressed(e) && !AltPressed(e)){ if(ShiftPressed(e)) editArea.execCommand("invert_tab_selection"); else editArea.execCommand("tab_selection"); use=true; if(editArea.isOpera || (editArea.isFirefox && editArea.isMac) ) // opera && firefox mac can't cancel tabulation events... setTimeout("editArea.execCommand('focus');", 1); }else if(letter=="Entrer" && target_id=="textarea"){ if(editArea.press_enter()) use=true; }else if(letter=="Entrer" && target_id=="area_search"){ editArea.execCommand("area_search"); use=true; }else if(letter=="Esc"){ editArea.execCommand("close_all_inline_popup", e); use=true; }else if(CtrlPressed(e) && !AltPressed(e) && !ShiftPressed(e)){ switch(low_letter){ case "f": editArea.execCommand("area_search"); use=true; break; case "r": editArea.execCommand("area_replace"); use=true; break; case "q": editArea.execCommand("close_all_inline_popup", e); use=true; break; case "h": editArea.execCommand("change_highlight"); use=true; break; case "g": setTimeout("editArea.execCommand('go_to_line');", 5); // the prompt stop the return false otherwise use=true; break; case "e": editArea.execCommand("show_help"); use=true; break; case "z": use=true; editArea.execCommand("undo"); break; case "y": use=true; editArea.execCommand("redo"); break; default: break; } } // check to disable the redo possibility if the textarea content change if(editArea.next.length > 0){ setTimeout("editArea.check_redo();", 10); } setTimeout("editArea.check_file_changes();", 10); if(use){ // in case of a control that sould'nt be used by IE but that is used => THROW a javascript error that will stop key action if(editArea.isIE) e.keyCode=0; return false; } //alert("Test: "+ letter + " ("+e.keyCode+") ALT: "+ AltPressed(e) + " CTRL "+ CtrlPressed(e) + " SHIFT "+ ShiftPressed(e)); return true; }; // return true if Alt key is pressed function AltPressed(e) { if (window.event) { return (window.event.altKey); } else { if(e.modifiers) return (e.altKey || (e.modifiers % 2)); else return e.altKey; } }; // return true if Ctrl key is pressed function CtrlPressed(e) { if (window.event) { return (window.event.ctrlKey); } else { return (e.ctrlKey || (e.modifiers==2) || (e.modifiers==3) || (e.modifiers>5)); } }; // return true if Shift key is pressed function ShiftPressed(e) { if (window.event) { return (window.event.shiftKey); } else { return (e.shiftKey || (e.modifiers>3)); } }; web2py-1.99.7.orig/applications/admin/static/edit_area/template.html0000755000175000017500000001030611724764235024153 0ustar josejose EditArea [__CSSRULES__] [__JSCODE__]
    [__TOOLBAR__]
     
     
    {$position}: {$line_abbr} 0, {$char_abbr} 0 {$total}: {$line_abbr} 0, {$char_abbr} 0 resize
    {$processing}
    {$search} {$close_popup}
    {$replace} {$move_popup}

    {$find_next} {$replace} {$replace_all}
    {$close_popup}

    Editarea [__EA_VERSION__]


    {$shortcuts}:

    {$tab}: {$add_tab}
    {$shift}+{$tab}: {$remove_tab}
    {$ctrl}+f: {$search_command}
    {$ctrl}+r: {$replace_command}
    {$ctrl}+h: {$highlight}
    {$ctrl}+g: {$go_to_line}
    {$ctrl}+z: {$undo}
    {$ctrl}+y: {$redo}
    {$ctrl}+e: {$help}
    {$ctrl}+q, {$esc}: {$close_popup}
    {$accesskey} E: {$toggle}

    {$about_notice}
    web2py-1.99.7.orig/applications/admin/static/edit_area/images/0000755000175000017500000000000011724764235022714 5ustar josejoseweb2py-1.99.7.orig/applications/admin/static/edit_area/images/help.gif0000755000175000017500000000044711724764235024343 0ustar josejoseGIF89aO^u"Zr9ZBzrýP5nSVMp_ܑ̰"X"g!,'dihHY_fUNTFfD"TX$b1pLJ%px$G“a It%qH d8&bmz^~%u & & ' }( Q* 44!;web2py-1.99.7.orig/applications/admin/static/edit_area/images/newdocument.gif0000755000175000017500000000025211724764235025735 0ustar josejoseGIF89a2Jb⢵Ⲿ!,WI8zWla 0fyʺf@v/# k82MAr5 ǖ5L'hFo>;web2py-1.99.7.orig/applications/admin/static/edit_area/images/load.gif0000755000175000017500000000202111724764235024320 0ustar josejoseGIF89a $&*))1+303?:T` A$+2Dh@@)0”H1Gf(a \fњ*%HB @?i;o F .PA ;web2py-1.99.7.orig/applications/admin/static/edit_area/images/move.gif0000755000175000017500000000040111724764235024347 0ustar josejoseGIF89a  !,~ %4I&f`$N$H$'NHNd2b"o#"͒H(F$"M!kD@pb@<ZX'0:P<Z< Z2bbC% 6Q[H;&7Cc2!;web2py-1.99.7.orig/applications/admin/static/edit_area/images/close.gif0000755000175000017500000000014611724764235024514 0ustar josejoseGIF89a@@@Ȁ,3")ǣ8Z vIP ~Sr5[Y"`H,ȤrL;web2py-1.99.7.orig/applications/admin/static/edit_area/images/fullscreen.gif0000755000175000017500000000030611724764235025547 0ustar josejoseGIF89a 2JbLttȒiBw|W}!,sI8k4di6T# !T8/ 7ѡ `bjd"q`BUDIW IXp.S yњ sEG[[]]{;web2py-1.99.7.orig/applications/admin/static/edit_area/images/opacity.png0000755000175000017500000000022311724764235025072 0ustar josejosePNG  IHDR gAMA7tEXtSoftwareAdobe ImageReadyqe<%IDATxbf*&*QG 5pQfIENDB`web2py-1.99.7.orig/applications/admin/static/edit_area/images/processing.gif0000755000175000017500000000147111724764235025565 0ustar josejoseGIF89a333LLLfff! NETSCAPE2.0! ,HɉZgՆ}HIl ta ޭpe0 &|.Q^ڭ"'N! ,HBZ}HIl0tq<ޭp@ &|.BQ^ڭ"'N! ,HZ}HIlAt<ޭpP&|.Q^ڭ"'N! ,HƠZ'!}HIlTQtS<ޭp`&|.Q^ڭ"'N! ,HZg) }HIlat <ޭpp&|.Q^ڭ"'N! ,HJZ1}HIlqt0<ޭp&|.@Q^ڭ"'N! ,HZ9}HIltA<ޭp% &|.Q^ڭ"'N! ,HΡZ'}HIlTtSQ<ޭpE &|.Q^ڭ"'N;web2py-1.99.7.orig/applications/admin/static/edit_area/images/statusbar_resize.gif0000755000175000017500000000011711724764235026776 0ustar josejoseGIF89a !,   -f:eA!%riyKj;web2py-1.99.7.orig/applications/admin/static/edit_area/images/go_to_line.gif0000755000175000017500000000203511724764235025524 0ustar josejoseGIF89azz ~ $%( ..88<@FHK)L!Q)M,P!X#Y-d.d.e3j78;?<=R@NK_fhGK][][OP^habcW[iZY\Whnc\p]s]svsyfzg}z~iivvvx! , H `@ \L  BHi%K$a0#O Ejg7 ÉQAL!Z33T*䇍LHѢ担p,sʔ*`$ (QBUj 2qWX"l@#F!EQ+)L<(" 0\A*΋T$4 , !1I.# 6"J#e!|I (1&I QBHC/JWB#8# +* JA;web2py-1.99.7.orig/applications/admin/static/edit_area/images/redo.gif0000755000175000017500000000025111724764235024335 0ustar josejoseGIF89a -Os=rח^vU9eMi7ZW}!,VI8ZIq4J S0M ` 01[M: |\ HF[=ilITxv;web2py-1.99.7.orig/applications/admin/static/edit_area/images/save.gif0000755000175000017500000000043511724764235024346 0ustar josejoseGIF89aNX2:R BFHzr֦RRRrz-:?UU"Brbcbn*BBJB:RZr*J!,'dihM`bFb.<\CA` 03'$1hgZ)XAtED< V %.56?~$ 0?&%   #f@+!;web2py-1.99.7.orig/applications/admin/static/edit_area/images/undo.gif0000755000175000017500000000025711724764235024357 0ustar josejoseGIF89a :]?uܹߧ^~_~r?gQb蔳R!,\I8:=Gc6`H%"$^h8X@P. aLbGB@0DX"xE=YRp 8o!]f;web2py-1.99.7.orig/applications/admin/static/edit_area/images/spacer.gif0000755000175000017500000000005311724764235024661 0ustar josejoseGIF89a!,D;web2py-1.99.7.orig/applications/admin/static/edit_area/images/reset_highlight.gif0000755000175000017500000000025011724764235026554 0ustar josejoseGIF89a ^p2Jbrr䄚!,UI87;G0ݷAxǹKhY bd/ w5 w$ .-`fP(V0@38C;web2py-1.99.7.orig/applications/admin/static/edit_area/images/highlight.gif0000755000175000017500000000040011724764235025347 0ustar josejoseGIF89aF<&zB|rgc[Ϭ¸geB:ªBԴnn~FNRȖݢb‚ҺbܒtbLNg2ܱ!,}'dih( ;2ʆ8총p)!( c4 Ċ,"H*GTlχHp<-p mDuUdv ',22#'!;web2py-1.99.7.orig/applications/admin/static/edit_area/images/word_wrap.gif0000755000175000017500000000166711724764235025424 0ustar josejoseGIF89aLFdWOod^|Wj4vtlLĄ~!, H*D8@Ç((/j( (@@C:ࠥ˗.U`Ȓ&gKiT0?=ntAhJՀӋ@UOd:iŽ}Wb w-ܻTw¿ ;web2py-1.99.7.orig/applications/admin/static/edit_area/images/search.gif0000755000175000017500000000027711724764235024661 0ustar josejoseGIF89a!@yUoy6R_t|Eh!F!,lI8o Ԁ[0fP˜ jz)@p*6(J #p4*iۀ; mq]*q{v<|E bA3;web2py-1.99.7.orig/applications/admin/static/edit_area/images/smooth_selection.gif0000755000175000017500000000025611724764235026767 0ustar josejoseGIF89a ##^7OiϗZV>’bbrrv!,[I8f F2c( BS0P8 "1X&JTP u08GJR34Pˉz SQ7kA g1;web2py-1.99.7.orig/applications/admin/static/edit_area/edit_area_compressor.php0000755000175000017500000003573611724764235026372 0ustar josejose__construct($param); } function __construct($param) { $this->start_time= $this->get_microtime(); $this->file_loaded_size=0; $this->param= $param; $this->script_list=""; $this->path= dirname(__FILE__)."/"; if(isset($_GET['plugins'])){ $this->load_all_plugins= true; $this->full_cache_file= $this->path."edit_area_full_with_plugins.js"; $this->gzip_cache_file= $this->path."edit_area_full_with_plugins.gz"; }else{ $this->load_all_plugins= false; $this->full_cache_file= $this->path."edit_area_full.js"; $this->gzip_cache_file= $this->path."edit_area_full.gz"; } $this->check_gzip_use(); $this->send_headers(); $this->check_cache(); $this->load_files(); $this->send_datas(); } function send_headers() { header("Content-type: text/javascript; charset: UTF-8"); header("Vary: Accept-Encoding"); // Handle proxies header(sprintf("Expires: %s GMT", gmdate("D, d M Y H:i:s", time() + $this->param['cache_duration'])) ); if($this->use_gzip) header("Content-Encoding: ".$this->gzip_enc_header); } function check_gzip_use() { $encodings = array(); $desactivate_gzip=false; if (isset($_SERVER['HTTP_ACCEPT_ENCODING'])) $encodings = explode(',', strtolower(preg_replace("/\s+/", "", $_SERVER['HTTP_ACCEPT_ENCODING']))); // desactivate gzip for IE version < 7 if(preg_match("/(?:msie )([0-9.]+)/i", $_SERVER['HTTP_USER_AGENT'], $ie)) { if($ie[1]<7) $desactivate_gzip=true; } // Check for gzip header or northon internet securities if (!$desactivate_gzip && $this->param['use_gzip'] && (in_array('gzip', $encodings) || in_array('x-gzip', $encodings) || isset($_SERVER['---------------'])) && function_exists('ob_gzhandler') && !ini_get('zlib.output_compression')) { $this->gzip_enc_header= in_array('x-gzip', $encodings) ? "x-gzip" : "gzip"; $this->use_gzip=true; $this->cache_file=$this->gzip_cache_file; }else{ $this->use_gzip=false; $this->cache_file=$this->full_cache_file; } } function check_cache() { // Only gzip the contents if clients and server support it if (file_exists($this->cache_file)) { // check if cache file must be updated $cache_date=0; if ($dir = opendir($this->path)) { while (($file = readdir($dir)) !== false) { if(is_file($this->path.$file) && $file!="." && $file!="..") $cache_date= max($cache_date, filemtime($this->path.$file)); } closedir($dir); } if($this->load_all_plugins){ $plug_path= $this->path."plugins/"; if (($dir = @opendir($plug_path)) !== false) { while (($file = readdir($dir)) !== false) { if ($file !== "." && $file !== "..") { if(is_dir($plug_path.$file) && file_exists($plug_path.$file."/".$file.".js")) $cache_date= max($cache_date, filemtime("plugins/".$file."/".$file.".js")); } } closedir($dir); } } if(filemtime($this->cache_file) >= $cache_date){ // if cache file is up to date $last_modified = gmdate("D, d M Y H:i:s",filemtime($this->cache_file))." GMT"; if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) && strcasecmp($_SERVER["HTTP_IF_MODIFIED_SINCE"], $last_modified) === 0) { header("HTTP/1.1 304 Not Modified"); header("Last-modified: ".$last_modified); header("Cache-Control: Public"); // Tells HTTP 1.1 clients to cache header("Pragma:"); // Tells HTTP 1.0 clients to cache } else { header("Last-modified: ".$last_modified); header("Cache-Control: Public"); // Tells HTTP 1.1 clients to cache header("Pragma:"); // Tells HTTP 1.0 clients to cache header('Content-Length: '.filesize($this->cache_file)); echo file_get_contents($this->cache_file); } die; } } return false; } function load_files() { $loader= $this->get_content("edit_area_loader.js")."\n"; // get the list of other files to load $loader= preg_replace("/(t\.scripts_to_load=\s*)\[([^\]]*)\];/e" , "\$this->replace_scripts('script_list', '\\1', '\\2')" , $loader); $loader= preg_replace("/(t\.sub_scripts_to_load=\s*)\[([^\]]*)\];/e" , "\$this->replace_scripts('sub_script_list', '\\1', '\\2')" , $loader); // replace languages names $reg_path= $this->path."reg_syntax/"; $a_displayName = array(); if (($dir = @opendir($reg_path)) !== false) { while (($file = readdir($dir)) !== false) { if( $file !== "." && $file !== ".." && ( $pos = strpos( $file, '.js' ) ) !== false ) { $jsContent = $this->file_get_contents( $reg_path.$file ); if( preg_match( '@(\'|")DISPLAY_NAME\1\s*:\s*(\'|")(.*)\2@', $jsContent, $match ) ) { $a_displayName[] = "'". substr( $file, 0, $pos ) ."':'". htmlspecialchars( $match[3], ENT_QUOTES ) ."'"; } } } closedir($dir); } $loader = str_replace( '/*syntax_display_name_AUTO-FILL-BY-COMPRESSOR*/', implode( ",", $a_displayName ), $loader ); $this->datas= $loader; $this->compress_javascript($this->datas); // load other scripts needed for the loader preg_match_all('/"([^"]*)"/', $this->script_list, $match); foreach($match[1] as $key => $value) { $content= $this->get_content(preg_replace("/\\|\//i", "", $value).".js"); $this->compress_javascript($content); $this->datas.= $content."\n"; } //$this->datas); //$this->datas= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', "", $this->datas); // improved compression step 1/2 $this->datas= preg_replace(array("/(\b)EditAreaLoader(\b)/", "/(\b)editAreaLoader(\b)/", "/(\b)editAreas(\b)/"), array("EAL", "eAL", "eAs"), $this->datas); //$this->datas= str_replace(array("EditAreaLoader", "editAreaLoader", "editAreas"), array("EAL", "eAL", "eAs"), $this->datas); $this->datas.= "var editAreaLoader= eAL;var editAreas=eAs;EditAreaLoader=EAL;"; // load sub scripts $sub_scripts=""; $sub_scripts_list= array(); preg_match_all('/"([^"]*)"/', $this->sub_script_list, $match); foreach($match[1] as $value){ $sub_scripts_list[]= preg_replace("/\\|\//i", "", $value).".js"; } if($this->load_all_plugins){ // load plugins scripts $plug_path= $this->path."plugins/"; if (($dir = @opendir($plug_path)) !== false) { while (($file = readdir($dir)) !== false) { if ($file !== "." && $file !== "..") { if(is_dir($plug_path.$file) && file_exists($plug_path.$file."/".$file.".js")) $sub_scripts_list[]= "plugins/".$file."/".$file.".js"; } } closedir($dir); } } foreach($sub_scripts_list as $value){ $sub_scripts.= $this->get_javascript_content($value); } // improved compression step 2/2 $sub_scripts= preg_replace(array("/(\b)editAreaLoader(\b)/", "/(\b)editAreas(\b)/", "/(\b)editArea(\b)/", "/(\b)EditArea(\b)/"), array("eAL", "eAs", "eA", "EA"), $sub_scripts); // $sub_scripts= str_replace(array("editAreaLoader", "editAreas", "editArea", "EditArea"), array("eAL", "eAs", "eA", "EA"), $sub_scripts); $sub_scripts.= "var editArea= eA;EditArea=EA;"; // add the scripts // $this->datas.= sprintf("editAreaLoader.iframe_script= \"\";\n", $sub_scripts); // add the script and use a last compression if( $this->param['compress'] ) { $last_comp = array( 'Á' => 'this', 'Â' => 'textarea', 'Ã' => 'function', 'Ä' => 'prototype', 'Å' => 'settings', 'Æ' => 'length', 'Ç' => 'style', 'È' => 'parent', 'É' => 'last_selection', 'Ê' => 'value', 'Ë' => 'true', 'Ì' => 'false' /*, 'Î' => '"', 'Ï' => "\n", 'À' => "\r"*/); } else { $last_comp = array(); } $js_replace= ''; foreach( $last_comp as $key => $val ) $js_replace .= ".replace(/". $key ."/g,'". str_replace( array("\n", "\r"), array('\n','\r'), $val ) ."')"; $this->datas.= sprintf("editAreaLoader.iframe_script= \"\"%s;\n", str_replace( array_values($last_comp), array_keys($last_comp), $sub_scripts ), $js_replace); if($this->load_all_plugins) $this->datas.="editAreaLoader.all_plugins_loaded=true;\n"; // load the template $this->datas.= sprintf("editAreaLoader.template= \"%s\";\n", $this->get_html_content("template.html")); // load the css $this->datas.= sprintf("editAreaLoader.iframe_css= \"\";\n", $this->get_css_content("edit_area.css")); // $this->datas= "function editArea(){};editArea.prototype.loader= function(){alert('bouhbouh');} var a= new editArea();a.loader();"; } function send_datas() { if($this->param['debug']){ $header=sprintf("/* USE PHP COMPRESSION\n"); $header.=sprintf("javascript size: based files: %s => PHP COMPRESSION => %s ", $this->file_loaded_size, strlen($this->datas)); if($this->use_gzip){ $gzip_datas= gzencode($this->datas, 9, FORCE_GZIP); $header.=sprintf("=> GZIP COMPRESSION => %s", strlen($gzip_datas)); $ratio = round(100 - strlen($gzip_datas) / $this->file_loaded_size * 100.0); }else{ $ratio = round(100 - strlen($this->datas) / $this->file_loaded_size * 100.0); } $header.=sprintf(", reduced by %s%%\n", $ratio); $header.=sprintf("compression time: %s\n", $this->get_microtime()-$this->start_time); $header.=sprintf("%s\n", implode("\n", $this->infos)); $header.=sprintf("*/\n"); $this->datas= $header.$this->datas; } $mtime= time(); // ensure that the 2 disk files will have the same update time // generate gzip file and cahce it if using disk cache if($this->use_gzip){ $this->gzip_datas= gzencode($this->datas, 9, FORCE_GZIP); if($this->param['use_disk_cache']) $this->file_put_contents($this->gzip_cache_file, $this->gzip_datas, $mtime); } // generate full js file and cache it if using disk cache if($this->param['use_disk_cache']) $this->file_put_contents($this->full_cache_file, $this->datas, $mtime); // generate output if($this->use_gzip) echo $this->gzip_datas; else echo $this->datas; // die; } function get_content($end_uri) { $end_uri=preg_replace("/\.\./", "", $end_uri); // Remove any .. (security) $file= $this->path.$end_uri; if(file_exists($file)){ $this->infos[]=sprintf("'%s' loaded", $end_uri); /*$fd = fopen($file, 'rb'); $content = fread($fd, filesize($file)); fclose($fd); return $content;*/ return $this->file_get_contents($file); }else{ $this->infos[]=sprintf("'%s' not loaded", $end_uri); return ""; } } function get_javascript_content($end_uri) { $val=$this->get_content($end_uri); $this->compress_javascript($val); $this->prepare_string_for_quotes($val); return $val; } function compress_javascript(&$code) { if($this->param['compress']) { // remove all comments // (\"(?:[^\"\\]*(?:\\\\)*(?:\\\"?)?)*(?:\"|$))|(\'(?:[^\'\\]*(?:\\\\)*(?:\\'?)?)*(?:\'|$))|(?:\/\/(?:.|\r|\t)*?(\n|$))|(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$)) $code= preg_replace("/(\"(?:[^\"\\\\]*(?:\\\\\\\\)*(?:\\\\\"?)?)*(?:\"|$))|(\'(?:[^\'\\\\]*(?:\\\\\\\\)*(?:\\\\\'?)?)*(?:\'|$))|(?:\/\/(?:.|\r|\t)*?(\n|$))|(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))/s", "$1$2$3", $code); // remove line return, empty line and tabulation $code= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', " ", $code); // add line break before "else" otherwise navigators can't manage to parse the file $code= preg_replace('/(\b(else)\b)/', "\n$1", $code); // remove unnecessary spaces $code= preg_replace('/( |\t|\r)*(;|\{|\}|=|==|\-|\+|,|\(|\)|\|\||&\&|\:)( |\t|\r)*/', "$2", $code); } } function get_css_content($end_uri){ $code=$this->get_content($end_uri); // remove comments $code= preg_replace("/(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))/s", "", $code); // remove spaces $code= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', "", $code); // remove spaces $code= preg_replace('/( |\t|\r)?(\:|,|\{|\})( |\t|\r)+/', "$2", $code); $this->prepare_string_for_quotes($code); return $code; } function get_html_content($end_uri){ $code=$this->get_content($end_uri); //$code= preg_replace('/(\"(?:\\\"|[^\"])*(?:\"|$))|' . "(\'(?:\\\'|[^\'])*(?:\'|$))|(?:\/\/(?:.|\r|\t)*?(\n|$))|(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))/s", "$1$2$3", $code); $code= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', " ", $code); $this->prepare_string_for_quotes($code); return $code; } function prepare_string_for_quotes(&$str){ // prepare the code to be putted into quotes /*$pattern= array("/(\\\\)?\"/", '/\\\n/' , '/\\\r/' , "/(\r?\n)/"); $replace= array('$1$1\\"', '\\\\\\n', '\\\\\\r' , '\\\n"$1+"');*/ $pattern= array("/(\\\\)?\"/", '/\\\n/' , '/\\\r/' , "/(\r?\n)/"); if($this->param['compress']) $replace= array('$1$1\\"', '\\\\\\n', '\\\\\\r' , '\n'); else $replace= array('$1$1\\"', '\\\\\\n', '\\\\\\r' , "\\n\"\n+\""); $str= preg_replace($pattern, $replace, $str); } function replace_scripts($var, $param1, $param2) { $this->$var=stripslashes($param2); return $param1."[];"; } /* for php version that have not thoses functions */ function file_get_contents($file) { $fd = fopen($file, 'rb'); $content = fread($fd, filesize($file)); fclose($fd); $this->file_loaded_size+= strlen($content); return $content; } function file_put_contents($file, &$content, $mtime=-1) { if($mtime==-1) $mtime=time(); $fp = @fopen($file, "wb"); if ($fp) { fwrite($fp, $content); fclose($fp); touch($file, $mtime); return true; } return false; } function get_microtime() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } } ?> web2py-1.99.7.orig/applications/admin/static/edit_area/langs/0000755000175000017500000000000011724764235022553 5ustar josejoseweb2py-1.99.7.orig/applications/admin/static/edit_area/langs/de.js0000755000175000017500000000337711724764235023516 0ustar josejoseeditAreaLoader.lang["de"]={ new_document: "Neues Dokument", search_button: "Suchen und Ersetzen", search_command: "Weitersuchen / öffne Suchfeld", search: "Suchen", replace: "Ersetzen", replace_command: "Ersetzen / öffne Suchfeld", find_next: "Weitersuchen", replace_all: "Ersetze alle Treffer", reg_exp: "reguläre Ausdrücke", match_case: "passt auf den Begriff
    ", not_found: "Nicht gefunden.", occurrence_replaced: "Die Vorkommen wurden ersetzt.", search_field_empty: "Leeres Suchfeld", restart_search_at_begin: "Ende des zu durchsuchenden Bereiches erreicht. Es wird die Suche von Anfang an fortgesetzt.", //find a shorter translation move_popup: "Suchfenster bewegen", font_size: "--Schriftgröße--", go_to_line: "Gehe zu Zeile", go_to_line_prompt: "Gehe zu Zeilennummmer:", undo: "Rückgängig", redo: "Wiederherstellen", change_smooth_selection: "Aktiviere/Deaktiviere einige Features (weniger Bildschirmnutzung aber mehr CPU-Belastung)", highlight: "Syntax Highlighting an- und ausschalten", reset_highlight: "Highlighting zurücksetzen (falls mit Text nicht konform)", word_wrap: "Toggle word wrapping mode", help: "Info", save: "Speichern", load: "Öffnen", line_abbr: "Ln", char_abbr: "Ch", position: "Position", total: "Gesamt", close_popup: "Popup schließen", shortcuts: "Shortcuts", add_tab: "Tab zum Text hinzufügen", remove_tab: "Tab aus Text entfernen", about_notice: "Bemerkung: Syntax Highlighting ist nur für kurze Texte", toggle: "Editor an- und ausschalten", accesskey: "Accesskey", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "In Bearbeitung...", fullscreen: "Full-Screen", syntax_selection: "--Syntax--", close_tab: "Close file" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/bg.js0000755000175000017500000000516711724764235023515 0ustar josejose/* * Bulgarian translation * Author: Valentin Hristov * Company: SOFTKIT Bulgarian * Site: http://www.softkit-bg.com */ editAreaLoader.lang["bg"]={ new_document: "нов документ", search_button: "търсене и замяна", search_command: "търси следващия / отвори прозорец с търсачка", search: "търсене", replace: "замяна", replace_command: "замяна / отвори прозорец с търсачка", find_next: "намери следващия", replace_all: "замени всички", reg_exp: "реголярни изрази", match_case: "чуствителен към регистъра", not_found: "няма резултат.", occurrence_replaced: "замяната е осъществена.", search_field_empty: "Полето за търсене е празно", restart_search_at_begin: "До края на документа. Почни с началото.", move_popup: "премести прозореца с търсачката", font_size: "--Размер на шрифта--", go_to_line: "премени към реда", go_to_line_prompt: "премени към номера на реда:", undo: "отмени", redo: "върни", change_smooth_selection: "включи/изключи някой от функциите за преглед (по красиво, но повече натоварва)", highlight: "превключване на оцветяване на синтаксиса включена/изключена", reset_highlight: "въстанови оцветяване на синтаксиса (ако не е синхронизиран с текста)", word_wrap: "режим на пренасяне на дълги редове", help: "за програмата", save: "съхрани", load: "зареди", line_abbr: "Стр", char_abbr: "Стлб", position: "Позиция", total: "Всичко", close_popup: "затвори прозореца", shortcuts: "Бързи клавиши", add_tab: "добави табулация в текста", remove_tab: "премахни табулацията в текста", about_notice: "Внимание: използвайте функцията оцветяване на синтаксиса само за малки текстове", toggle: "Превключи редактор", accesskey: "Бърз клавиш", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "Зареждане...", fullscreen: "на цял екран", syntax_selection: "--Синтаксис--", close_tab: "Затвори файла" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/hr.js0000755000175000017500000000301711724764235023526 0ustar josejoseeditAreaLoader.lang["hr"]={ new_document: "Novi dokument", search_button: "Traži i izmijeni", search_command: "Traži dalje / Otvori prozor za traženje", search: "Traži", replace: "Izmijeni", replace_command: "Izmijeni / Otvori prozor za traženje", find_next: "Traži dalje", replace_all: "Izmjeni sve", reg_exp: "Regularni izrazi", match_case: "Bitna vel. slova", not_found: "nije naðeno.", occurrence_replaced: "izmjenjenih.", search_field_empty: "Prazno polje za traženje!", restart_search_at_begin: "Došao do kraja. Poèeo od poèetka.", move_popup: "Pomakni prozor", font_size: "--Velièina teksta--", go_to_line: "Odi na redak", go_to_line_prompt: "Odi na redak:", undo: "Vrati natrag", redo: "Napravi ponovo", change_smooth_selection: "Ukljuèi/iskljuèi neke moguænosti prikaza (pametniji prikaz, ali zagušeniji CPU)", highlight: "Ukljuèi/iskljuèi bojanje sintakse", reset_highlight: "Ponovi kolorizaciju (ako je nesinkronizirana s tekstom)", word_wrap: "toggle word wrapping mode", help: "O edit_area", save: "Spremi", load: "Uèitaj", line_abbr: "Ln", char_abbr: "Zn", position: "Pozicija", total: "Ukupno", close_popup: "Zatvori prozor", shortcuts: "Kratice", add_tab: "Dodaj tabulaciju", remove_tab: "Makni tabulaciju", about_notice: "Napomena: koloriziranje sintakse je samo za kratke kodove", toggle: "Prebaci naèin ureðivanja", accesskey: "Accesskey", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "Procesiram...", fullscreen: "Cijeli prozor", syntax_selection: "--Syntax--", close_tab: "Close file" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/mk.js0000755000175000017500000000451711724764235023532 0ustar josejoseeditAreaLoader.lang["mk"]={ new_document: "Нов документ", search_button: "Најди и замени", search_command: "Барај следно / Отвори нов прозорец за пребарување", search: "Барај", replace: "Замени", replace_command: "Замени / Отвори прозорец за пребарување", find_next: "најди следно", replace_all: "Замени ги сите", reg_exp: "Регуларни изрази", match_case: "Битна е големината на буквите", not_found: "не е пронајдено.", occurrence_replaced: "замени.", search_field_empty: "Полето за пребарување е празно", restart_search_at_begin: "Крај на областа. Стартувај од почеток.", move_popup: "Помести го прозорецот", font_size: "--Големина на текстот--", go_to_line: "Оди на линија", go_to_line_prompt: "Оди на линија со број:", undo: "Врати", redo: "Повтори", change_smooth_selection: "Вклучи/исклучи некои карактеристики за приказ (попаметен приказ, но поголемо оптеретување за процесорот)", highlight: "Вклучи/исклучи осветлување на синтакса", reset_highlight: "Ресетирај го осветлувањето на синтакса (доколку е десинхронизиранo со текстот)", word_wrap: "toggle word wrapping mode", help: "За", save: "Зачувај", load: "Вчитај", line_abbr: "Лн", char_abbr: "Зн", position: "Позиција", total: "Вкупно", close_popup: "Затвори го прозорецот", shortcuts: "Кратенки", add_tab: "Додај табулација на текстот", remove_tab: "Отстрани ја табулацијата", about_notice: "Напомена: Осветлувањето на синтанса е само за краток текст", toggle: "Смени начин на уредување", accesskey: "Accesskey", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "Обработувам...", fullscreen: "Цел прозорец", syntax_selection: "--Синтакса--", close_tab: "Избери датотека" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/sk.js0000755000175000017500000000333611724764235023536 0ustar josejoseeditAreaLoader.lang["sk"]={ new_document: "nový prázdy dokument", search_button: "vyhľadaj a nahraď", search_command: "hľadaj ďalsšie / otvor vyhľadávacie pole", search: "hľadaj", replace: "nahraď", replace_command: "nahraď / otvor vyhľadávacie pole", find_next: "nájdi ďalšie", replace_all: "nahraď všetko", reg_exp: "platné výrazy", match_case: "zhodujúce sa výrazy", not_found: "nenájdené.", occurrence_replaced: "výskyty nahradené.", search_field_empty: "Pole vyhľadávanie je prádzne", restart_search_at_begin: "End of area reached. Restart at begin.", move_popup: "presuň vyhľadávacie okno", font_size: "--Veľkosť textu--", go_to_line: "prejdi na riadok", go_to_line_prompt: "prejdi na riadok:", undo: "krok späť", redo: "prepracovať", change_smooth_selection: "povoliť/zamietnúť niektoré zo zobrazených funkcií (účelnejšie zobrazenie vyžaduje väčšie zaťaženie procesora CPU)", highlight: "prepnúť zvýrazňovanie syntaxe zap/vyp", reset_highlight: "zrušiť zvýrazňovanie (ak je nesynchronizované s textom)", word_wrap: "toggle word wrapping mode", help: "o programe", save: "uložiť", load: "načítať", line_abbr: "Ln", char_abbr: "Ch", position: "Pozícia", total: "Spolu", close_popup: "zavrieť okno", shortcuts: "Skratky", add_tab: "pridať tabulovanie textu", remove_tab: "odstrániť tabulovanie textu", about_notice: "Upozornenie: funkcia zvýrazňovania syntaxe je dostupná iba pre malý text", toggle: "Prepnúť editor", accesskey: "Accesskey", tab: "Záložka", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "Spracúvam...", fullscreen: "cel=a obrazovka", syntax_selection: "--Vyber Syntax--", close_tab: "Close file" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/pt.js0000755000175000017500000000271411724764235023543 0ustar josejoseeditAreaLoader.lang["pt"]={ new_document: "Novo documento", search_button: "Localizar e substituir", search_command: "Localizar próximo", search: "Localizar", replace: "Substituir", replace_command: "Substituir", find_next: "Localizar", replace_all: "Subst. tudo", reg_exp: "Expressões regulares", match_case: "Diferenciar maiúsculas e minúsculas", not_found: "Não encontrado.", occurrence_replaced: "Ocorrências substituidas", search_field_empty: "Campo localizar vazio.", restart_search_at_begin: "Fim das ocorrências. Recomeçar do inicio.", move_popup: "Mover janela", font_size: "--Tamanho da fonte--", go_to_line: "Ir para linha", go_to_line_prompt: "Ir para a linha:", undo: "Desfazer", redo: "Refazer", change_smooth_selection: "Opções visuais", highlight: "Cores de sintaxe", reset_highlight: "Resetar cores (se não sincronizado)", word_wrap: "toggle word wrapping mode", help: "Sobre", save: "Salvar", load: "Carregar", line_abbr: "Ln", char_abbr: "Ch", position: "Posição", total: "Total", close_popup: "Fechar", shortcuts: "Shortcuts", add_tab: "Adicionar tabulação", remove_tab: "Remover tabulação", about_notice: "Atenção: Cores de sintaxe são indicados somente para textos pequenos", toggle: "Exibir editor", accesskey: "Accesskey", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "Processando...", fullscreen: "fullscreen", syntax_selection: "--Syntax--", close_tab: "Close file" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/ja.js0000755000175000017500000000326611724764235023515 0ustar josejoseeditAreaLoader.lang["ja"]={ new_document: "新規作成", search_button: "検索・置換", search_command: "次を検索 / 検索窓を表示", search: "検索", replace: "置換", replace_command: "置換 / 置換窓を表示", find_next: "次を検索", replace_all: "全置換", reg_exp: "正規表現", match_case: "大文字小文字の区別", not_found: "見つかりません。", occurrence_replaced: "置換しました。", search_field_empty: "検索対象文字列が空です。", restart_search_at_begin: "終端に達しました、始めに戻ります", move_popup: "検索窓を移動", font_size: "--フォントサイズ--", go_to_line: "指定行へ移動", go_to_line_prompt: "指定行へ移動します:", undo: "元に戻す", redo: "やり直し", change_smooth_selection: "スムース表示の切り替え(CPUを使います)", highlight: "構文強調表示の切り替え", reset_highlight: "構文強調表示のリセット", word_wrap: "toggle word wrapping mode", help: "ヘルプを表示", save: "保存", load: "読み込み", line_abbr: "行", char_abbr: "文字", position: "位置", total: "合計", close_popup: "ポップアップを閉じる", shortcuts: "ショートカット", add_tab: "タブを挿入する", remove_tab: "タブを削除する", about_notice: "注意:構文強調表示は短いテキストでしか有効に機能しません。", toggle: "テキストエリアとeditAreaの切り替え", accesskey: "アクセスキー", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "処理中です...", fullscreen: "fullscreen", syntax_selection: "--Syntax--", close_tab: "Close file" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/en.js0000755000175000017500000000275411724764235023526 0ustar josejoseeditAreaLoader.lang["en"]={ new_document: "new empty document", search_button: "search and replace", search_command: "search next / open search area", search: "search", replace: "replace", replace_command: "replace / open search area", find_next: "find next", replace_all: "replace all", reg_exp: "regular expressions", match_case: "match case", not_found: "not found.", occurrence_replaced: "occurences replaced.", search_field_empty: "Search field empty", restart_search_at_begin: "End of area reached. Restart at begin.", move_popup: "move search popup", font_size: "--Font size--", go_to_line: "go to line", go_to_line_prompt: "go to line number:", undo: "undo", redo: "redo", change_smooth_selection: "enable/disable some display features (smarter display but more CPU charge)", highlight: "toggle syntax highlight on/off", reset_highlight: "reset highlight (if desyncronized from text)", word_wrap: "toggle word wrapping mode", help: "about", save: "save", load: "load", line_abbr: "Ln", char_abbr: "Ch", position: "Position", total: "Total", close_popup: "close popup", shortcuts: "Shortcuts", add_tab: "add tabulation to text", remove_tab: "remove tabulation to text", about_notice: "Notice: syntax highlight function is only for small text", toggle: "Toggle editor", accesskey: "Accesskey", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "Processing...", fullscreen: "fullscreen", syntax_selection: "--Syntax--", close_tab: "Close file" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/it.js0000755000175000017500000000317411724764235023535 0ustar josejoseeditAreaLoader.lang["it"]={ new_document: "nuovo documento vuoto", search_button: "cerca e sostituisci", search_command: "trova successivo / apri finestra di ricerca", search: "cerca", replace: "sostituisci", replace_command: "sostituisci / apri finestra di ricerca", find_next: "trova successivo", replace_all: "sostituisci tutti", reg_exp: "espressioni regolari", match_case: "confronta maiuscole/minuscole
    ", not_found: "non trovato.", occurrence_replaced: "occorrenze sostituite.", search_field_empty: "Campo ricerca vuoto", restart_search_at_begin: "Fine del testo raggiunta. Ricomincio dall'inizio.", move_popup: "sposta popup di ricerca", font_size: "-- Dimensione --", go_to_line: "vai alla linea", go_to_line_prompt: "vai alla linea numero:", undo: "annulla", redo: "ripeti", change_smooth_selection: "abilita/disabilita alcune caratteristiche della visualizzazione", highlight: "abilita/disabilita colorazione della sintassi", reset_highlight: "aggiorna colorazione (se non sincronizzata)", word_wrap: "toggle word wrapping mode", help: "informazioni su...", save: "salva", load: "carica", line_abbr: "Ln", char_abbr: "Ch", position: "Posizione", total: "Totale", close_popup: "chiudi popup", shortcuts: "Scorciatoie", add_tab: "aggiungi tabulazione", remove_tab: "rimuovi tabulazione", about_notice: "Avviso: la colorazione della sintassi vale solo con testo piccolo", toggle: "Abilita/disabilita editor", accesskey: "Accesskey", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "In corso...", fullscreen: "fullscreen", syntax_selection: "--Syntax--", close_tab: "Close file" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/ru.js0000755000175000017500000000464211724764235023550 0ustar josejoseeditAreaLoader.lang["ru"]={ new_document: "новый пустой документ", search_button: "поиск и замена", search_command: "искать следующий / открыть панель поиска", search: "поиск", replace: "замена", replace_command: "заменить / открыть панель поиска", find_next: "найти следующее", replace_all: "заменить все", reg_exp: "регулярное выражение", match_case: "учитывать регистр", not_found: "не найдено.", occurrence_replaced: "вхождение заменено.", search_field_empty: "Поле поиска пустое", restart_search_at_begin: "Достигнут конец документа. Начинаю с начала.", move_popup: "переместить окно поиска", font_size: "--Размер шрифта--", go_to_line: "перейти к строке", go_to_line_prompt: "перейти к строке номер:", undo: "отменить", redo: "вернуть", change_smooth_selection: "включить/отключить некоторые функции просмотра (более красиво, но больше использует процессор)", highlight: "переключить подсветку синтаксиса включена/выключена", reset_highlight: "восстановить подсветку (если разсинхронизирована от текста)", word_wrap: "toggle word wrapping mode", help: "о программе", save: "сохранить", load: "загрузить", line_abbr: "Стр", char_abbr: "Стлб", position: "Позиция", total: "Всего", close_popup: "закрыть всплывающее окно", shortcuts: "Горячие клавиши", add_tab: "добавить табуляцию в текст", remove_tab: "убрать табуляцию из текста", about_notice: "Внимание: функция подсветки синтаксиса только для небольших текстов", toggle: "Переключить редактор", accesskey: "Горячая клавиша", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "Обработка...", fullscreen: "полный экран", syntax_selection: "--Синтакс--", close_tab: "Закрыть файл" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/pl.js0000755000175000017500000000316511724764235023534 0ustar josejoseeditAreaLoader.lang["pl"]={ new_document: "nowy dokument", search_button: "znajdź i zamień", search_command: "znajdź następny", search: "znajdź", replace: "zamień", replace_command: "zamień", find_next: "następny", replace_all: "zamień wszystko", reg_exp: "wyrażenie regularne", match_case: "uwzględnij wielkość liter
    ", not_found: "nie znaleziono.", occurrence_replaced: "wystąpień zamieniono.", search_field_empty: "Nie wprowadzono tekstu", restart_search_at_begin: "Koniec dokumentu. Wyszukiwanie od początku.", move_popup: "przesuń okienko wyszukiwania", font_size: "Rozmiar", go_to_line: "idź do linii", go_to_line_prompt: "numer linii:", undo: "cofnij", redo: "przywróć", change_smooth_selection: "włącz/wyłącz niektóre opcje wyglądu (zaawansowane opcje wyglądu obciążają procesor)", highlight: "włącz/wyłącz podświetlanie składni", reset_highlight: "odśwież podświetlanie składni (jeśli rozsynchronizowało się z tekstem)", word_wrap: "toggle word wrapping mode", help: "o programie", save: "zapisz", load: "otwórz", line_abbr: "Ln", char_abbr: "Zn", position: "Pozycja", total: "W sumie", close_popup: "zamknij okienko", shortcuts: "Skróty klawiaturowe", add_tab: "dodaj wcięcie do zaznaczonego tekstu", remove_tab: "usuń wcięcie", about_notice: "Uwaga: podświetlanie składni nie jest zalecane dla długich tekstów", toggle: "Włącz/wyłącz edytor", accesskey: "Alt+", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "Przetwarzanie...", fullscreen: "fullscreen", syntax_selection: "--Syntax--", close_tab: "Close file" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/zh.js0000755000175000017500000000304411724764235023536 0ustar josejoseeditAreaLoader.lang["zh"]={ new_document: "新建空白文档", search_button: "查找与替换", search_command: "查找下一个 / 打开查找框", search: "查找", replace: "替换", replace_command: "替换 / 打开查找框", find_next: "查找下一个", replace_all: "全部替换", reg_exp: "正则表达式", match_case: "匹配大小写", not_found: "未找到.", occurrence_replaced: "处被替换.", search_field_empty: "查找框没有内容", restart_search_at_begin: "已到到文档末尾. 从头重新查找.", move_popup: "移动查找对话框", font_size: "--字体大小--", go_to_line: "转到行", go_to_line_prompt: "转到行:", undo: "恢复", redo: "重做", change_smooth_selection: "启用/禁止一些显示特性(更好看但更耗费资源)", highlight: "启用/禁止语法高亮", reset_highlight: "重置语法高亮(当文本显示不同步时)", word_wrap: "toggle word wrapping mode", help: "关于", save: "保存", load: "加载", line_abbr: "行", char_abbr: "字符", position: "位置", total: "总计", close_popup: "关闭对话框", shortcuts: "快捷键", add_tab: "添加制表符(Tab)", remove_tab: "移除制表符(Tab)", about_notice: "注意:语法高亮功能仅用于较少内容的文本(文件内容太大会导致浏览器反应慢)", toggle: "切换编辑器", accesskey: "快捷键", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "正在处理中...", fullscreen: "全屏编辑", syntax_selection: "--语法--", close_tab: "关闭文件" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/fi.js0000755000175000017500000000321111724764235023507 0ustar josejoseeditAreaLoader.lang["fi"]={ new_document: "uusi tyhjä dokumentti", search_button: "etsi ja korvaa", search_command: "etsi seuraava / avaa etsintävalikko", search: "etsi", replace: "korvaa", replace_command: "korvaa / avaa etsintävalikko", find_next: "etsi seuraava", replace_all: "korvaa kaikki", reg_exp: "säännölliset lausekkeet", match_case: "täsmää kirjainkokoon", not_found: "ei löytynyt.", occurrence_replaced: "esiintymää korvattu.", search_field_empty: "Haettava merkkijono on tyhjä", restart_search_at_begin: "Alueen loppu saavutettiin. Aloitetaan alusta.", move_popup: "siirrä etsintävalikkoa", font_size: "--Fontin koko--", go_to_line: "siirry riville", go_to_line_prompt: "mene riville:", undo: "peruuta", redo: "tee uudelleen", change_smooth_selection: "kytke/sammuta joitakin näyttötoimintoja (Älykkäämpi toiminta, mutta suurempi CPU kuormitus)", highlight: "kytke syntaksikorostus päälle/pois", reset_highlight: "resetoi syntaksikorostus (jos teksti ei ole synkassa korostuksen kanssa)", word_wrap: "toggle word wrapping mode", help: "tietoja", save: "tallenna", load: "lataa", line_abbr: "Rv", char_abbr: "Pos", position: "Paikka", total: "Yhteensä", close_popup: "sulje valikko", shortcuts: "Pikatoiminnot", add_tab: "lisää sisennys tekstiin", remove_tab: "poista sisennys tekstistä", about_notice: "Huomautus: syntaksinkorostus toimii vain pienelle tekstille", toggle: "Kytke editori", accesskey: "Pikanäppäin", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "Odota...", fullscreen: "koko ruutu", syntax_selection: "--Syntaksi--", close_tab: "Sulje tiedosto" };web2py-1.99.7.orig/applications/admin/static/edit_area/langs/cs.js0000755000175000017500000000332511724764235023524 0ustar josejoseeditAreaLoader.lang["cs"]={ new_document: "Nový dokument", search_button: "Najdi a nahraď", search_command: "Hledej další / otevři vyhledávací pole", search: "Hledej", replace: "Nahraď", replace_command: "Nahraď / otevři vyhledávací pole", find_next: "Najdi další", replace_all: "Nahraď vše", reg_exp: "platné výrazy", match_case: "vyhodnocené výrazy", not_found: "nenalezené.", occurrence_replaced: "výskyty nahrazené.", search_field_empty: "Pole vyhledávání je prázdné", restart_search_at_begin: "Dosažen konec souboru, začínám od začátku.", move_popup: "Přesuň vyhledávací okno", font_size: "--Velikost textu--", go_to_line: "Přejdi na řádek", go_to_line_prompt: "Přejdi na řádek:", undo: "krok zpět", redo: "znovu", change_smooth_selection: "Povolit nebo zakázat některé ze zobrazených funkcí (účelnější zobrazení požaduje větší zatížení procesoru)", highlight: "Zvýrazňování syntaxe zap./vyp.", reset_highlight: "Obnovit zvýraznění (v případě nesrovnalostí)", word_wrap: "toggle word wrapping mode", help: "O programu", save: "Uložit", load: "Otevřít", line_abbr: "Ř.", char_abbr: "S.", position: "Pozice", total: "Celkem", close_popup: "Zavřít okno", shortcuts: "Zkratky", add_tab: "Přidat tabulování textu", remove_tab: "Odtsranit tabulování textu", about_notice: "Upozornění! Funkce zvýrazňování textu je k dispozici pouze pro malý text", toggle: "Přepnout editor", accesskey: "Přístupová klávesa", tab: "Záložka", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "Zpracovávám ...", fullscreen: "Celá obrazovka", syntax_selection: "--vyber zvýrazňovač--", close_tab: "Close file" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/fr.js0000755000175000017500000000365011724764235023527 0ustar josejoseeditAreaLoader.lang["fr"]={ new_document: "nouveau document (efface le contenu)", search_button: "rechercher / remplacer", search_command: "rechercher suivant / ouvrir la fenêtre de recherche", search: "rechercher", replace: "remplacer", replace_command: "remplacer / ouvrir la fenêtre de recherche", find_next: "rechercher", replace_all: "tout remplacer", reg_exp: "expr. régulière", match_case: "respecter la casse", not_found: "pas trouvé.", occurrence_replaced: "remplacements éffectués.", search_field_empty: "Le champ de recherche est vide.", restart_search_at_begin: "Fin du texte atteint, poursuite au début.", move_popup: "déplacer la fenêtre de recherche", font_size: "--Taille police--", go_to_line: "aller à la ligne", go_to_line_prompt: "aller a la ligne numero:", undo: "annuler", redo: "refaire", change_smooth_selection: "activer/désactiver des fonctions d'affichage (meilleur affichage mais plus de charge processeur)", highlight: "activer/désactiver la coloration syntaxique", reset_highlight: "réinitialiser la coloration syntaxique (si désyncronisée du texte)", word_wrap: "activer/désactiver les retours à la ligne automatiques", help: "à propos", save: "sauvegarder", load: "charger", line_abbr: "Ln", char_abbr: "Ch", position: "Position", total: "Total", close_popup: "fermer le popup", shortcuts: "Racourcis clavier", add_tab: "ajouter une tabulation dans le texte", remove_tab: "retirer une tabulation dans le texte", about_notice: "Note: la coloration syntaxique n'est prévue que pour de courts textes.", toggle: "basculer l'éditeur", accesskey: "Accesskey", tab: "Tab", shift: "Maj", ctrl: "Ctrl", esc: "Esc", processing: "chargement...", fullscreen: "plein écran", syntax_selection: "--Syntaxe--", close_tab: "Fermer le fichier" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/dk.js0000755000175000017500000000320611724764235023513 0ustar josejoseeditAreaLoader.lang["dk"]={ new_document: "nyt tomt dokument", search_button: "søg og erstat", search_command: "find næste / åben søgefelt", search: "søg", replace: "erstat", replace_command: "erstat / åben søgefelt", find_next: "find næste", replace_all: "erstat alle", reg_exp: "regular expressions", match_case: "forskel på store/små bogstaver
    ", not_found: "not found.", occurrence_replaced: "occurences replaced.", search_field_empty: "Search field empty", restart_search_at_begin: "End of area reached. Restart at begin.", move_popup: "flyt søgepopup", font_size: "--Skriftstørrelse--", go_to_line: "gå til linie", go_to_line_prompt: "gå til linienummer:", undo: "fortryd", redo: "gentag", change_smooth_selection: "slå display funktioner til/fra (smartere display men mere CPU krævende)", highlight: "slå syntax highlight til/fra", reset_highlight: "nulstil highlight (hvis den er desynkroniseret fra teksten)", word_wrap: "toggle word wrapping mode", help: "om", save: "gem", load: "hent", line_abbr: "Ln", char_abbr: "Ch", position: "Position", total: "Total", close_popup: "luk popup", shortcuts: "Genveje", add_tab: "tilføj tabulation til tekst", remove_tab: "fjern tabulation fra tekst", about_notice: "Husk: syntax highlight funktionen bør kun bruge til små tekster", toggle: "Slå editor til / fra", accesskey: "Accesskey", tab: "Tab", shift: "Skift", ctrl: "Ctrl", esc: "Esc", processing: "Processing...", fullscreen: "fullscreen", syntax_selection: "--Syntax--", close_tab: "Close file" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/nl.js0000755000175000017500000000305511724764235023530 0ustar josejoseeditAreaLoader.lang["nl"]={ new_document: "nieuw leeg document", search_button: "zoek en vervang", search_command: "zoek volgende / zoekscherm openen", search: "zoek", replace: "vervang", replace_command: "vervang / zoekscherm openen", find_next: "volgende vinden", replace_all: "alles vervangen", reg_exp: "reguliere expressies", match_case: "hoofdletter gevoelig", not_found: "niet gevonden.", occurrence_replaced: "object vervangen.", search_field_empty: "Zoek veld leeg", restart_search_at_begin: "Niet meer instanties gevonden, begin opnieuw", move_popup: "versleep zoek scherm", font_size: "--Letter grootte--", go_to_line: "Ga naar regel", go_to_line_prompt: "Ga naar regel nummer:", undo: "Ongedaan maken", redo: "Opnieuw doen", change_smooth_selection: "zet wat schermopties aan/uit (kan langzamer zijn)", highlight: "zet syntax highlight aan/uit", reset_highlight: "reset highlight (indien gedesynchronizeerd)", word_wrap: "toggle word wrapping mode", help: "informatie", save: "opslaan", load: "laden", line_abbr: "Ln", char_abbr: "Ch", position: "Positie", total: "Totaal", close_popup: "Popup sluiten", shortcuts: "Snelkoppelingen", add_tab: "voeg tabs toe in tekst", remove_tab: "verwijder tabs uit tekst", about_notice: "Notitie: syntax highlight functie is alleen voor kleine tekst", toggle: "geavanceerde bewerkingsopties", accesskey: "Accessknop", tab: "Tab", shift: "Shift", ctrl: "Ctrl", esc: "Esc", processing: "Verwerken...", fullscreen: "fullscreen", syntax_selection: "--Syntax--", close_tab: "Close file" }; web2py-1.99.7.orig/applications/admin/static/edit_area/langs/eo.js0000755000175000017500000000344511724764235023525 0ustar josejoseeditAreaLoader.lang["eo"]={ new_document: "nova dokumento (vakigas la enhavon)", search_button: "serĉi / anstataŭigi", search_command: "pluserĉi / malfermi la serĉo-fenestron", search: "serĉi", replace: "anstataŭigi", replace_command: "anstataŭigi / malfermi la serĉo-fenestron", find_next: "serĉi", replace_all: "anstataŭigi ĉion", reg_exp: "regula esprimo", match_case: "respekti la usklecon", not_found: "ne trovita.", occurrence_replaced: "anstataŭigoj plenumitaj.", search_field_empty: "La kampo estas malplena.", restart_search_at_begin: "Fino de teksto ĝisrirata, ĉu daŭrigi el la komenco?", move_popup: "movi la serĉo-fenestron", font_size: "--Tipara grando--", go_to_line: "iri al la linio", go_to_line_prompt: "iri al la linio numero:", undo: "rezigni", redo: "refari", change_smooth_selection: "ebligi/malebligi la funkcioj de vidigo (pli bona vidigo, sed pli da ŝarĝo de la ĉeforgano)", highlight: "ebligi/malebligi la sintaksan kolorigon", reset_highlight: "repravalorizi la sintaksan kolorigon (se malsinkronigon de la teksto)", word_wrap: "toggle word wrapping mode", help: "pri", save: "registri", load: "ŝarĝi", line_abbr: "Ln", char_abbr: "Sg", position: "Pozicio", total: "Sumo", close_popup: "fermi la ŝprucfenestron", shortcuts: "Fulmoklavo", add_tab: "aldoni tabon en la tekston", remove_tab: "forigi tablon el la teksto", about_notice: "Noto: la sintaksa kolorigo estas nur prikalkulita por mallongaj tekstoj.", toggle: "baskuligi la redaktilon", accesskey: "Fulmoklavo", tab: "Tab", shift: "Maj", ctrl: "Ktrl", esc: "Esk", processing: "ŝargante...", fullscreen: "plenekrane", syntax_selection: "--Sintakso--", close_tab: "Fermi la dosieron" };web2py-1.99.7.orig/applications/admin/static/edit_area/langs/es.js0000755000175000017500000000335311724764235023527 0ustar josejoseeditAreaLoader.lang["es"]={ new_document: "nuevo documento vacío", search_button: "buscar y reemplazar", search_command: "buscar siguiente / abrir área de búsqueda", search: "buscar", replace: "reemplazar", replace_command: "reemplazar / abrir área de búsqueda", find_next: "encontrar siguiente", replace_all: "reemplazar todos", reg_exp: "expresiones regulares", match_case: "coincidir capitalización", not_found: "no encontrado.", occurrence_replaced: "ocurrencias reemplazadas.", search_field_empty: "Campo de búsqueda vacío", restart_search_at_begin: "Se ha llegado al final del área. Se va a seguir desde el principio.", move_popup: "mover la ventana de búsqueda", font_size: "--Tamaño de la fuente--", go_to_line: "ir a la línea", go_to_line_prompt: "ir a la línea número:", undo: "deshacer", redo: "rehacer", change_smooth_selection: "activar/desactivar algunas características de visualización (visualización más inteligente pero más carga de CPU)", highlight: "intercambiar resaltado de sintaxis", reset_highlight: "reinicializar resaltado (si no esta sincronizado con el texto)", word_wrap: "toggle word wrapping mode", help: "acerca", save: "guardar", load: "cargar", line_abbr: "Ln", char_abbr: "Ch", position: "Posición", total: "Total", close_popup: "recuadro de cierre", shortcuts: "Atajos", add_tab: "añadir tabulado al texto", remove_tab: "borrar tabulado del texto", about_notice: "Aviso: el resaltado de sintaxis sólo funciona para texto pequeño", toggle: "Cambiar editor", accesskey: "Tecla de acceso", tab: "Tab", shift: "Mayúsc", ctrl: "Ctrl", esc: "Esc", processing: "Procesando...", fullscreen: "pantalla completa", syntax_selection: "--Syntax--", close_tab: "Close file" }; web2py-1.99.7.orig/applications/admin/static/edit_area/edit_area_full_with_plugins.js0000755000175000017500000034340611724764235027555 0ustar josejose function EAL(){var t=this;t.version="0.8.1.1";date=new Date();t.start_time=date.getTime();t.win="loading";t.error=false;t.baseURL="";t.template="";t.lang={};t.load_syntax={};t.syntax={};t.loadedFiles=[];t.waiting_loading={};t.scripts_to_load=[];t.sub_scripts_to_load=[];t.resize=[];t.hidden={};t.default_settings={debug:false,smooth_selection:true,font_size:"10",font_family:"monospace",start_highlight:false,toolbar:"search,go_to_line,fullscreen,|,undo,redo,|,select_font,|,change_smooth_selection,highlight,reset_highlight,word_wrap,|,help",begin_toolbar:"",end_toolbar:"",is_multi_files:false,allow_resize:"both",show_line_colors:false,min_width:400,min_height:125,replace_tab_by_spaces:false,allow_toggle:true,language:"en",syntax:"",syntax_selection_allow:"basic,brainfuck,c,coldfusion,cpp,css,html,java,js,pas,perl,php,python,ruby,robotstxt,sql,tsql,vb,xml",display:"onload",max_undo:30,browsers:"known",plugins:"",gecko_spellcheck:false,fullscreen:false,is_editable:true,cursor_position:"begin",word_wrap:false,autocompletion:false,load_callback:"",save_callback:"",change_callback:"",submit_callback:"",EA_init_callback:"",EA_delete_callback:"",EA_load_callback:"",EA_unload_callback:"",EA_toggle_on_callback:"",EA_toggle_off_callback:"",EA_file_switch_on_callback:"",EA_file_switch_off_callback:"",EA_file_close_callback:""};t.advanced_buttons=[ ['new_document','newdocument.gif','new_document',false],['search','search.gif','show_search',false],['go_to_line','go_to_line.gif','go_to_line',false],['undo','undo.gif','undo',true],['redo','redo.gif','redo',true],['change_smooth_selection','smooth_selection.gif','change_smooth_selection_mode',true],['reset_highlight','reset_highlight.gif','resync_highlight',true],['highlight','highlight.gif','change_highlight',true],['help','help.gif','show_help',false],['save','save.gif','save',false],['load','load.gif','load',false],['fullscreen','fullscreen.gif','toggle_full_screen',false],['word_wrap','word_wrap.gif','toggle_word_wrap',true],['autocompletion','autocompletion.gif','toggle_autocompletion',true] ];t.set_browser_infos(t);if(t.isIE>=6||t.isGecko||(t.isWebKit&&!t.isSafari<3)||t.isOpera>=9||t.isCamino)t.isValidBrowser=true; else t.isValidBrowser=false;t.set_base_url();for(var i=0;i0)s["toolbar"]=s["begin_toolbar"]+","+s["toolbar"];if(s["end_toolbar"].length>0)s["toolbar"]=s["toolbar"]+","+s["end_toolbar"];s["tab_toolbar"]=s["toolbar"].replace(/ /g,"").split(",");s["plugins"]=s["plugins"].replace(/ /g,"").split(",");for(i=0;i0){s["syntax"]=s["syntax"].toLowerCase();t.load_script(t.baseURL+"reg_syntax/"+s["syntax"]+".js");}eAs[s["id"]]={"settings":s};eAs[s["id"]]["displayed"]=false;eAs[s["id"]]["hidden"]=false;t.start(s["id"]);},delete_instance:function(id){var d=document,fs=window.frames,span,iframe;eAL.execCommand(id,"EA_delete");if(fs["frame_"+id]&&fs["frame_"+id].editArea){if(eAs[id]["displayed"])eAL.toggle(id,"off");fs["frame_"+id].editArea.execCommand("EA_unload");}span=d.getElementById("EditAreaArroundInfos_"+id);if(span)span.parentNode.removeChild(span);iframe=d.getElementById("frame_"+id);if(iframe){iframe.parentNode.removeChild(iframe);try{delete fs["frame_"+id];}catch(e){}}delete eAs[id];},start:function(id){var t=this,d=document,f,span,father,next,html='',html_toolbar_content='',template,content,i;if(t.win!="loaded"){setTimeout("eAL.start('"+id+"');",50);return;}for(i in t.waiting_loading){if(t.waiting_loading[i]!="loaded"&&typeof(t.waiting_loading[i])!="function"){setTimeout("eAL.start('"+id+"');",50);return;}}if(!t.lang[eAs[id]["settings"]["language"]]||(eAs[id]["settings"]["syntax"].length>0&&!t.load_syntax[eAs[id]["settings"]["syntax"]])){setTimeout("eAL.start('"+id+"');",50);return;}if(eAs[id]["settings"]["syntax"].length>0)t.init_syntax_regexp();if(!d.getElementById("EditAreaArroundInfos_"+id)&&(eAs[id]["settings"]["debug"]||eAs[id]["settings"]["allow_toggle"])){span=d.createElement("span");span.id="EditAreaArroundInfos_"+id;if(eAs[id]["settings"]["allow_toggle"]){checked=(eAs[id]["settings"]["display"]=="onload")?"checked='checked'":"";html+="
    ";html+="";html+="
    ";}if(eAs[id]["settings"]["debug"])html+="
    ";html=t.translate(html,eAs[id]["settings"]["language"]);span.innerHTML=html;father=d.getElementById(id).parentNode;next=d.getElementById(id).nextSibling;if(next==null)father.appendChild(span); else father.insertBefore(span,next);}if(!eAs[id]["initialized"]){t.execCommand(id,"EA_init");if(eAs[id]["settings"]["display"]=="later"){eAs[id]["initialized"]=true;return;}}if(t.isIE){t.init_ie_textarea(id);}area=eAs[id];for(i=0;i';}for(i=0;i';t.iframe_script+='';}if(!t.iframe_css){t.iframe_css="";}template=t.template.replace(/\[__BASEURL__\]/g,t.baseURL);template=template.replace("[__TOOLBAR__]",html_toolbar_content);template=t.translate(template,area["settings"]["language"],"template");template=template.replace("[__CSSRULES__]",t.iframe_css);template=template.replace("[__JSCODE__]",t.iframe_script);template=template.replace("[__EA_VERSION__]",t.version);area.textarea=d.getElementById(area["settings"]["id"]);eAs[area["settings"]["id"]]["textarea"]=area.textarea;if(typeof(window.frames["frame_"+area["settings"]["id"]])!='undefined')delete window.frames["frame_"+area["settings"]["id"]];father=area.textarea.parentNode;content=d.createElement("iframe");content.name="frame_"+area["settings"]["id"];content.id="frame_"+area["settings"]["id"];content.style.borderWidth="0px";setAttribute(content,"frameBorder","0");content.style.overflow="hidden";content.style.display="none";next=area.textarea.nextSibling;if(next==null)father.appendChild(content); else father.insertBefore(content,next);f=window.frames["frame_"+area["settings"]["id"]];f.document.open();f.eAs=eAs;f.area_id=area["settings"]["id"];f.document.area_id=area["settings"]["id"];f.document.write(template);f.document.close();},toggle:function(id,toggle_to){if(!toggle_to)toggle_to=(eAs[id]["displayed"]==true)?"off":"on";if(eAs[id]["displayed"]==true&&toggle_to=="off"){this.toggle_off(id);} else if(eAs[id]["displayed"]==false&&toggle_to=="on"){this.toggle_on(id);}return false;},toggle_off:function(id){var fs=window.frames,f,t,parNod,nxtSib,selStart,selEnd,scrollTop,scrollLeft;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];if(f.editArea.fullscreen['isFull'])f.editArea.toggle_full_screen(false);eAs[id]["displayed"]=false;t.wrap="off";setAttribute(t,"wrap","off");parNod=t.parentNode;nxtSib=t.nextSibling;parNod.removeChild(t);parNod.insertBefore(t,nxtSib);t.value=f.editArea.textarea.value;selStart=f.editArea.last_selection["selectionStart"];selEnd=f.editArea.last_selection["selectionEnd"];scrollTop=f.document.getElementById("result").scrollTop;scrollLeft=f.document.getElementById("result").scrollLeft;document.getElementById("frame_"+id).style.display='none';t.style.display="inline";try{t.focus();}catch(e){};if(this.isIE){t.selectionStart=selStart;t.selectionEnd=selEnd;t.focused=true;set_IE_selection(t);} else{if(this.isOpera&&this.isOpera < 9.6){t.setSelectionRange(0,0);}try{t.setSelectionRange(selStart,selEnd);}catch(e){};}t.scrollTop=scrollTop;t.scrollLeft=scrollLeft;f.editArea.execCommand("toggle_off");}},toggle_on:function(id){var fs=window.frames,f,t,selStart=0,selEnd=0,scrollTop=0,scrollLeft=0,curPos,elem;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];area=f.editArea;area.textarea.value=t.value;curPos=eAs[id]["settings"]["cursor_position"];if(t.use_last==true){selStart=t.last_selectionStart;selEnd=t.last_selectionEnd;scrollTop=t.last_scrollTop;scrollLeft=t.last_scrollLeft;t.use_last=false;} else if(curPos=="auto"){try{selStart=t.selectionStart;selEnd=t.selectionEnd;scrollTop=t.scrollTop;scrollLeft=t.scrollLeft;}catch(ex){}}this.set_editarea_size_from_textarea(id,document.getElementById("frame_"+id));t.style.display="none";document.getElementById("frame_"+id).style.display="inline";area.execCommand("focus");eAs[id]["displayed"]=true;area.execCommand("update_size");f.document.getElementById("result").scrollTop=scrollTop;f.document.getElementById("result").scrollLeft=scrollLeft;area.area_select(selStart,selEnd-selStart);area.execCommand("toggle_on");} else{elem=document.getElementById(id);elem.last_selectionStart=elem.selectionStart;elem.last_selectionEnd=elem.selectionEnd;elem.last_scrollTop=elem.scrollTop;elem.last_scrollLeft=elem.scrollLeft;elem.use_last=true;eAL.start(id);}},set_editarea_size_from_textarea:function(id,frame){var elem,width,height;elem=document.getElementById(id);width=Math.max(eAs[id]["settings"]["min_width"],elem.offsetWidth)+"px";height=Math.max(eAs[id]["settings"]["min_height"],elem.offsetHeight)+"px";if(elem.style.width.indexOf("%")!=-1)width=elem.style.width;if(elem.style.height.indexOf("%")!=-1)height=elem.style.height;frame.style.width=width;frame.style.height=height;},set_base_url:function(){var t=this,elems,i,docBasePath;if(!this.baseURL){elems=document.getElementsByTagName('script');for(i=0;i';html+='';return html;},get_control_html:function(button_name,lang){var t=this,i,but,html,si;for(i=0;i";case "|":case "separator":return '';case "select_font":html="";return html;case "syntax_selection":html="";return html;}return "["+button_name+"]";},get_template:function(){if(this.template==""){var xhr_object=null;if(window.XMLHttpRequest)xhr_object=new XMLHttpRequest(); else if(window.ActiveXObject)xhr_object=new ActiveXObject("Microsoft.XMLHTTP"); else{alert("XMLHTTPRequest not supported. EditArea not loaded");return;}xhr_object.open("GET",this.baseURL+"template.html",false);xhr_object.send(null);if(xhr_object.readyState==4)this.template=xhr_object.responseText; else this.has_error();}},translate:function(text,lang,mode){if(mode=="word")text=eAL.get_word_translation(text,lang); else if(mode="template"){eAL.current_language=lang;text=text.replace(/\{\$([^\}]+)\}/gm,eAL.translate_template);}return text;},translate_template:function(){return eAL.get_word_translation(EAL.prototype.translate_template.arguments[1],eAL.current_language);},get_word_translation:function(val,lang){var i;for(i in eAL.lang[lang]){if(i==val)return eAL.lang[lang][i];}return "_"+val;},load_script:function(url){var t=this,d=document,script,head;if(t.loadedFiles[url])return;try{script=d.createElement("script");script.type="text/javascript";script.src=url;script.charset="UTF-8";d.getElementsByTagName("head")[0].appendChild(script);}catch(e){d.write('');}t.loadedFiles[url]=true;},add_event:function(obj,name,handler){try{if(obj.attachEvent){obj.attachEvent("on"+name,handler);} else{obj.addEventListener(name,handler,false);}}catch(e){}},remove_event:function(obj,name,handler){try{if(obj.detachEvent)obj.detachEvent("on"+name,handler); else obj.removeEventListener(name,handler,false);}catch(e){}},reset:function(e){var formObj,is_child,i,x;formObj=eAL.isIE ? window.event.srcElement:e.target;if(formObj.tagName!='FORM')formObj=formObj.form;for(i in eAs){is_child=false;for(x=0;x old_sel["start"])this.setSelectionRange(id,new_sel["end"],new_sel["end"]); else this.setSelectionRange(id,old_sel["start"]+open_tag.length,old_sel["start"]+open_tag.length);},hide:function(id){var fs=window.frames,d=document,t=this,scrollTop,scrollLeft,span;if(d.getElementById(id)&&!t.hidden[id]){t.hidden[id]={};t.hidden[id]["selectionRange"]=t.getSelectionRange(id);if(d.getElementById(id).style.display!="none"){t.hidden[id]["scrollTop"]=d.getElementById(id).scrollTop;t.hidden[id]["scrollLeft"]=d.getElementById(id).scrollLeft;}if(fs["frame_"+id]){t.hidden[id]["toggle"]=eAs[id]["displayed"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){scrollTop=fs["frame_"+id].document.getElementById("result").scrollTop;scrollLeft=fs["frame_"+id].document.getElementById("result").scrollLeft;} else{scrollTop=d.getElementById(id).scrollTop;scrollLeft=d.getElementById(id).scrollLeft;}t.hidden[id]["scrollTop"]=scrollTop;t.hidden[id]["scrollLeft"]=scrollLeft;if(eAs[id]["displayed"]==true)eAL.toggle_off(id);}span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='none';}d.getElementById(id).style.display="none";}},show:function(id){var fs=window.frames,d=document,t=this,span;if((elem=d.getElementById(id))&&t.hidden[id]){elem.style.display="inline";elem.scrollTop=t.hidden[id]["scrollTop"];elem.scrollLeft=t.hidden[id]["scrollLeft"];span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='inline';}if(fs["frame_"+id]){elem.style.display="inline";if(t.hidden[id]["toggle"]==true)eAL.toggle_on(id);scrollTop=t.hidden[id]["scrollTop"];scrollLeft=t.hidden[id]["scrollLeft"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].document.getElementById("result").scrollTop=scrollTop;fs["frame_"+id].document.getElementById("result").scrollLeft=scrollLeft;} else{elem.scrollTop=scrollTop;elem.scrollLeft=scrollLeft;}}sel=t.hidden[id]["selectionRange"];t.setSelectionRange(id,sel["start"],sel["end"]);delete t.hidden[id];}},getCurrentFile:function(id){return this.execCommand(id,'get_file',this.execCommand(id,'curr_file'));},getFile:function(id,file_id){return this.execCommand(id,'get_file',file_id);},getAllFiles:function(id){return this.execCommand(id,'get_all_files()');},openFile:function(id,file_infos){return this.execCommand(id,'open_file',file_infos);},closeFile:function(id,file_id){return this.execCommand(id,'close_file',file_id);},setFileEditedMode:function(id,file_id,to){var reg1,reg2;reg1=new RegExp('\\\\','g');reg2=new RegExp('"','g');return this.execCommand(id,'set_file_edited_mode("'+file_id.replace(reg1,'\\\\').replace(reg2,'\\"')+'",'+to+')');},execCommand:function(id,cmd,fct_param){switch(cmd){case "EA_init":if(eAs[id]['settings']["EA_init_callback"].length>0)eval(eAs[id]['settings']["EA_init_callback"]+"('"+id+"');");break;case "EA_delete":if(eAs[id]['settings']["EA_delete_callback"].length>0)eval(eAs[id]['settings']["EA_delete_callback"]+"('"+id+"');");break;case "EA_submit":if(eAs[id]['settings']["submit_callback"].length>0)eval(eAs[id]['settings']["submit_callback"]+"('"+id+"');");break;}if(window.frames["frame_"+id]&&window.frames["frame_"+id].editArea){if(fct_param!=undefined)return eval('window.frames["frame_'+id+'"].editArea.'+cmd+'(fct_param);'); else return eval('window.frames["frame_'+id+'"].editArea.'+cmd+';');}return false;}};var eAL=new EAL();var eAs={}; function getAttribute(elm,aName){var aValue,taName,i;try{aValue=elm.getAttribute(aName);}catch(exept){}if(! aValue){for(i=0;i < elm.attributes.length;i++){taName=elm.attributes[i] .name.toLowerCase();if(taName==aName){aValue=elm.attributes[i] .value;return aValue;}}}return aValue;};function setAttribute(elm,attr,val){if(attr=="class"){elm.setAttribute("className",val);elm.setAttribute("class",val);} else{elm.setAttribute(attr,val);}};function getChildren(elem,elem_type,elem_attribute,elem_attribute_match,option,depth){if(!option)var option="single";if(!depth)var depth=-1;if(elem){var children=elem.childNodes;var result=null;var results=[];for(var x=0;x0){results=results.concat(result);}} else if(result!=null){return result;}}}}if(option=="all")return results;}return null;};function isChildOf(elem,parent){if(elem){if(elem==parent)return true;while(elem.parentNode !='undefined'){return isChildOf(elem.parentNode,parent);}}return false;};function getMouseX(e){if(e!=null&&typeof(e.pageX)!="undefined"){return e.pageX;} else{return(e!=null?e.x:event.x)+document.documentElement.scrollLeft;}};function getMouseY(e){if(e!=null&&typeof(e.pageY)!="undefined"){return e.pageY;} else{return(e!=null?e.y:event.y)+document.documentElement.scrollTop;}};function calculeOffsetLeft(r){return calculeOffset(r,"offsetLeft")};function calculeOffsetTop(r){return calculeOffset(r,"offsetTop")};function calculeOffset(element,attr){var offset=0;while(element){offset+=element[attr];element=element.offsetParent}return offset;};function get_css_property(elem,prop){if(document.defaultView){return document.defaultView.getComputedStyle(elem,null).getPropertyValue(prop);} else if(elem.currentStyle){var prop=prop.replace(/-\D/gi,function(sMatch){return sMatch.charAt(sMatch.length-1).toUpperCase();});return elem.currentStyle[prop];} else return null;}var _mCE;function start_move_element(e,id,frame){var elem_id=(e.target||e.srcElement).id;if(id)elem_id=id;if(!frame)frame=window;if(frame.event)e=frame.event;_mCE=frame.document.getElementById(elem_id);_mCE.frame=frame;frame.document.onmousemove=move_element;frame.document.onmouseup=end_move_element;mouse_x=getMouseX(e);mouse_y=getMouseY(e);_mCE.start_pos_x=mouse_x-(_mCE.style.left.replace("px","")||calculeOffsetLeft(_mCE));_mCE.start_pos_y=mouse_y-(_mCE.style.top.replace("px","")||calculeOffsetTop(_mCE));return false;};function end_move_element(e){_mCE.frame.document.onmousemove="";_mCE.frame.document.onmouseup="";_mCE=null;};function move_element(e){var newTop,newLeft,maxLeft;if(_mCE.frame&&_mCE.frame.event)e=_mCE.frame.event;newTop=getMouseY(e)-_mCE.start_pos_y;newLeft=getMouseX(e)-_mCE.start_pos_x;maxLeft=_mCE.frame.document.body.offsetWidth-_mCE.offsetWidth;max_top=_mCE.frame.document.body.offsetHeight-_mCE.offsetHeight;newTop=Math.min(Math.max(0,newTop),max_top);newLeft=Math.min(Math.max(0,newLeft),maxLeft);_mCE.style.top=newTop+"px";_mCE.style.left=newLeft+"px";return false;};var nav=eAL.nav;function getSelectionRange(textarea){return{"start":textarea.selectionStart,"end":textarea.selectionEnd};};function setSelectionRange(t,start,end){t.focus();start=Math.max(0,Math.min(t.value.length,start));end=Math.max(start,Math.min(t.value.length,end));if(this.isOpera&&this.isOpera < 9.6){t.selectionEnd=1;t.selectionStart=0;t.selectionEnd=1;t.selectionStart=0;}t.selectionStart=start;t.selectionEnd=end;if(isIE)set_IE_selection(t);};function get_IE_selection(t){var d=document,div,range,stored_range,elem,scrollTop,relative_top,line_start,line_nb,range_start,range_end,tab;if(t&&t.focused){if(!t.ea_line_height){div=d.createElement("div");div.style.fontFamily=get_css_property(t,"font-family");div.style.fontSize=get_css_property(t,"font-size");div.style.visibility="hidden";div.innerHTML="0";d.body.appendChild(div);t.ea_line_height=div.offsetHeight;d.body.removeChild(div);}range=d.selection.createRange();try{stored_range=range.duplicate();stored_range.moveToElementText(t);stored_range.setEndPoint('EndToEnd',range);if(stored_range.parentElement()==t){elem=t;scrollTop=0;while(elem.parentNode){scrollTop+=elem.scrollTop;elem=elem.parentNode;}relative_top=range.offsetTop-calculeOffsetTop(t)+scrollTop;line_start=Math.round((relative_top / t.ea_line_height)+1);line_nb=Math.round(range.boundingHeight / t.ea_line_height);range_start=stored_range.text.length-range.text.length;tab=t.value.substr(0,range_start).split("\n");range_start+=(line_start-tab.length)*2;t.selectionStart=range_start;range_end=t.selectionStart+range.text.length;tab=t.value.substr(0,range_start+range.text.length).split("\n");range_end+=(line_start+line_nb-1-tab.length)*2;t.selectionEnd=range_end;}}catch(e){}}setTimeout("get_IE_selection(document.getElementById('"+t.id+"'));",50);};function IE_textarea_focus(){event.srcElement.focused=true;}function IE_textarea_blur(){event.srcElement.focused=false;}function set_IE_selection(t){var nbLineStart,nbLineStart,nbLineEnd,range;if(!window.closed){nbLineStart=t.value.substr(0,t.selectionStart).split("\n").length-1;nbLineEnd=t.value.substr(0,t.selectionEnd).split("\n").length-1;try{range=document.selection.createRange();range.moveToElementText(t);range.setEndPoint('EndToStart',range);range.moveStart('character',t.selectionStart-nbLineStart);range.moveEnd('character',t.selectionEnd-nbLineEnd-(t.selectionStart-nbLineStart));range.select();}catch(e){}}};eAL.waiting_loading["elements_functions.js"]="loaded"; EAL.prototype.start_resize_area=function(){var d=document,a,div,width,height,father;d.onmouseup=eAL.end_resize_area;d.onmousemove=eAL.resize_area;eAL.toggle(eAL.resize["id"]);a=eAs[eAL.resize["id"]]["textarea"];div=d.getElementById("edit_area_resize");if(!div){div=d.createElement("div");div.id="edit_area_resize";div.style.border="dashed #888888 1px";}width=a.offsetWidth-2;height=a.offsetHeight-2;div.style.display="block";div.style.width=width+"px";div.style.height=height+"px";father=a.parentNode;father.insertBefore(div,a);a.style.display="none";eAL.resize["start_top"]=calculeOffsetTop(div);eAL.resize["start_left"]=calculeOffsetLeft(div);};EAL.prototype.end_resize_area=function(e){var d=document,div,a,width,height;d.onmouseup="";d.onmousemove="";div=d.getElementById("edit_area_resize");a=eAs[eAL.resize["id"]]["textarea"];width=Math.max(eAs[eAL.resize["id"]]["settings"]["min_width"],div.offsetWidth-4);height=Math.max(eAs[eAL.resize["id"]]["settings"]["min_height"],div.offsetHeight-4);if(eAL.isIE==6){width-=2;height-=2;}a.style.width=width+"px";a.style.height=height+"px";div.style.display="none";a.style.display="inline";a.selectionStart=eAL.resize["selectionStart"];a.selectionEnd=eAL.resize["selectionEnd"];eAL.toggle(eAL.resize["id"]);return false;};EAL.prototype.resize_area=function(e){var allow,newHeight,newWidth;allow=eAs[eAL.resize["id"]]["settings"]["allow_resize"];if(allow=="both"||allow=="y"){newHeight=Math.max(20,getMouseY(e)-eAL.resize["start_top"]);document.getElementById("edit_area_resize").style.height=newHeight+"px";}if(allow=="both"||allow=="x"){newWidth=Math.max(20,getMouseX(e)-eAL.resize["start_left"]);document.getElementById("edit_area_resize").style.width=newWidth+"px";}return false;};eAL.waiting_loading["resize_area.js"]="loaded"; EAL.prototype.get_regexp=function(text_array){res="(\\b)(";for(i=0;i0)res+="|";res+=this.get_escaped_regexp(text_array[i]);}res+=")(\\b)";reg=new RegExp(res);return res;};EAL.prototype.get_escaped_regexp=function(str){return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g,"\\$1");};EAL.prototype.init_syntax_regexp=function(){var lang_style={};for(var lang in this.load_syntax){if(!this.syntax[lang]){this.syntax[lang]={};this.syntax[lang]["keywords_reg_exp"]={};this.keywords_reg_exp_nb=0;if(this.load_syntax[lang]['KEYWORDS']){param="g";if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false)param+="i";for(var i in this.load_syntax[lang]['KEYWORDS']){if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function")continue;this.syntax[lang]["keywords_reg_exp"][i]=new RegExp(this.get_regexp(this.load_syntax[lang]['KEYWORDS'][i]),param);this.keywords_reg_exp_nb++;}}if(this.load_syntax[lang]['OPERATORS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['OPERATORS']){if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);nb++;}if(str.length>0)this.syntax[lang]["operators_reg_exp"]=new RegExp("("+str+")","g");}if(this.load_syntax[lang]['DELIMITERS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['DELIMITERS']){if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);nb++;}if(str.length>0)this.syntax[lang]["delimiters_reg_exp"]=new RegExp("("+str+")","g");}var syntax_trace=[];this.syntax[lang]["quotes"]={};var quote_tab=[];if(this.load_syntax[lang]['QUOTEMARKS']){for(var i in this.load_syntax[lang]['QUOTEMARKS']){if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);this.syntax[lang]["quotes"][x]=x;quote_tab[quote_tab.length]="("+x+"(\\\\.|[^"+x+"])*(?:"+x+"|$))";syntax_trace.push(x);}}this.syntax[lang]["comments"]={};if(this.load_syntax[lang]['COMMENT_SINGLE']){for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))";syntax_trace.push(x);this.syntax[lang]["comments"][x]="\n";}}if(this.load_syntax[lang]['COMMENT_MULTI']){for(var i in this.load_syntax[lang]['COMMENT_MULTI']){if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function")continue;var start=this.get_escaped_regexp(i);var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))";syntax_trace.push(start);syntax_trace.push(end);this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i];}}if(quote_tab.length>0)this.syntax[lang]["comment_or_quote_reg_exp"]=new RegExp("("+quote_tab.join("|")+")","gi");if(syntax_trace.length>0)this.syntax[lang]["syntax_trace_regexp"]=new RegExp("((.|\n)*?)(\\\\*("+syntax_trace.join("|")+"|$))","gmi");if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){this.syntax[lang]["script_delimiters"]={};for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function")continue;this.syntax[lang]["script_delimiters"][i]=this.load_syntax[lang]['SCRIPT_DELIMITERS'];}}this.syntax[lang]["custom_regexp"]={};if(this.load_syntax[lang]['REGEXPS']){for(var i in this.load_syntax[lang]['REGEXPS']){if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function")continue;var val=this.load_syntax[lang]['REGEXPS'][i];if(!this.syntax[lang]["custom_regexp"][val['execute']])this.syntax[lang]["custom_regexp"][val['execute']]={};this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp':new RegExp(val['search'],val['modifiers']),'class':val['class']};}}if(this.load_syntax[lang]['STYLES']){lang_style[lang]={};for(var i in this.load_syntax[lang]['STYLES']){if(typeof(this.load_syntax[lang]['STYLES'][i])=="function")continue;if(typeof(this.load_syntax[lang]['STYLES'][i])!="string"){for(var j in this.load_syntax[lang]['STYLES'][i]){lang_style[lang][j]=this.load_syntax[lang]['STYLES'][i][j];}} else{lang_style[lang][i]=this.load_syntax[lang]['STYLES'][i];}}}var style="";for(var i in lang_style[lang]){if(lang_style[lang][i].length>0){style+="."+lang+" ."+i.toLowerCase()+" span{"+lang_style[lang][i]+"}\n";style+="."+lang+" ."+i.toLowerCase()+"{"+lang_style[lang][i]+"}\n";}}this.syntax[lang]["styles"]=style;}}};eAL.waiting_loading["reg_syntax.js"]="loaded"; var editAreaLoader= eAL;var editAreas=eAs;EditAreaLoader=EAL;editAreaLoader.iframe_script= "".replace(/Á/g,'this').replace(/Â/g,'textarea').replace(/Ã/g,'function').replace(/Ä/g,'prototype').replace(/Å/g,'settings').replace(/Æ/g,'length').replace(/Ç/g,'style').replace(/È/g,'parent').replace(/É/g,'last_selection').replace(/Ê/g,'value').replace(/Ë/g,'true').replace(/Ì/g,'false'); editAreaLoader.all_plugins_loaded=true; editAreaLoader.template= " EditArea [__CSSRULES__] [__JSCODE__]
    [__TOOLBAR__]
     
     
    {$position}: {$line_abbr} 0, {$char_abbr} 0 {$total}: {$line_abbr} 0, {$char_abbr} 0 resize
    {$processing}
    {$search} {$close_popup}
    {$replace} {$move_popup}

    {$find_next} {$replace} {$replace_all}
    {$close_popup}

    Editarea [__EA_VERSION__]


    {$shortcuts}:

    {$tab}: {$add_tab}
    {$shift}+{$tab}: {$remove_tab}
    {$ctrl}+f: {$search_command}
    {$ctrl}+r: {$replace_command}
    {$ctrl}+h: {$highlight}
    {$ctrl}+g: {$go_to_line}
    {$ctrl}+z: {$undo}
    {$ctrl}+y: {$redo}
    {$ctrl}+e: {$help}
    {$ctrl}+q, {$esc}: {$close_popup}
    {$accesskey} E: {$toggle}

    {$about_notice}
    "; editAreaLoader.iframe_css= ""; web2py-1.99.7.orig/applications/admin/static/js/0000755000175000017500000000000011724764235020146 5ustar josejoseweb2py-1.99.7.orig/applications/admin/static/js/calendar.js0000644000175000017500000013031011724764235022253 0ustar josejose/* Copyright Notice for Dynarch Date Time Picker */ /* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo * ----------------------------------------------------------- * * The DHTML Calendar, version 1.0 "It is happening again" * * Details and latest version at: * www.dynarch.com/projects/calendar * * This script is developed by Dynarch.com. Visit us at www.dynarch.com. * * This script is distributed under the GNU Lesser General Public License. * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html */ // Calendar EN language // Author: Mihai Bazon, // Encoding: any // Distributed under the same terms as the calendar itself. /* End Copyright Notice for Dynarch Date Time Picker */ Calendar=function(J,K,H,G){this.activeDiv=null;this.currentDateEl=null;this.getDateStatus=null;this.getDateToolTip=null;this.getDateText=null;this.timeout=null;this.onSelected=H||null;this.onClose=G||null;this.dragging=false;this.hidden=false;this.minYear=1970;this.maxYear=2050;this.dateFormat=Calendar._TT.DEF_DATE_FORMAT;this.ttDateFormat=Calendar._TT.TT_DATE_FORMAT;this.isPopup=true;this.weekNumbers=true;this.firstDayOfWeek=typeof J=="number"?J:Calendar._FD;this.showsOtherMonths=false;this.dateStr=K;this.ar_days=null;this.showsTime=false;this.time24=true;this.yearStep=2;this.hiliteToday=true;this.multiple=null;this.table=null;this.element=null;this.tbody=null;this.firstdayname=null;this.monthsCombo=null;this.yearsCombo=null;this.hilitedMonth=null;this.activeMonth=null;this.hilitedYear=null;this.activeYear=null;this.dateClicked=false;if(typeof Calendar._SDN=="undefined"){if(typeof Calendar._SDN_len=="undefined"){Calendar._SDN_len=3}var L=new Array();for(var I=8;I>0;){L[--I]=Calendar._DN[I].substr(0,Calendar._SDN_len)}Calendar._SDN=L;if(typeof Calendar._SMN_len=="undefined"){Calendar._SMN_len=3}L=new Array();for(var I=12;I>0;){L[--I]=Calendar._MN[I].substr(0,Calendar._SMN_len)}Calendar._SMN=L}};Calendar._C=null;Calendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));Calendar.is_ie5=(Calendar.is_ie&&/msie 5\.0/i.test(navigator.userAgent));Calendar.is_opera=/opera/i.test(navigator.userAgent);Calendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);Calendar.getAbsolutePos=function(I){var G=0,J=0;var K=/^div$/i.test(I.tagName);if(K&&I.scrollLeft){G=I.scrollLeft}if(K&&I.scrollTop){J=I.scrollTop}var H={x:I.offsetLeft-G,y:I.offsetTop-J};if(I.offsetParent){var L=this.getAbsolutePos(I.offsetParent);H.x+=L.x;H.y+=L.y}return H};Calendar.isRelated=function(G,E){var F=E.relatedTarget;if(!F){var H=E.type;if(H=="mouseover"){F=E.fromElement}else{if(H=="mouseout"){F=E.toElement}}}while(F){if(F==G){return true}F=F.parentNode}return false};Calendar.removeClass=function(G,H){if(!(G&&G.className)){return }var F=G.className.split(" ");var J=new Array();for(var I=F.length;I>0;){if(F[--I]!=H){J[J.length]=F[I]}}G.className=J.join(" ")};Calendar.addClass=function(D,C){Calendar.removeClass(D,C);D.className+=" "+C};Calendar.getElement=function(C){var D=Calendar.is_ie?window.event.srcElement:C.currentTarget;while(D.nodeType!=1||/^div$/i.test(D.tagName)){D=D.parentNode}return D};Calendar.getTargetElement=function(C){var D=Calendar.is_ie?window.event.srcElement:C.target;while(D.nodeType!=1){D=D.parentNode}return D};Calendar.stopEvent=function(B){B||(B=window.event);if(Calendar.is_ie){B.cancelBubble=true;B.returnValue=false}else{B.preventDefault();B.stopPropagation()}return false};Calendar.addEvent=function(D,E,F){if(D.attachEvent){D.attachEvent("on"+E,F)}else{if(D.addEventListener){D.addEventListener(E,F,true)}else{D["on"+E]=F}}};Calendar.removeEvent=function(D,E,F){if(D.detachEvent){D.detachEvent("on"+E,F)}else{if(D.removeEventListener){D.removeEventListener(E,F,true)}else{D["on"+E]=null}}};Calendar.createElement=function(E,F){var D=null;if(document.createElementNS){D=document.createElementNS("http://www.w3.org/1999/xhtml",E)}else{D=document.createElement(E)}if(typeof F!="undefined"){F.appendChild(D)}return D};Calendar._add_evs=function(el){with(Calendar){addEvent(el,"mouseover",dayMouseOver);addEvent(el,"mousedown",dayMouseDown);addEvent(el,"mouseout",dayMouseOut);if(is_ie){addEvent(el,"dblclick",dayMouseDblClick);el.setAttribute("unselectable",true)}}};Calendar.findMonth=function(B){if(typeof B.month!="undefined"){return B}else{if(typeof B.parentNode.month!="undefined"){return B.parentNode}}return null};Calendar.findYear=function(B){if(typeof B.year!="undefined"){return B}else{if(typeof B.parentNode.year!="undefined"){return B.parentNode}}return null};Calendar.showMonthsCombo=function(){var I=Calendar._C;if(!I){return false}var I=I;var H=I.activeDiv;var J=I.monthsCombo;if(I.hilitedMonth){Calendar.removeClass(I.hilitedMonth,"hilite")}if(I.activeMonth){Calendar.removeClass(I.activeMonth,"active")}var K=I.monthsCombo.getElementsByTagName("div")[I.date.getMonth()];Calendar.addClass(K,"active");I.activeMonth=K;var L=J.style;L.display="block";if(H.navtype<0){L.left=H.offsetLeft+"px"}else{var G=J.offsetWidth;if(typeof G=="undefined"){G=50}L.left=(H.offsetLeft+H.offsetWidth-G)+"px"}L.top=(H.offsetTop+H.offsetHeight)+"px"};Calendar.showYearsCombo=function(K){var N=Calendar._C;if(!N){return false}var N=N;var L=N.activeDiv;var S=N.yearsCombo;if(N.hilitedYear){Calendar.removeClass(N.hilitedYear,"hilite")}if(N.activeYear){Calendar.removeClass(N.activeYear,"active")}N.activeYear=null;var M=N.date.getFullYear()+(K?1:-1);var P=S.firstChild;var Q=false;for(var T=12;T>0;--T){if(M>=N.minYear&&M<=N.maxYear){P.innerHTML=M;P.year=M;P.style.display="block";Q=true}else{P.style.display="none"}P=P.nextSibling;M+=K?N.yearStep:-N.yearStep}if(Q){var O=S.style;O.display="block";if(L.navtype<0){O.left=L.offsetLeft+"px"}else{var R=S.offsetWidth;if(typeof R=="undefined"){R=50}O.left=(L.offsetLeft+L.offsetWidth-R)+"px"}O.top=(L.offsetTop+L.offsetHeight)+"px"}};Calendar.tableMouseUp=function(ev){var cal=Calendar._C;if(!cal){return false}if(cal.timeout){clearTimeout(cal.timeout)}var el=cal.activeDiv;if(!el){return false}var target=Calendar.getTargetElement(ev);ev||(ev=window.event);Calendar.removeClass(el,"active");if(target==el||target.parentNode==el){Calendar.cellClick(el,ev)}var mon=Calendar.findMonth(target);var date=null;if(mon){date=new Date(cal.date);if(mon.month!=date.getMonth()){date.setMonth(mon.month);cal.setDate(date);cal.dateClicked=false;cal.callHandler()}}else{var year=Calendar.findYear(target);if(year){date=new Date(cal.date);if(year.year!=date.getFullYear()){date.setFullYear(year.year);cal.setDate(date);cal.dateClicked=false;cal.callHandler()}}}with(Calendar){removeEvent(document,"mouseup",tableMouseUp);removeEvent(document,"mouseover",tableMouseOver);removeEvent(document,"mousemove",tableMouseOver);cal._hideCombos();_C=null;return stopEvent(ev)}};Calendar.tableMouseOver=function(X){var T=Calendar._C;if(!T){return }var R=T.activeDiv;var b=Calendar.getTargetElement(X);if(b==R||b.parentNode==R){Calendar.addClass(R,"hilite active");Calendar.addClass(R.parentNode,"rowhilite")}else{if(typeof R.navtype=="undefined"||(R.navtype!=50&&(R.navtype==0||Math.abs(R.navtype)>2))){Calendar.removeClass(R,"active")}Calendar.removeClass(R,"hilite");Calendar.removeClass(R.parentNode,"rowhilite")}X||(X=window.event);if(R.navtype==50&&b!=R){var Y=Calendar.getAbsolutePos(R);var V=R.offsetWidth;var W=X.clientX;var U;var Z=true;if(W>Y.x+V){U=W-Y.x-V;Z=false}else{U=Y.x-W}if(U<0){U=0}var e=R._range;var c=R._current;var d=Math.floor(U/10)%e.length;for(var f=e.length;--f>=0;){if(e[f]==c){break}}while(d-->0){if(Z){if(--f<0){f=e.length-1}}else{if(++f>=e.length){f=0}}}var S=e[f];R.innerHTML=S;T.onUpdateTime()}var Q=Calendar.findMonth(b);if(Q){if(Q.month!=T.date.getMonth()){if(T.hilitedMonth){Calendar.removeClass(T.hilitedMonth,"hilite")}Calendar.addClass(Q,"hilite");T.hilitedMonth=Q}else{if(T.hilitedMonth){Calendar.removeClass(T.hilitedMonth,"hilite")}}}else{if(T.hilitedMonth){Calendar.removeClass(T.hilitedMonth,"hilite")}var a=Calendar.findYear(b);if(a){if(a.year!=T.date.getFullYear()){if(T.hilitedYear){Calendar.removeClass(T.hilitedYear,"hilite")}Calendar.addClass(a,"hilite");T.hilitedYear=a}else{if(T.hilitedYear){Calendar.removeClass(T.hilitedYear,"hilite")}}}else{if(T.hilitedYear){Calendar.removeClass(T.hilitedYear,"hilite")}}}return Calendar.stopEvent(X)};Calendar.tableMouseDown=function(B){if(Calendar.getTargetElement(B)==Calendar.getElement(B)){return Calendar.stopEvent(B)}};Calendar.calDragIt=function(J){var I=Calendar._C;if(!(I&&I.dragging)){return false}var G;var H;if(Calendar.is_ie){H=window.event.clientY+document.body.scrollTop;G=window.event.clientX+document.body.scrollLeft}else{G=J.pageX;H=J.pageY}I.hideShowCovered();var F=I.element.style;F.left=(G-I.xOffs)+"px";F.top=(H-I.yOffs)+"px";return Calendar.stopEvent(J)};Calendar.calDragEnd=function(ev){var cal=Calendar._C;if(!cal){return false}cal.dragging=false;with(Calendar){removeEvent(document,"mousemove",calDragIt);removeEvent(document,"mouseup",calDragEnd);tableMouseUp(ev)}cal.hideShowCovered()};Calendar.dayMouseDown=function(ev){var el=Calendar.getElement(ev);if(el.disabled){return false}var cal=el.calendar;cal.activeDiv=el;Calendar._C=cal;if(el.navtype!=300){with(Calendar){if(el.navtype==50){el._current=el.innerHTML;addEvent(document,"mousemove",tableMouseOver)}else{addEvent(document,Calendar.is_ie5?"mousemove":"mouseover",tableMouseOver)}addClass(el,"hilite active");addEvent(document,"mouseup",tableMouseUp)}}else{if(cal.isPopup){cal._dragStart(ev)}}if(el.navtype==-1||el.navtype==1){if(cal.timeout){clearTimeout(cal.timeout)}cal.timeout=setTimeout("Calendar.showMonthsCombo()",250)}else{if(el.navtype==-2||el.navtype==2){if(cal.timeout){clearTimeout(cal.timeout)}cal.timeout=setTimeout((el.navtype>0)?"Calendar.showYearsCombo(true)":"Calendar.showYearsCombo(false)",250)}else{cal.timeout=null}}return Calendar.stopEvent(ev)};Calendar.dayMouseDblClick=function(B){Calendar.cellClick(Calendar.getElement(B),B||window.event);if(Calendar.is_ie){document.selection.empty()}};Calendar.dayMouseOver=function(D){var C=Calendar.getElement(D);if(Calendar.isRelated(C,D)||Calendar._C||C.disabled){return false}if(C.ttip){if(C.ttip.substr(0,1)=="_"){C.ttip=C.caldate.print(C.calendar.ttDateFormat)+C.ttip.substr(1)}C.calendar.tooltips.innerHTML=C.ttip}if(C.navtype!=300){Calendar.addClass(C,"hilite");if(C.caldate){Calendar.addClass(C.parentNode,"rowhilite")}}return Calendar.stopEvent(D)};Calendar.dayMouseOut=function(ev){with(Calendar){var el=getElement(ev);if(isRelated(el,ev)||_C||el.disabled){return false}removeClass(el,"hilite");if(el.caldate){removeClass(el.parentNode,"rowhilite")}if(el.calendar){el.calendar.tooltips.innerHTML=_TT.SEL_DATE}return stopEvent(ev)}};Calendar.cellClick=function(d,U){var Q=d.calendar;var a=false;var X=false;var c=null;if(typeof d.navtype=="undefined"){if(Q.currentDateEl){Calendar.removeClass(Q.currentDateEl,"selected");Calendar.addClass(d,"selected");a=(Q.currentDateEl==d);if(!a){Q.currentDateEl=d}}Q.date.setDateOnly(d.caldate);c=Q.date;var R=!(Q.dateClicked=!d.otherMonth);if(!R&&!Q.currentDateEl){Q._toggleMultipleDate(new Date(c))}else{X=!d.disabled}if(R){Q._init(Q.firstDayOfWeek,c)}}else{if(d.navtype==200){Calendar.removeClass(d,"hilite");Q.callCloseHandler();return }c=new Date(Q.date);if(d.navtype==0){c.setDateOnly(new Date())}Q.dateClicked=false;var V=c.getFullYear();var b=c.getMonth();function S(B){var A=c.getDate();var C=c.getMonthDays(B);if(A>C){c.setDate(C)}c.setMonth(B)}switch(d.navtype){case 400:Calendar.removeClass(d,"hilite");var T=Calendar._TT.ABOUT;if(typeof T!="undefined"){T+=Q.showsTime?Calendar._TT.ABOUT_TIME:""}else{T='Help and about box text is not translated into this language.\nIf you know this language and you feel generous please update\nthe corresponding file in "lang" subdir to match calendar-en.js\nand send it back to to get it into the distribution ;-)\n\nThank you!\nhttp://dynarch.com/mishoo/calendar.epl\n'}alert(T);return ;case -2:if(V>Q.minYear){c.setFullYear(V-1)}break;case -1:if(b>0){S(b-1)}else{if(V-->Q.minYear){c.setFullYear(V);S(11)}}break;case 1:if(b<11){S(b+1)}else{if(V=0;){if(Y[Z]==W){break}}if(U&&U.shiftKey){if(--Z<0){Z=Y.length-1}}else{if(++Z>=Y.length){Z=0}}var P=Y[Z];d.innerHTML=P;Q.onUpdateTime();return ;case 0:if((typeof Q.getDateStatus=="function")&&Q.getDateStatus(c,c.getFullYear(),c.getMonth(),c.getDate())){return false}break}if(!c.equalsTo(Q.date)){Q.setDate(c);X=true}else{if(d.navtype==0){X=a=true}}}if(X){U&&Q.callHandler()}if(a){Calendar.removeClass(d,"hilite");U&&Q.callCloseHandler()}};Calendar.prototype.create=function(Y){var Z=null;if(!Y){Z=document.getElementsByTagName("body")[0];this.isPopup=true}else{Z=Y;this.isPopup=false}this.date=this.dateStr?new Date(this.dateStr):new Date();var V=Calendar.createElement("table");this.table=V;V.cellSpacing=0;V.cellPadding=0;V.calendar=this;Calendar.addEvent(V,"mousedown",Calendar.tableMouseDown);var T=Calendar.createElement("div");this.element=T;T.className="calendar";if(this.isPopup){T.style.position="absolute";T.style.display="none"}T.appendChild(V);var b=Calendar.createElement("thead",V);var X=null;var U=null;var S=this;var f=function(A,B,C){X=Calendar.createElement("td",U);X.colSpan=B;X.className="button";if(C!=0&&Math.abs(C)<=2){X.className+=" nav"}Calendar._add_evs(X);X.calendar=S;X.navtype=C;X.innerHTML="
    "+A+"
    ";return X};U=Calendar.createElement("tr",b);var R=6;(this.isPopup)&&--R;(this.weekNumbers)&&++R;f("?",1,400).ttip=Calendar._TT.INFO;this.title=f("",R,300);this.title.className="title";if(this.isPopup){this.title.ttip=Calendar._TT.DRAG_TO_MOVE;this.title.style.cursor="move";f("×",1,200).ttip=Calendar._TT.CLOSE}U=Calendar.createElement("tr",b);U.className="headrow";this._nav_py=f("«",1,-2);this._nav_py.ttip=Calendar._TT.PREV_YEAR;this._nav_pm=f("‹",1,-1);this._nav_pm.ttip=Calendar._TT.PREV_MONTH;this._nav_now=f(Calendar._TT.TODAY,this.weekNumbers?4:3,0);this._nav_now.ttip=Calendar._TT.GO_TODAY;this._nav_nm=f("›",1,1);this._nav_nm.ttip=Calendar._TT.NEXT_MONTH;this._nav_ny=f("»",1,2);this._nav_ny.ttip=Calendar._TT.NEXT_YEAR;U=Calendar.createElement("tr",b);U.className="daynames";if(this.weekNumbers){X=Calendar.createElement("td",U);X.className="name wn";X.innerHTML=Calendar._TT.WK}for(var c=7;c>0;--c){X=Calendar.createElement("td",U);if(!c){X.navtype=100;X.calendar=this;Calendar._add_evs(X)}}this.firstdayname=(this.weekNumbers)?U.firstChild.nextSibling:U.firstChild;this._displayWeekdays();var d=Calendar.createElement("tbody",V);this.tbody=d;for(c=6;c>0;--c){U=Calendar.createElement("tr",d);if(this.weekNumbers){X=Calendar.createElement("td",U)}for(var e=7;e>0;--e){X=Calendar.createElement("td",U);X.calendar=this;Calendar._add_evs(X)}}if(this.showsTime){U=Calendar.createElement("tr",d);U.className="time";X=Calendar.createElement("td",U);X.className="time";X.colSpan=2;X.innerHTML=Calendar._TT.TIME||" ";X=Calendar.createElement("td",U);X.className="time";X.colSpan=this.weekNumbers?4:3;(function(){function F(P,N,O,L){var K=Calendar.createElement("span",X);K.className=P;K.innerHTML=N;K.calendar=S;K.ttip=Calendar._TT.TIME_PART;K.navtype=50;K._range=[];if(typeof O!="number"){K._range=O}else{for(var J=O;J<=L;++J){var M;if(J<10&&L>=10){M="0"+J}else{M=""+J}K._range[K._range.length]=M}}Calendar._add_evs(K);return K}var B=S.date.getHours();var I=S.date.getMinutes();var A=!S.time24;var H=(B>12);if(A&&H){B-=12}var D=F("hour",B,A?1:0,A?12:23);var E=Calendar.createElement("span",X);E.innerHTML=":";E.className="colon";var G=F("minute",I,0,59);var C=null;X=Calendar.createElement("td",U);X.className="time";X.colSpan=2;if(A){C=F("ampm",H?"pm":"am",["am","pm"])}else{X.innerHTML=" "}S.onSetTime=function(){var K,L=this.date.getHours(),J=this.date.getMinutes();if(A){K=(L>=12);if(K){L-=12}if(L==0){L=12}C.innerHTML=K?"pm":"am"}D.innerHTML=(L<10)?("0"+L):L;G.innerHTML=(J<10)?("0"+J):J};S.onUpdateTime=function(){var K=this.date;var J=parseInt(D.innerHTML,10);if(A){if(/pm/i.test(C.innerHTML)&&J<12){J+=12}else{if(/am/i.test(C.innerHTML)&&J==12){J=0}}}var N=K.getDate();var M=K.getMonth();var L=K.getFullYear();K.setHours(J);K.setMinutes(parseInt(G.innerHTML,10));K.setFullYear(L);K.setMonth(M);K.setDate(N);this.dateClicked=false;this.callHandler()}})()}else{this.onSetTime=this.onUpdateTime=function(){}}var a=Calendar.createElement("tfoot",V);U=Calendar.createElement("tr",a);U.className="footrow";X=f(Calendar._TT.SEL_DATE,this.weekNumbers?8:7,300);X.className="ttip";if(this.isPopup){X.ttip=Calendar._TT.DRAG_TO_MOVE;X.style.cursor="move"}this.tooltips=X;T=Calendar.createElement("div",this.element);this.monthsCombo=T;T.className="combo";for(c=0;c0;--c){var W=Calendar.createElement("div");W.className=Calendar.is_ie?"label-IEfix":"label";T.appendChild(W)}this._init(this.firstDayOfWeek,this.date);Z.appendChild(this.element)};Calendar._keyEvent=function(T){var Q=window._dynarch_popupCalendar;if(!Q||Q.multiple){return false}(Calendar.is_ie)&&(T=window.event);var V=(Calendar.is_ie||T.type=="keypress"),S=T.keyCode;if(T.ctrlKey){switch(S){case 37:V&&Calendar.cellClick(Q._nav_pm);break;case 38:V&&Calendar.cellClick(Q._nav_py);break;case 39:V&&Calendar.cellClick(Q._nav_nm);break;case 40:V&&Calendar.cellClick(Q._nav_ny);break;default:return false}}else{switch(S){case 32:Calendar.cellClick(Q._nav_now);break;case 27:V&&Q.callCloseHandler();break;case 37:case 38:case 39:case 40:if(V){var Z,R,U,X,O,K;Z=S==37||S==38;K=(S==37||S==39)?1:7;function P(){O=Q.currentDateEl;var A=O.pos;R=A&15;U=A>>4;X=Q.ar_days[U][R]}P();function Y(){var A=new Date(Q.date);A.setDate(A.getDate()-K);Q.setDate(A)}function W(){var A=new Date(Q.date);A.setDate(A.getDate()+K);Q.setDate(A)}while(1){switch(S){case 37:if(--R>=0){X=Q.ar_days[U][R]}else{R=6;S=38;continue}break;case 38:if(--U>=0){X=Q.ar_days[U][R]}else{Y();P()}break;case 39:if(++R<7){X=Q.ar_days[U][R]}else{R=0;S=40;continue}break;case 40:if(++Uthis.maxYear){v=this.maxYear;e.setFullYear(v)}}this.firstDayOfWeek=q;this.date=new Date(e);var d=e.getMonth();var a=e.getDate();var b=e.getMonthDays();e.setDate(1);var k=(e.getDay()-this.firstDayOfWeek)%7;if(k<0){k+=7}e.setDate(0-k);e.setDate(e.getDate()+1);var y=this.tbody.firstChild;var s=Calendar._SMN[d];var o=this.ar_days=new Array();var p=Calendar._TT.WEEKEND;var z=this.multiple?(this.datesCells={}):null;for(var i=0;i<6;++i,y=y.nextSibling){var AC=y.firstChild;if(this.weekNumbers){AC.className="day wn";AC.innerHTML=e.getWeekNumber();AC=AC.nextSibling}y.className="daysrow";var g=false,x,AA=o[i]=[];for(var j=0;j<7;++j,AC=AC.nextSibling,e.setDate(x+1)){x=e.getDate();var w=e.getDay();AC.className="day";AC.pos=i<<4|j;AA[j]=AC;var r=(e.getMonth()==d);if(!r){if(this.showsOtherMonths){AC.className+=" othermonth";AC.otherMonth=true}else{AC.className="emptycell";AC.innerHTML=" ";AC.disabled=true;continue}}else{AC.otherMonth=false;g=true}AC.disabled=false;AC.innerHTML=this.getDateText?this.getDateText(e,x):x;if(z){z[e.print("%Y%m%d")]=AC}if(this.getDateStatus){var n=this.getDateStatus(e,v,d,x);if(this.getDateToolTip){var u=this.getDateToolTip(e,v,d,x);if(u){AC.title=u}}if(n===true){AC.className+=" disabled";AC.disabled=true}else{if(/disabled/i.test(n)){AC.disabled=true}AC.className+=" "+n}}if(!AC.disabled){AC.caldate=new Date(e);AC.ttip="_";if(!this.multiple&&r&&x==a&&this.hiliteToday){AC.className+=" selected";this.currentDateEl=AC}if(e.getFullYear()==l&&e.getMonth()==c&&x==AB){AC.className+=" today";AC.ttip+=Calendar._TT.PART_TODAY}if(p.indexOf(w.toString())!=-1){AC.className+=AC.otherMonth?" oweekend":" weekend"}}}if(!(g||this.showsOtherMonths)){y.className="emptyrow"}}this.title.innerHTML=Calendar._MN[d]+", "+v;this.onSetTime();this.table.style.visibility="visible";this._initMultipleDates()};Calendar.prototype._initMultipleDates=function(){if(this.multiple){for(var F in this.multiple){var D=this.datesCells[F];var E=this.multiple[F];if(!E){continue}if(D){D.className+=" selected"}}}};Calendar.prototype._toggleMultipleDate=function(H){if(this.multiple){var G=H.print("%Y%m%d");var E=this.datesCells[G];if(E){var F=this.multiple[G];if(!F){Calendar.addClass(E,"selected");this.multiple[G]=H}else{Calendar.removeClass(E,"selected");delete this.multiple[G]}}}};Calendar.prototype.setDateToolTipHandler=function(B){this.getDateToolTip=B};Calendar.prototype.setDate=function(B){if(!B.equalsTo(this.date)){this._init(this.firstDayOfWeek,B)}};Calendar.prototype.refresh=function(){this._init(this.firstDayOfWeek,this.date)};Calendar.prototype.setFirstDayOfWeek=function(B){this._init(B,this.date);this._displayWeekdays()};Calendar.prototype.setDateStatusHandler=Calendar.prototype.setDisabledHandler=function(B){this.getDateStatus=B};Calendar.prototype.setRange=function(C,D){this.minYear=C;this.maxYear=D};Calendar.prototype.callHandler=function(){if(this.onSelected){this.onSelected(this,this.date.print(this.dateFormat))}};Calendar.prototype.callCloseHandler=function(){if(this.onClose){this.onClose(this)}this.hideShowCovered()};Calendar.prototype.destroy=function(){var B=this.element.parentNode;B.removeChild(this.element);Calendar._C=null;window._dynarch_popupCalendar=null};Calendar.prototype.reparent=function(D){var C=this.element;C.parentNode.removeChild(C);D.appendChild(C)};Calendar._checkCalendar=function(F){var E=window._dynarch_popupCalendar;if(!E){return false}var D=Calendar.is_ie?Calendar.getElement(F):Calendar.getTargetElement(F);for(;D!=null&&D!=E.element;D=D.parentNode){}if(D==null){window._dynarch_popupCalendar.callCloseHandler();return Calendar.stopEvent(F)}};Calendar.prototype.show=function(){var I=this.table.getElementsByTagName("tr");for(var J=I.length;J>0;){var H=I[--J];Calendar.removeClass(H,"rowhilite");var K=H.getElementsByTagName("td");for(var L=K.length;L>0;){var G=K[--L];Calendar.removeClass(G,"hilite");Calendar.removeClass(G,"active")}}this.element.style.display="block";this.hidden=false;if(this.isPopup){window._dynarch_popupCalendar=this;Calendar.addEvent(document,"keydown",Calendar._keyEvent);Calendar.addEvent(document,"keypress",Calendar._keyEvent);Calendar.addEvent(document,"mousedown",Calendar._checkCalendar)}this.hideShowCovered()};Calendar.prototype.hide=function(){if(this.isPopup){Calendar.removeEvent(document,"keydown",Calendar._keyEvent);Calendar.removeEvent(document,"keypress",Calendar._keyEvent);Calendar.removeEvent(document,"mousedown",Calendar._checkCalendar)}this.element.style.display="none";this.hidden=true;this.hideShowCovered()};Calendar.prototype.showAt=function(D,E){var F=this.element.style;F.left=D+"px";F.top=E+"px";this.show()};Calendar.prototype.showAtElement=function(I,H){var F=this;var G=Calendar.getAbsolutePos(I);if(!H||typeof H!="string"){this.showAt(G.x,G.y+I.offsetHeight);return true}function J(B){if(B.x<0){B.x=0}if(B.y<0){B.y=0}var A=document.createElement("div");var C=A.style;C.position="absolute";C.right=C.bottom=C.width=C.height="0px";document.body.appendChild(A);var D=Calendar.getAbsolutePos(A);document.body.removeChild(A);if(Calendar.is_ie){D.y+=document.body.scrollTop;D.x+=document.body.scrollLeft}else{D.y+=window.scrollY;D.x+=window.scrollX}var E=B.x+B.width-D.x;if(E>0){B.x-=E}E=B.y+B.height-D.y;if(E>0){B.y-=E}}this.element.style.display="block";Calendar.continuation_for_the_fucking_khtml_browser=function(){var D=F.element.offsetWidth;var B=F.element.offsetHeight;F.element.style.display="none";var C=H.substr(0,1);var A="l";if(H.length>1){A=H.substr(1,1)}switch(C){case"T":G.y-=B;break;case"B":G.y+=I.offsetHeight;break;case"C":G.y+=(I.offsetHeight-B)/2;break;case"t":G.y+=I.offsetHeight-B;break;case"b":break}switch(A){case"L":G.x-=D;break;case"R":G.x+=I.offsetWidth;break;case"C":G.x+=(I.offsetWidth-D)/2;break;case"l":G.x+=I.offsetWidth-D;break;case"r":break}G.width=D;G.height=B+40;F.monthsCombo.style.display="none";J(G);F.showAt(G.x,G.y)};if(Calendar.is_khtml){setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",10)}else{Calendar.continuation_for_the_fucking_khtml_browser()}};Calendar.prototype.setDateFormat=function(B){this.dateFormat=B};Calendar.prototype.setTtDateFormat=function(B){this.ttDateFormat=B};Calendar.prototype.parseDate=function(D,C){if(!C){C=this.dateFormat}this.setDate(Date.parseDate(D,C))};Calendar.prototype.hideShowCovered=function(){if(!Calendar.is_ie&&!Calendar.is_opera){return }function S(A){var B=A.style.visibility;if(!B){if(document.defaultView&&typeof (document.defaultView.getComputedStyle)=="function"){if(!Calendar.is_khtml){B=document.defaultView.getComputedStyle(A,"").getPropertyValue("visibility")}else{B=""}}else{if(A.currentStyle){B=A.currentStyle.visibility}else{B=""}}}return B}var U=new Array("applet","iframe","select");var R=this.element;var T=Calendar.getAbsolutePos(R);var e=T.x;var Q=R.offsetWidth+e;var V=T.y;var W=R.offsetHeight+V;for(var c=U.length;c>0;){var d=document.getElementsByTagName(U[--c]);var f=null;for(var a=d.length;a>0;){f=d[--a];T=Calendar.getAbsolutePos(f);var X=T.x;var Y=f.offsetWidth+X;var Z=T.y;var b=f.offsetHeight+Z;if(this.hidden||(X>Q)||(YW)||(b29)?1900:2000);break;case"%b":case"%B":for(N=0;N<12;++N){if(Calendar._MN[N].substr(0,T[Z].length).toLowerCase()==T[Z].toLowerCase()){P=N;break}}break;case"%H":case"%I":case"%k":case"%l":S=parseInt(T[Z],10);break;case"%P":case"%p":if(/pm/i.test(T[Z])&&S<12){S+=12}else{if(/am/i.test(T[Z])&&S>=12){S-=12}}break;case"%M":O=parseInt(T[Z],10);break}}if(isNaN(V)){V=W.getFullYear()}if(isNaN(P)){P=W.getMonth()}if(isNaN(Y)){Y=W.getDate()}if(isNaN(S)){S=W.getHours()}if(isNaN(O)){O=W.getMinutes()}if(V!=0&&P!=-1&&Y!=0){return new Date(V,P,Y,S,O,0)}V=0;P=-1;Y=0;for(Z=0;Z31&&V==0){V=parseInt(T[Z],10);(V<100)&&(V+=(V>29)?1900:2000)}else{if(Y==0){Y=T[Z]}}}}}if(V==0){V=W.getFullYear()}if(P!=-1&&Y!=0){return new Date(V,P,Y,S,O,0)}return W};Date.prototype.getMonthDays=function(D){var C=this.getFullYear();if(typeof D=="undefined"){D=this.getMonth()}if(((0==(C%4))&&((0!=(C%100))||(0==(C%400))))&&D==1){return 29}else{return Date._MD[D]}};Date.prototype.getDayOfYear=function(){var D=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var E=new Date(this.getFullYear(),0,0,0,0,0);var F=D-E;return Math.floor(F/Date.DAY)};Date.prototype.getWeekNumber=function(){var E=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var F=E.getDay();E.setDate(E.getDate()-(F+6)%7+3);var D=E.valueOf();E.setMonth(0);E.setDate(4);return Math.round((D-E.valueOf())/(7*86400000))+1};Date.prototype.equalsTo=function(B){return((this.getFullYear()==B.getFullYear())&&(this.getMonth()==B.getMonth())&&(this.getDate()==B.getDate())&&(this.getHours()==B.getHours())&&(this.getMinutes()==B.getMinutes()))};Date.prototype.setDateOnly=function(C){var D=new Date(C);this.setDate(1);this.setFullYear(D.getFullYear());this.setMonth(D.getMonth());this.setDate(D.getDate())};Date.prototype.print=function(d){var U=this.getMonth();var e=this.getDate();var c=this.getFullYear();var a=this.getWeekNumber();var Z=this.getDay();var V={};var Y=this.getHours();var T=(Y>=12);var g=(T)?(Y-12):Y;var W=this.getDayOfYear();if(g==0){g=12}var S=this.getMinutes();var f=this.getSeconds();V["%a"]=Calendar._SDN[Z];V["%A"]=Calendar._DN[Z];V["%b"]=Calendar._SMN[U];V["%B"]=Calendar._MN[U];V["%C"]=1+Math.floor(c/100);V["%d"]=(e<10)?("0"+e):e;V["%e"]=e;V["%H"]=(Y<10)?("0"+Y):Y;V["%I"]=(g<10)?("0"+g):g;V["%j"]=(W<100)?((W<10)?("00"+W):("0"+W)):W;V["%k"]=Y;V["%l"]=g;V["%m"]=(U<9)?("0"+(1+U)):(1+U);V["%M"]=(S<10)?("0"+S):S;V["%n"]="\n";V["%p"]=T?"PM":"AM";V["%P"]=T?"pm":"am";V["%s"]=Math.floor(this.getTime()/1000);V["%S"]=(f<10)?("0"+f):f;V["%t"]="\t";V["%U"]=V["%W"]=V["%V"]=(a<10)?("0"+a):a;V["%u"]=Z+1;V["%w"]=Z;V["%y"]=(""+c).substr(2,2);V["%Y"]=c;V["%%"]="%";var X=/%./g;if(!Calendar.is_ie5&&!Calendar.is_khtml){return d.replace(X,function(A){return V[A]||A})}var b=d.match(X);for(var i=0;i=0;){var G=I.multiple[D];var B=G.print("%Y%m%d");A.multiple[B]=G}}A.showsOtherMonths=I.showOthers;A.yearStep=I.step;A.setRange(I.range[0],I.range[1]);A.params=I;A.setDateStatusHandler(I.dateStatusFunc);A.getDateText=I.dateText;A.setDateFormat(C);if(F){A.create()}A.refresh();if(!I.position){A.showAtElement(I.button||I.displayArea||I.inputField,I.align)}else{A.showAt(I.position[0],I.position[1])}return false};return K}; /* http://keith-wood.name/timeEntry.html Time entry for jQuery v1.4.8. Written by Keith Wood (kbwood{at}iinet.com.au) June 2007. Minor changes by Massimo Di Pierro Nov 2010 (simplified and changed behavior) Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. Please attribute the author if you use it. Turn an input field into an entry point for a time value. The time can be entered via directly typing the value, via the arrow keys. It is configurable to show 12 or 24-hour time, to show or hide seconds, to enforce a minimum and/or maximum time, to change the spinner image. Example: jQuery('input.time').timeEntry(); */ (function(a){var d=12,k="ampmNames",i="show24Hours",m="showSeconds",l="character",b=10,f=false,j="string",e=-1,c=null,h=true,g="timeEntry";function o(){this._disabledInputs=[];this._defaults={showSeconds:h,defaultTime:c,minTime:c,maxTime:c,show24Hours:h,ampmNames:["am","pm"]};a.extend(this._defaults)}a.extend(o.prototype,{markerClassName:"hasTimeEntry",setDefaults:function(a){n(this._defaults,a||{});return this},_connectTimeEntry:function(e,f){var c=this,d=a(e);if(d.hasClass(c.markerClassName))return;var b={};b.options=a.extend({},f);b._selectedHour=0;b._selectedMinute=0;b._selectedSecond=0;b._field=0;b.input=a(e);a.data(e,g,b);d.addClass(c.markerClassName).bind("focus.timeEntry",c._doFocus).bind("blur.timeEntry",c._doBlur).bind("click.timeEntry",c._doClick).bind("keydown.timeEntry",c._doKeyDown).bind("keypress.timeEntry",c._doKeyPress);a.browser.mozilla&&d.bind("input.timeEntry",function(){a.timeEntry._parseTime(b)});a.browser.msie&&d.bind("paste.timeEntry",function(){setTimeout(function(){a.timeEntry._parseTime(b)},1)})},_isDisabledTimeEntry:function(b){return a.inArray(b,this._disabledInputs)>e},_changeTimeEntry:function(e,b,f){var c=a.data(e,g);if(c){if(typeof b==j){var h=b;b={};b[h]=f}var d=this._extractTime(c);n(c.options,b||{});d&&this._setTime(c,new Date(0,0,0,d[0],d[1],d[2]))}a.data(e,g,c)},_destroyTimeEntry:function(d){var b=this;jQueryinput=a(d);if(!jQueryinput.hasClass(b.markerClassName))return;jQueryinput.removeClass(b.markerClassName).unbind(".timeEntry");b._disabledInputs=a.map(b._disabledInputs,function(a){return a==d?c:a});jQueryinput.parent().replaceWith(jQueryinput);a.removeData(d,g)},_setTimeTimeEntry:function(e,b){var d=a.data(e,g);d&&this._setTime(d,b?typeof b=="object"?new Date(b.getTime()):b:c)},_getTimeTimeEntry:function(e){var d=a.data(e,g),b=d?this._extractTime(d):c;return !b?c:new Date(0,0,0,b[0],b[1],b[2])},_getOffsetTimeEntry:function(e){var d=a.data(e,g),b=d?this._extractTime(d):c;return !b?0:(b[0]*3600+b[1]*60+b[2])*1e3},_doFocus:function(e){var d=e.nodeName&&e.nodeName.toLowerCase()=="input"?e:this;if(a.timeEntry._lastInput==d||a.timeEntry._isDisabledTimeEntry(d)){a.timeEntry._focussed=f;return}var i=a.data(d,g);a.timeEntry._focussed=h;a.timeEntry._lastInput=d;a.timeEntry._blurredInput=c;a.data(d,g,i);a.timeEntry._parseTime(i);setTimeout(function(){a.timeEntry._showField(i)},b)},_doBlur:function(){a.timeEntry._blurredInput=a.timeEntry._lastInput;a.timeEntry._lastInput=c},_doClick:function(k){var h=k.target,d=a.data(h,g);if(!a.timeEntry._focussed){var i=3;d._field=0;if(h.selectionStart!=c)for(var e=0;e<=Math.max(1,d._secondField,d._ampmField);e++){var m=e!=d._ampmField?e*i+2:d._ampmField*i+2;d._field=e;if(h.selectionStart=48)return h;var b=a.data(c.target,g);switch(c.keyCode){case 9:var d=a(":input");d.eq(d.index(this)+(c.shiftKey?e:+1)).focus();break;case 37:a.timeEntry._changeField(b,e,f);break;case 38:a.timeEntry._adjustField(b,e);break;case 16:!c.shiftKey&&a.timeEntry._changeField(b,+1,f);break;case 39:a.timeEntry._changeField(b,+1,f);break;case 40:a.timeEntry._adjustField(b,+1);break;case 32:case 46:a.timeEntry._setValue(b,"")}return f},_doKeyPress:function(b){var c=String.fromCharCode(b.charCode==undefined?b.keyCode:b.charCode);if(c<" ")return h;var d=a.data(b.target,g);a.timeEntry._handleKeyPress(d,c);return f},_get:function(d,b){return d.options[b]!=c?d.options[b]:a.timeEntry._defaults[b]},_parseTime:function(a){var b=this,c=b._extractTime(a),d=b._get(a,m);if(c){a._selectedHour=c[0];a._selectedMinute=c[1];a._selectedSecond=c[2]}else{var f=b._constrainTime(a);a._selectedHour=f[0];a._selectedMinute=f[1];a._selectedSecond=d?f[2]:0}a._secondField=d?2:e;a._ampmField=b._get(a,i)?e:d?3:2;a._lastChr="";a._field=Math.max(0,Math.min(Math.max(1,a._secondField,a._ampmField),0));a.input.val()!=""&&b._showTime(a)},_extractTime:function(h,g){var n=this;g=g||h.input.val();var f=g.split(":"),p=n._get(h,k),o=n._get(h,i);if(f.length>=2){var r=!o&&g.indexOf(p[0])>e,q=!o&&g.indexOf(p[1])>e,a=parseInt(f[0],b);a=isNaN(a)?0:a;a=((r||q)&&a==d?0:a)+(q?d:0);var j=parseInt(f[1],b);j=isNaN(j)?0:j;var l=f.length>=3?parseInt(f[2],b):0;l=isNaN(l)||!n._get(h,m)?0:l;return n._constrainTime(h,[a,j,l])}return c},_constrainTime:function(d,a){var e=a!=c;if(!e){var b=this._determineTime(d,this._get(d,"defaultTime"))||new Date;a=[b.getHours(),b.getMinutes(),b.getSeconds()]}return a},_showTime:function(a){var b=this,c=b._get(a,i),e=b._formatNumber(c?a._selectedHour:(a._selectedHour+11)%d+1)+":"+b._formatNumber(a._selectedMinute)+(b._get(a,m)?":"+b._formatNumber(a._selectedSecond):"")+(c?"":b._get(a,k)[a._selectedHourf?f:b;d._selectedHour=b.getHours();d._selectedMinute=b.getMinutes();d._selectedSecond=b.getSeconds();e._showTime(d);a.data(d.input[0],g,d)},_normaliseTime:function(a){if(!a)return c;a.setFullYear(1900);a.setMonth(0);a.setDate(0);return a},_determineTime:function(g,d){var e=function(b){var a=new Date;a.setTime(a.getTime()+b*1e3);return a},f=function(f){var d=a.timeEntry._extractTime(g,f),c=new Date,k=d?d[0]:c.getHours(),i=d?d[1]:c.getMinutes(),j=d?d[2]:c.getSeconds();if(!d){var h=/([+-]?[0-9]+)\s*(s|S|m|M|h|H)?/g,e=h.exec(f);while(e){switch(e[2]||"s"){case "s":case "S":j+=parseInt(e[1],b);break;case "m":case "M":i+=parseInt(e[1],b);break;case "h":case "H":k+=parseInt(e[1],b)}e=h.exec(f)}}c=new Date(0,0,b,k,i,j,0);if(/^!/.test(f))if(c.getDate()>b)c=new Date(0,0,b,23,59,59);else if(c.getDate()="0"&&c<="9"){var h=parseInt(c,b),e=parseInt(a._lastChr+c,b),m=g._get(a,i),q=a._field!=0?a._selectedHour:m?e<24?e:h:(e>=1&&e<=d?e:h>0?h:a._selectedHour)%d+(a._selectedHour>=d?d:0),o=a._field!=1?a._selectedMinute:e<60?e:h,p=a._field!=a._secondField?a._selectedSecond:e<60?e:h,j=g._constrainTime(a,[q,o,p]);g._setTime(a,new Date(0,0,0,j[0],j[1],j[2]));a._lastChr=c}else if(!g._get(a,i)){c=c.toLowerCase();var l=g._get(a,k);if(c==l[0].substring(0,1).toLowerCase()&&a._selectedHour>=d||c==l[1].substring(0,1).toLowerCase()&&a._selectedHoure)return a.timeEntry["_"+b+c].apply(a.timeEntry,[this[0]].concat(d));return this.each(function(){var e=this,g=e.nodeName.toLowerCase();if(g=="input")if(typeof b==j)a.timeEntry["_"+b+c].apply(a.timeEntry,[e].concat(d));else{var f=a.fn.metadata?a(e).metadata():{};a.timeEntry._connectTimeEntry(e,a.extend(f,b))}})};a.timeEntry=new o})(jQuery) web2py-1.99.7.orig/applications/admin/static/js/web2py.js0000644000175000017500000001424111724764235021716 0ustar josejosefunction popup(url) { newwindow=window.open(url,'name','height=400,width=600'); if (window.focus) newwindow.focus(); return false; } function collapse(id) { jQuery('#'+id).slideToggle(); } function fade(id,value) { if(value>0) jQuery('#'+id).hide().fadeIn('slow'); else jQuery('#'+id).show().fadeOut('slow'); } function ajax(u,s,t) { query = ''; if (typeof s == "string") { d = jQuery(s).serialize(); if(d){ query = d; } } else { pcs = []; if (s != null && s != undefined) for(i=0; i0){query = pcs.join("&");} } jQuery.ajax({type: "POST", url: u, data: query, success: function(msg) { if(t) { if(t==':eval') eval(msg); else if(typeof t=='string') jQuery("#"+t).html(msg); else t(msg); } } }); } String.prototype.reverse = function () { return this.split('').reverse().join('');}; function web2py_ajax_fields(target) { var date_format = (typeof w2p_ajax_date_format != 'undefined') ? w2p_ajax_date_format : "%Y-%m-%d"; var datetime_format = (typeof w2p_ajax_datetime_format != 'undefined') ? w2p_ajax_datetime_format : "%Y-%m-%d %H:%M:%S"; jQuery("input.date",target).each(function() {Calendar.setup({inputField:this, ifFormat:date_format, showsTime:false });}); jQuery("input.datetime",target).each(function() {Calendar.setup({inputField:this, ifFormat:datetime_format, showsTime: true, timeFormat: "24" });}); jQuery("input.time",target).each(function(){jQuery(this).timeEntry();}); }; function web2py_ajax_init(target) { jQuery('.hidden', target).hide(); jQuery('.error', target).hide().slideDown('slow'); web2py_ajax_fields(target); }; function web2py_event_handlers() { var doc = jQuery(document) doc.on('click', '.flash', function(e){jQuery(this).fadeOut('slow'); e.preventDefault();}); doc.on('keyup', 'input.integer', function(){this.value=this.value.reverse().replace(/[^0-9\-]|\-(?=.)/g,'').reverse();}); doc.on('keyup', 'input.double, input.decimal', function(){this.value=this.value.reverse().replace(/[^0-9\-\.,]|[\-](?=.)|[\.,](?=[0-9]*[\.,])/g,'').reverse();}); var confirm_message = (typeof w2p_ajax_confirm_message != 'undefined') ? w2p_ajax_confirm_message : "Are you sure you want to delete this object?"; doc.on('click', "input[type='checkbox'].delete", function(){if(this.checked) if(!confirm(confirm_message)) this.checked=false;}); }; jQuery(function() { var flash = jQuery('.flash'); flash.hide(); if(flash.html()) flash.slideDown(); web2py_ajax_init(document); web2py_event_handlers(); }); function web2py_trap_form(action,target) { jQuery('#'+target+' form').each(function(i){ var form=jQuery(this); if(!form.hasClass('no_trap')) form.submit(function(e){ jQuery('.flash').hide().html(''); web2py_ajax_page('post',action,form.serialize(),target); e.preventDefault(); }); }); } function web2py_trap_link(target) { jQuery('#'+target+' a.w2p_trap').each(function(i){ var link=jQuery(this); link.click(function(e) { jQuery('.flash').hide().html(''); web2py_ajax_page('get',link.attr('href'),[],target); e.preventDefault(); }); }); } function web2py_ajax_page(method, action, data, target) { jQuery.ajax({'type':method, 'url':action, 'data':data, 'beforeSend':function(xhr) { xhr.setRequestHeader('web2py-component-location', document.location); xhr.setRequestHeader('web2py-component-element', target);}, 'complete':function(xhr,text){ var html=xhr.responseText; var content=xhr.getResponseHeader('web2py-component-content'); var command=xhr.getResponseHeader('web2py-component-command'); var flash=xhr.getResponseHeader('web2py-component-flash'); var t = jQuery('#'+target); if(content=='prepend') t.prepend(html); else if(content=='append') t.append(html); else if(content!='hide') t.html(html); web2py_trap_form(action,target); web2py_trap_link(target); web2py_ajax_init('#'+target); if(command) eval(decodeURIComponent(escape(command))); if(flash) jQuery('.flash').html(decodeURIComponent(escape(flash))).slideDown(); } }); } function web2py_component(action, target, timeout, times){ jQuery(function(){ var element = $("#" + target).get(0); var statement = "$('#" + target + "').get(0).reload();"; element.reload = function (){ // Continue if times is Infinity or // the times limit is not reached if (this.reload_check()){ web2py_ajax_page('get', action, null, target);} }; // reload // Method to check timing limit element.reload_check = function (){ if (this.reload_counter == Infinity){return true;} else { if (!isNaN(this.reload_counter)){ this.reload_counter -= 1; if (this.reload_counter < 0){ if (!this.run_once){ clearInterval(this.timing); return false; } } else{return true;} } } return false;}; // reload check if (!isNaN(timeout)){ element.timeout = timeout; element.reload_counter = times; if (times > 1){ // Multiple or infinite reload // Run first iteration web2py_ajax_page('get', action, null, target); element.run_once = false; element.timing = setInterval(statement, timeout); element.reload_counter -= 1; } else if (times == 1) { // Run once with timeout element.run_once = true; element.setTimeout = setTimeout; element.timing = setTimeout(statement, timeout); } } else { // run once (no timeout specified) web2py_ajax_page('get', action, null, target); } }); } function web2py_comet(url,onmessage,onopen,onclose) { if ("WebSocket" in window) { var ws = new WebSocket(url); ws.onopen = onopen?onopen:(function(){}); ws.onmessage = onmessage; ws.onclose = onclose?onclose:(function(){}); return true; // supported } else return false; // not supported } web2py-1.99.7.orig/applications/admin/static/js/jqueryMultiSelect.js0000755000175000017500000002576011724764235024213 0ustar josejose/* // jQuery multiSelect // // Version 1.0 beta // // Cory S.N. LaViska // A Beautiful Site (http://abeautifulsite.net/) // 06 April 2008 // // Visit http://abeautifulsite.net/notebook.php?article=62 for more information // // Usage: $('#control_id').multiSelect( options, callback ) // // Options: selectAll - whether or not to display the Select All option; true/false, default = true // selectAllText - text to display for selecting/unselecting all options simultaneously // noneSelected - text to display when there are no selected items in the list // oneOrMoreSelected - text to display when there are one or more selected items in the list // (note: you can use % as a placeholder for the number of items selected). // Use * to show a comma separated list of all selected; default = '% selected' // // Dependencies: jQuery 1.2 or higher (http://jquery.com/) // the jQuery Dimensions plugin (http://plugins.jquery.com/project/dimensions) // // Licensing & Terms of Use // // jQuery File Tree is licensed under a Creative Commons License and is copyrighted (C)2008 by Cory S.N. LaViska. // For details, visit http://creativecommons.org/licenses/by/3.0/us/ // */ if(jQuery) (function($){ $.extend($.fn, { multiSelect: function(o, callback) { // Default options if( !o ) var o = {}; if( o.selectAll == undefined ) o.selectAll = true; if( o.selectAllText == undefined ) o.selectAllText = "Select All"; if( o.noneSelected == undefined ) o.noneSelected = 'Select options'; if( o.oneOrMoreSelected == undefined ) o.oneOrMoreSelected = '% selected'; // Initialize each multiSelect $(this).each( function() { var select = $(this); var html = ''; html += ''; $(select).after(html); // Events $(select).next('.multiSelect').mouseover( function() { $(this).addClass('hover'); }).mouseout( function() { $(this).removeClass('hover'); }).click( function() { // Show/hide on click if( $(this).hasClass('active') ) { $(this).multiSelectOptionsHide(); } else { $(this).multiSelectOptionsShow(); } return false; }).focus( function() { // So it can be styled with CSS $(this).addClass('focus'); }).blur( function() { // So it can be styled with CSS $(this).removeClass('focus'); }); // Determine if Select All should be checked initially if( o.selectAll ) { var sa = true; $(select).next('.multiSelect').next('.multiSelectOptions').find('INPUT:checkbox').not('.selectAll').each( function() { if( !$(this).attr('checked') ) sa = false; }); if( sa ) $(select).next('.multiSelect').next('.multiSelectOptions').find('INPUT.selectAll').attr('checked', true).parent().addClass('checked'); } // Handle Select All $(select).next('.multiSelect').next('.multiSelectOptions').find('INPUT.selectAll').click( function() { if( $(this).attr('checked') == true ) $(this).parent().parent().find('INPUT:checkbox').attr('checked', true).parent().addClass('checked'); else $(this).parent().parent().find('INPUT:checkbox').attr('checked', false).parent().removeClass('checked'); }); // Handle checkboxes $(select).next('.multiSelect').next('.multiSelectOptions').find('INPUT:checkbox').click( function() { $(this).parent().parent().multiSelectUpdateSelected(o); $(this).parent().parent().find('LABEL').removeClass('checked').find('INPUT:checked').parent().addClass('checked'); $(this).parent().parent().prev('.multiSelect').focus(); if( !$(this).attr('checked') ) $(this).parent().parent().find('INPUT:checkbox.selectAll').attr('checked', false).parent().removeClass('checked'); if( callback ) callback($(this)); }); // Initial display $(select).next('.multiSelect').next('.multiSelectOptions').each( function() { $(this).multiSelectUpdateSelected(o); $(this).find('INPUT:checked').parent().addClass('checked'); }); // Handle hovers $(select).next('.multiSelect').next('.multiSelectOptions').find('LABEL').mouseover( function() { $(this).parent().find('LABEL').removeClass('hover'); $(this).addClass('hover'); }).mouseout( function() { $(this).parent().find('LABEL').removeClass('hover'); }); // Keyboard $(select).next('.multiSelect').keydown( function(e) { // Is dropdown visible? if( $(this).next('.multiSelectOptions').is(':visible') ) { // Dropdown is visible // Tab if( e.keyCode == 9 ) { $(this).addClass('focus').trigger('click'); // esc, left, right - hide $(this).focus().next(':input').focus(); return true; } // ESC, Left, Right if( e.keyCode == 27 || e.keyCode == 37 || e.keyCode == 39 ) { // Hide dropdown $(this).addClass('focus').trigger('click'); } // Down if( e.keyCode == 40 ) { if( !$(this).next('.multiSelectOptions').find('LABEL').hasClass('hover') ) { // Default to first item $(this).next('.multiSelectOptions').find('LABEL:first').addClass('hover'); } else { // Move down, cycle to top if on bottom $(this).next('.multiSelectOptions').find('LABEL.hover').removeClass('hover').next('LABEL').addClass('hover'); if( !$(this).next('.multiSelectOptions').find('LABEL').hasClass('hover') ) { $(this).next('.multiSelectOptions').find('LABEL:first').addClass('hover'); } } return false; } // Up if( e.keyCode == 38 ) { if( !$(this).next('.multiSelectOptions').find('LABEL').hasClass('hover') ) { // Default to first item $(this).next('.multiSelectOptions').find('LABEL:first').addClass('hover'); } else { // Move up, cycle to bottom if on top $(this).next('.multiSelectOptions').find('LABEL.hover').removeClass('hover').prev('LABEL').addClass('hover'); if( !$(this).next('.multiSelectOptions').find('LABEL').hasClass('hover') ) { $(this).next('.multiSelectOptions').find('LABEL:last').addClass('hover'); } } return false; } // Enter, Space if( e.keyCode == 13 || e.keyCode == 32 ) { // Select All if( $(this).next('.multiSelectOptions').find('LABEL.hover INPUT:checkbox').hasClass('selectAll') ) { if( $(this).next('.multiSelectOptions').find('LABEL.hover INPUT:checkbox').attr('checked') ) { // Uncheck all $(this).next('.multiSelectOptions').find('INPUT:checkbox').attr('checked', false).parent().removeClass('checked'); } else { // Check all $(this).next('.multiSelectOptions').find('INPUT:checkbox').attr('checked', true).parent().addClass('checked'); } $(this).next('.multiSelectOptions').multiSelectUpdateSelected(o); if( callback ) callback($(this)); return false; } // Other checkboxes if( $(this).next('.multiSelectOptions').find('LABEL.hover INPUT:checkbox').attr('checked') ) { // Uncheck $(this).next('.multiSelectOptions').find('LABEL.hover INPUT:checkbox').attr('checked', false); $(this).next('.multiSelectOptions').multiSelectUpdateSelected(o); $(this).next('.multiSelectOptions').find('LABEL').removeClass('checked').find('INPUT:checked').parent().addClass('checked'); // Select all status can't be checked at this point $(this).next('.multiSelectOptions').find('INPUT:checkbox.selectAll').attr('checked', false).parent().removeClass('checked'); if( callback ) callback($(this)); } else { // Check $(this).next('.multiSelectOptions').find('LABEL.hover INPUT:checkbox').attr('checked', true); $(this).next('.multiSelectOptions').multiSelectUpdateSelected(o); $(this).next('.multiSelectOptions').find('LABEL').removeClass('checked').find('INPUT:checked').parent().addClass('checked'); if( callback ) callback($(this)); } } return false; } else { // Dropdown is not visible if( e.keyCode == 38 || e.keyCode == 40 || e.keyCode == 13 || e.keyCode == 32 ) { // down, enter, space - show // Show dropdown $(this).removeClass('focus').trigger('click'); $(this).next('.multiSelectOptions').find('LABEL:first').addClass('hover'); return false; } // Tab key if( e.keyCode == 9 ) { // Shift focus to next INPUT element on page $(this).focus().next(':input').focus(); return true; } } // Prevent enter key from submitting form if( e.keyCode == 13 ) return false; }); // Eliminate the original form element $(select).remove(); }); }, // Hide the dropdown multiSelectOptionsHide: function() { $(this).removeClass('active').next('.multiSelectOptions').hide(); }, // Show the dropdown multiSelectOptionsShow: function() { // Hide any open option boxes $('.multiSelect').multiSelectOptionsHide(); $(this).next('.multiSelectOptions').find('LABEL').removeClass('hover'); $(this).addClass('active').next('.multiSelectOptions').show(); // Position it var offset = $(this).offset(); $(this).next('.multiSelectOptions').css({ top: offset.top + $(this).outerHeight() + 'px' }); $(this).next('.multiSelectOptions').css({ left: offset.left + 'px' }); // Disappear on hover out multiSelectCurrent = $(this); var timer = ''; $(this).next('.multiSelectOptions').hover( function() { clearTimeout(timer); }, function() { timer = setTimeout('$(multiSelectCurrent).multiSelectOptionsHide(); $(multiSelectCurrent).unbind("hover");', 250); }); }, // Update the textbox with the total number of selected items multiSelectUpdateSelected: function(o) { var i = 0, s = ''; $(this).find('INPUT:checkbox:checked').not('.selectAll').each( function() { i++; }) if( i == 0 ) { $(this).prev('INPUT.multiSelect').val( o.noneSelected ); } else { if( o.oneOrMoreSelected == '*' ) { var display = ''; $(this).find('INPUT:checkbox:checked').each( function() { if( $(this).parent().text() != o.selectAllText ) display = display + $(this).parent().text() + ', '; }); display = display.substr(0, display.length - 2); $(this).prev('INPUT.multiSelect').val( display ); } else { $(this).prev('INPUT.multiSelect').val( o.oneOrMoreSelected.replace('%', i) ); } } } }); })(jQuery); web2py-1.99.7.orig/applications/admin/static/js/ajax_editor.js0000644000175000017500000001152611724764235023002 0ustar josejosefunction prepareDataForSave(name,data) { var obj = new Object(); obj.Name = name; obj.Data = data; return obj; } function prepareMultiPartPOST(data) { // var boundary = 'sPlItME' + Math.floor(Math.random()*10000); var boundary = '' + Math.floor(Math.random()*10000); var reqdata = '--' + boundary + '\r\n'; //console.log(data.length); for (var i=0;i < data.length;i++) { reqdata += 'content-disposition: form-data; name="' + data[i].Name + '"'; reqdata += "\r\n\r\n" ; reqdata += data[i].Data; reqdata += "\r\n" ; reqdata += '--' + boundary + '\r\n'; } return new Array(reqdata,boundary); } function on_error() { jQuery("input[name='saved_on']").attr('style','background-color:red'); jQuery("input[name='saved_on']").val('communication error'); } function doClickSave() { try { var data = eamy.instances[0].getText(); } catch(e) { var data = area.textarea.value; } var dataForPost = prepareMultiPartPOST(new Array( prepareDataForSave('data', data), prepareDataForSave('file_hash', jQuery("input[name='file_hash']").val()), prepareDataForSave('saved_on', jQuery("input[name='saved_on']").val()), prepareDataForSave('saved_on', jQuery("input[name='saved_on']").val()), prepareDataForSave('from_ajax','true'))); // console.info(area.textarea.value); jQuery("input[name='saved_on']").attr('style','background-color:yellow'); jQuery("input[name='saved_on']").val('saving now...') jQuery.ajax({ type: "POST", contentType: 'multipart/form-data;boundary="' + dataForPost[1] + '"', url: self.location.href, dataType: "json", data: dataForPost[0], timeout: 5000, beforeSend: function(xhr) { xhr.setRequestHeader('web2py-component-location',document.location); xhr.setRequestHeader('web2py-component-element','doClickSave');}, success: function(json,text,xhr){ // show flash message (if any) var flash=xhr.getResponseHeader('web2py-component-flash'); if (flash) jQuery('.flash').html(flash).slideDown(); else jQuery('.flash').hide(); // reenable disabled submit button var t=jQuery("input[name='save']"); t.attr('class',''); t.attr('disabled',''); try { if (json.error) { window.location.href=json.redirect; } else { // console.info( json.file_hash ); jQuery("input[name='file_hash']").val(json.file_hash); jQuery("input[name='saved_on']").val(json.saved_on); if (json.highlight) { editAreaLoader.setSelectionRange('body', json.highlight.start, json.highlight.end); } else { jQuery("input[name='saved_on']").attr('style','background-color:#99FF99'); jQuery(".flash").delay(1000).fadeOut('slow'); } // console.info(jQuery("input[name='file_hash']").val()); var output = 'exposes: '; for ( var i in json.functions) { output += ' ' + json.functions[i] + ','; } if(output!='exposes: ') { jQuery("#exposed").html( output.substring(0, output.length-1)); } } } catch(e) { on_error(); } }, error: function(json) { on_error(); } }); return false; } function doToggleBreakpoint(filename, url) { try { var data = eamy.instances[0].getText(); } catch(e) { var data = area.textarea.value; var sel = editAreaLoader.getSelectionRange('body'); } var dataForPost = prepareMultiPartPOST(new Array( prepareDataForSave('filename', filename), prepareDataForSave('sel_start', sel["start"]), prepareDataForSave('sel_end', sel["end"]), prepareDataForSave('data', data))); jQuery.ajax({ type: "POST", contentType: 'multipart/form-data;boundary="' + dataForPost[1] + '"', url: url, dataType: "json", data: dataForPost[0], timeout: 5000, beforeSend: function(xhr) { xhr.setRequestHeader('web2py-component-location',document.location); xhr.setRequestHeader('web2py-component-element','doSetBreakpoint');}, success: function(json,text,xhr){ // show flash message (if any) var flash=xhr.getResponseHeader('web2py-component-flash'); if (flash) jQuery('.flash').html(flash).slideDown(); else jQuery('.flash').hide(); try { if (json.error) { window.location.href=json.redirect; } else { // mark the breakpoint if ok=True, remove mark if ok=False // do nothing if ok = null // alert(json.ok + json.lineno); } } catch(e) { on_error(); } }, error: function(json) { on_error(); } }); return false; } function keepalive(url) { jQuery.ajax({ type: "GET", url: url, timeout: 1000, success: function(){}, error: function(x) { on_error(); } }); } web2py-1.99.7.orig/applications/admin/static/js/autoscroll.js0000644000175000017500000000400711724764235022674 0ustar josejose/* * autoscroll.js widget with jquery event(s) * Copyright 2011 Michael Whitford * License: BSD */ // toggle - id of the toggle element for the click event // textarea - id of the textarea to autoscroll var toggleAutoScroll = function (toggle, textarea) { var autoScrollDebug = false; var state = toggle + 'interval'; var scrollOn = function() { if (autoScrollDebug) { console.log('on:', toggle, textarea); } var onAnimation = function(name, target) { jQuery('#' + name).unbind().click(function() { toggleAutoScroll(name, target); }).fadeTo(350, 1); }; // uses obj attached to window for state window[state] = {}; window[state].name = toggle; window[state].target = textarea; // get a handle to the textarea el var area = jQuery('#' + textarea); // set the interval window[state].interval = setInterval(function() { // ui hack? needs more testing area[0].scrollTop = area[0].scrollHeight; }, 2500); // 2.5 seconds onAnimation(toggle, textarea); }; var scrollOff = function() { if (autoScrollDebug) { console.log('off:', toggle, textarea); } var offAnimation = function(name, target) { jQuery('#' + name).unbind().click(function() { toggleAutoScroll(name, target); }).fadeTo(350, 0.55); }; offAnimation(toggle, textarea); clearInterval(window[state].interval); window[state] = undefined; }; if (arguments.length == 2) { if (typeof window[state] === 'undefined') { scrollOn(); } else { scrollOff(); } } return; }; // jquery onready jQuery(document).ready(function () { // turn it on by default toggleAutoScroll('autoscroll', 'output'); }); // todo: some key - toggle off // todo: drag scrollbar up - toggle off // todo: drag scrollbar to bottom - toggle off web2py-1.99.7.orig/applications/admin/static/js/jquery.hotkeys.js0000644000175000017500000002405211724764235023513 0ustar josejose/* (c) Copyrights 2007 - 2008 Original idea by by Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/ jQuery Plugin by Tzury Bar Yochay tzury.by@gmail.com http://evalinux.wordpress.com http://facebook.com/profile.php?id=513676303 Project's sites: http://code.google.com/p/js-hotkeys/ http://github.com/tzuryby/hotkeys/tree/master License: same as jQuery license. USAGE: // simple usage $(document).bind('keydown', 'Ctrl+c', function(){ alert('copy anyone?');}); // special options such as disableInIput $(document).bind('keydown', {combi:'Ctrl+x', disableInInput: true} , function() {}); Note: This plugin wraps the following jQuery methods: $.fn.find, $.fn.bind and $.fn.unbind */ (function (jQuery){ // keep reference to the original $.fn.bind and $.fn.unbind jQuery.fn.__bind__ = jQuery.fn.bind; jQuery.fn.__unbind__ = jQuery.fn.unbind; jQuery.fn.__find__ = jQuery.fn.find; var hotkeys = { version: '0.7.8', override: /keydown|keypress|keyup/g, triggersMap: {}, specialKeys: { 27: 'esc', 9: 'tab', 32:'space', 13: 'return', 8:'backspace', 145: 'scroll', 20: 'capslock', 144: 'numlock', 19:'pause', 45:'insert', 36:'home', 46:'del', 35:'end', 33: 'pageup', 34:'pagedown', 37:'left', 38:'up', 39:'right',40:'down', 112:'f1',113:'f2', 114:'f3', 115:'f4', 116:'f5', 117:'f6', 118:'f7', 119:'f8', 120:'f9', 121:'f10', 122:'f11', 123:'f12' }, shiftNums: { "`":"~", "1":"!", "2":"@", "3":"#", "4":"$", "5":"%", "6":"^", "7":"&", "8":"*", "9":"(", "0":")", "-":"_", "=":"+", ";":":", "'":"\"", ",":"<", ".":">", "/":"?", "\\":"|" }, newTrigger: function (type, combi, callback) { // i.e. {'keyup': {'ctrl': {cb: callback, disableInInput: false}}} var result = {}; result[type] = {}; result[type][combi] = {cb: callback, disableInInput: false}; return result; } }; // add firefox num pad char codes if (jQuery.browser.mozilla){ hotkeys.specialKeys = jQuery.extend(hotkeys.specialKeys, { 96: '0', 97:'1', 98: '2', 99: '3', 100: '4', 101: '5', 102: '6', 103: '7', 104: '8', 105: '9' }); } // a wrapper around of $.fn.find // see more at: http://groups.google.com/group/jquery-en/browse_thread/thread/18f9825e8d22f18d jQuery.fn.find = function( selector ) { this.query=selector; return jQuery.fn.__find__.apply(this, arguments); }; jQuery.fn.unbind = function (type, combi, fn){ if (jQuery.isFunction(combi)){ fn = combi; combi = null; } if (combi && typeof combi === 'string'){ var selectorId = ((this.prevObject && this.prevObject.query) || (this[0].id && this[0].id) || this[0]).toString(); var hkTypes = type.split(' '); for (var x=0; x").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
    a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
    "+""+"
    ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
    t
    ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
    ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() {for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); web2py-1.99.7.orig/applications/admin/static/js/jquery.timeentry.js0000644000175000017500000005600611724764235024051 0ustar josejose/* http://keith-wood.name/timeEntry.html Time entry for jQuery v1.4.8. Written by Keith Wood (kbwood{at}iinet.com.au) June 2007. Minor changes by Massimo Di Pierro Nov 2010 (simplified and changed behavior) Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. Please attribute the author if you use it. Turn an input field into an entry point for a time value. The time can be entered via directly typing the value, via the arrow keys. It is configurable to show 12 or 24-hour time, to show or hide seconds, to enforce a minimum and/or maximum time, to change the spinner image. Example: jQuery('input.time').timeEntry(); */ (function(jQuery) { // Hide scope, no jQuery conflict var PROP_NAME = 'timeEntry'; /* TimeEntry manager. Use the singleton instance of this class, jQuery.timeEntry, to interact with the time entry functionality. Settings for (groups of) fields are maintained in an instance object (TimeEntryInstance), allowing multiple different settings on the same page. */ function TimeEntry() { this._disabledInputs = []; // List of time entry inputs that have been disabled this._defaults = { showSeconds: true, // True to show seconds as well, false for hours/minutes only defaultTime: null, // The time to use if none has been set, leave at null for now minTime: null, // The earliest selectable time, or null for no limit maxTime: null, // The latest selectable time, or null for no limit show24Hours: true, // True to use 24 hour time, false for 12 hour (AM/PM) ampmNames: ['am', 'pm'] // Names of morning/evening markers }; jQuery.extend(this._defaults); } jQuery.extend(TimeEntry.prototype, { /* Class name added to elements to indicate already configured with time entry. */ markerClassName: 'hasTimeEntry', /* Override the default settings for all instances of the time entry. @param options (object) the new settings to use as defaults (anonymous object) @return (DateEntry) this object */ setDefaults: function(options) { extendRemove(this._defaults, options || {}); return this; }, /* Attach the time entry handler to an input field. @param target (element) the field to attach to @param options (object) custom settings for this instance */ _connectTimeEntry: function(target, options) { var input = jQuery(target); if (input.hasClass(this.markerClassName)) { return; } var inst = {}; inst.options = jQuery.extend({}, options); inst._selectedHour = 0; // The currently selected hour inst._selectedMinute = 0; // The currently selected minute inst._selectedSecond = 0; // The currently selected second inst._field = 0; // The selected subfield inst.input = jQuery(target); // The attached input field jQuery.data(target, PROP_NAME, inst); input.addClass(this.markerClassName).bind('focus.timeEntry', this._doFocus). bind('blur.timeEntry', this._doBlur).bind('click.timeEntry', this._doClick). bind('keydown.timeEntry', this._doKeyDown).bind('keypress.timeEntry', this._doKeyPress); // Check pastes if (jQuery.browser.mozilla) input.bind('input.timeEntry', function(event) { jQuery.timeEntry._parseTime(inst); }); if (jQuery.browser.msie) input.bind('paste.timeEntry', function(event) { setTimeout(function() { jQuery.timeEntry._parseTime(inst); }, 1); }); }, /* Check whether an input field has been disabled. @param input (element) input field to check @return (boolean) true if this field has been disabled, false if it is enabled */ _isDisabledTimeEntry: function(input) { return jQuery.inArray(input, this._disabledInputs) > -1; }, /* Reconfigure the settings for a time entry field. @param input (element) input field to change @param options (object) new settings to add or (string) an individual setting name @param value (any) the individual setting's value */ _changeTimeEntry: function(input, options, value) { var inst = jQuery.data(input, PROP_NAME); if (inst) { if (typeof options == 'string') { var name = options; options = {}; options[name] = value; } var currentTime = this._extractTime(inst); extendRemove(inst.options, options || {}); if (currentTime) this._setTime(inst, new Date(0, 0, 0, currentTime[0], currentTime[1], currentTime[2])); } jQuery.data(input, PROP_NAME, inst); }, /* Remove the time entry functionality from an input. @param input (element) input field to affect */ _destroyTimeEntry: function(input) { jQueryinput = jQuery(input); if (!jQueryinput.hasClass(this.markerClassName)) return; jQueryinput.removeClass(this.markerClassName).unbind('.timeEntry'); this._disabledInputs = jQuery.map(this._disabledInputs, function(value) { return (value == input ? null : value); }); // Delete entry jQueryinput.parent().replaceWith(jQueryinput); jQuery.removeData(input, PROP_NAME); }, /* Initialise the current time for a time entry input field. @param input (element) input field to update @param time (Date) the new time (year/month/day ignored) or null for now */ _setTimeTimeEntry: function(input, time) { var inst = jQuery.data(input, PROP_NAME); if (inst) this._setTime(inst, time ? (typeof time == 'object' ? new Date(time.getTime()) : time) : null); }, /* Retrieve the current time for a time entry input field. @param input (element) input field to examine @return (Date) current time (year/month/day zero) or null if none */ _getTimeTimeEntry: function(input) { var inst = jQuery.data(input, PROP_NAME); var currentTime = (inst ? this._extractTime(inst) : null); return (!currentTime ? null : new Date(0, 0, 0, currentTime[0], currentTime[1], currentTime[2])); }, /* Retrieve the millisecond offset for the current time. @param input (element) input field to examine @return (number) the time as milliseconds offset or zero if none */ _getOffsetTimeEntry: function(input) { var inst = jQuery.data(input, PROP_NAME); var currentTime = (inst ? this._extractTime(inst) : null); return (!currentTime ? 0 : (currentTime[0] * 3600 + currentTime[1] * 60 + currentTime[2]) * 1000); }, /* Initialise time entry. @param target (element) the input field or (event) the focus event */ _doFocus: function(target) { var input = (target.nodeName && target.nodeName.toLowerCase() == 'input' ? target : this); if (jQuery.timeEntry._lastInput == input || jQuery.timeEntry._isDisabledTimeEntry(input)) { jQuery.timeEntry._focussed = false; return; } var inst = jQuery.data(input, PROP_NAME); jQuery.timeEntry._focussed = true; jQuery.timeEntry._lastInput = input; jQuery.timeEntry._blurredInput = null; jQuery.data(input, PROP_NAME, inst); jQuery.timeEntry._parseTime(inst); setTimeout(function() { jQuery.timeEntry._showField(inst); }, 10); }, /* Note that the field has been exited. @param event (event) the blur event */ _doBlur: function(event) { jQuery.timeEntry._blurredInput = jQuery.timeEntry._lastInput; jQuery.timeEntry._lastInput = null; }, /* Select appropriate field portion on click, if already in the field. @param event (event) the click event */ _doClick: function(event) { var input = event.target; var inst = jQuery.data(input, PROP_NAME); if (!jQuery.timeEntry._focussed) { var fieldSize = 3; inst._field = 0; if (input.selectionStart != null) { // Use input select range for (var field = 0; field <= Math.max(1, inst._secondField, inst._ampmField); field++) { var end = (field != inst._ampmField ? (field * fieldSize) + 2 : (inst._ampmField * fieldSize) + 2); inst._field = field; if (input.selectionStart < end) break; } } else if (input.createTextRange) { // Check against bounding boxes var src = jQuery(event.srcElement); var range = input.createTextRange(); var convert = function(value) { return {thin: 2, medium: 4, thick: 6}[value] || value; }; var offsetX = event.clientX + document.documentElement.scrollLeft - (src.offset().left + parseInt(convert(src.css('border-left-width')), 10)) - range.offsetLeft; // Position - left edge - alignment for (var field = 0; field <= Math.max(1, inst._secondField, inst._ampmField); field++) { var end = (field != inst._ampmField ? (field * fieldSize) + 2 : (inst._ampmField * fieldSize) + 2); range.collapse(); range.moveEnd('character', end); inst._field = field; if (offsetX < range.boundingWidth) break; // And compare } } } jQuery.data(input, PROP_NAME, inst); jQuery.timeEntry._showField(inst); jQuery.timeEntry._focussed = false; }, /* Handle keystrokes in the field. @param event (event) the keydown event @return (boolean) true to continue, false to stop processing */ _doKeyDown: function(event) { if (event.keyCode >= 48) return true; var inst = jQuery.data(event.target, PROP_NAME); switch (event.keyCode) { case 9: var its = jQuery(':input'); its.eq(its.index(this)+(event.shiftKey?-1:+1)).focus(); break; case 37: jQuery.timeEntry._changeField(inst, -1, false); break; // Previous field on left case 38: jQuery.timeEntry._adjustField(inst, -1); break; // Increment time field on down case 16: if(!event.shiftKey) jQuery.timeEntry._changeField(inst, +1, false); break; // Next field on right case 39: jQuery.timeEntry._changeField(inst, +1, false); break; // Next field on right case 40: jQuery.timeEntry._adjustField(inst, +1); break; // Decrement time field on up case 32: case 46: jQuery.timeEntry._setValue(inst, ''); break; // Clear time on delete } return false; }, /* Disallow unwanted characters. @param event (event) the keypress event @return (boolean) true to continue, false to stop processing */ _doKeyPress: function(event) { var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); if (chr < ' ') return true; var inst = jQuery.data(event.target, PROP_NAME); jQuery.timeEntry._handleKeyPress(inst, chr); return false; }, /* Get a setting value, defaulting if necessary. @param inst (object) the instance settings @param name (string) the setting name @return (any) the setting value */ _get: function(inst, name) { return (inst.options[name] != null ? inst.options[name] : jQuery.timeEntry._defaults[name]); }, /* Extract the time value from the input field, or default to now. @param inst (object) the instance settings */ _parseTime: function(inst) { var currentTime = this._extractTime(inst); var showSeconds = this._get(inst, 'showSeconds'); if (currentTime) { inst._selectedHour = currentTime[0]; inst._selectedMinute = currentTime[1]; inst._selectedSecond = currentTime[2]; } else { var now = this._constrainTime(inst); inst._selectedHour = now[0]; inst._selectedMinute = now[1]; inst._selectedSecond = (showSeconds ? now[2] : 0); } inst._secondField = (showSeconds ? 2 : -1); inst._ampmField = (this._get(inst, 'show24Hours') ? -1 : (showSeconds ? 3 : 2)); inst._lastChr = ''; inst._field = Math.max(0, Math.min(Math.max(1, inst._secondField, inst._ampmField), 0)); if (inst.input.val() != '') this._showTime(inst); }, /* Extract the time value from a string as an array of values, or default to null. @param inst (object) the instance settings @param value (string) the time value to parse @return (number[3]) the time components (hours, minutes, seconds) or null if no value */ _extractTime: function(inst, value) { value = value || inst.input.val(); var currentTime = value.split(':'); var ampmNames = this._get(inst, 'ampmNames'); var show24Hours = this._get(inst, 'show24Hours'); if (currentTime.length >= 2) { var isAM = !show24Hours && (value.indexOf(ampmNames[0]) > -1); var isPM = !show24Hours && (value.indexOf(ampmNames[1]) > -1); var hour = parseInt(currentTime[0], 10); hour = (isNaN(hour) ? 0 : hour); hour = ((isAM || isPM) && hour == 12 ? 0 : hour) + (isPM ? 12 : 0); var minute = parseInt(currentTime[1], 10); minute = (isNaN(minute) ? 0 : minute); var second = (currentTime.length >= 3 ? parseInt(currentTime[2], 10) : 0); second = (isNaN(second) || !this._get(inst, 'showSeconds') ? 0 : second); return this._constrainTime(inst, [hour, minute, second]); } return null; }, /* Constrain the given/current time to the time steps. @param inst (object) the instance settings @param fields (number[3]) the current time components (hours, minutes, seconds) @return (number[3]) the constrained time components (hours, minutes, seconds) */ _constrainTime: function(inst, fields) { var specified = (fields != null); if (!specified) { var now = this._determineTime(inst, this._get(inst, 'defaultTime')) || new Date(); fields = [now.getHours(), now.getMinutes(), now.getSeconds()]; } return fields; }, /* Set the selected time into the input field. @param inst (object) the instance settings */ _showTime: function(inst) { var show24Hours = this._get(inst, 'show24Hours'); var currentTime = (this._formatNumber(show24Hours ? inst._selectedHour : ((inst._selectedHour + 11) % 12) + 1) + ':' + this._formatNumber(inst._selectedMinute) + (this._get(inst, 'showSeconds') ? ':' + this._formatNumber(inst._selectedSecond) : '') + (show24Hours ? '' : this._get(inst, 'ampmNames')[(inst._selectedHour < 12 ? 0 : 1)])); this._setValue(inst, currentTime); this._showField(inst); }, /* Highlight the current time field. @param inst (object) the instance settings */ _showField: function(inst) { var input = inst.input[0]; if (inst.input.is(':hidden') || jQuery.timeEntry._lastInput != input) return; var fieldSize = 3; var start = (inst._field == inst._ampmField ? (inst._ampmField * fieldSize) - 1 : (inst._field * fieldSize)); var end = start + (inst._field == inst._ampmField ? 2 : 2); if (input.setSelectionRange) { // Mozilla input.setSelectionRange(start, end); } else if (input.createTextRange) { // IE var range = input.createTextRange(); range.moveStart('character', start); range.moveEnd('character', end - inst.input.val().length); range.select(); } if (!input.disabled) input.focus(); }, /* Ensure displayed single number has a leading zero. @param value (number) current value @return (string) number with at least two digits */ _formatNumber: function(value) { return (value < 10 ? '0' : '') + value; }, /* Update the input field and notify listeners. @param inst (object) the instance settings @param value (string) the new value */ _setValue: function(inst, value) { if (value != inst.input.val()) inst.input.val(value).trigger('change'); }, /* Move to previous/next field, or out of field altogether if appropriate. @param inst (object) the instance settings @param offset (number) the direction of change (-1, +1) @param moveOut (boolean) true if can move out of the field @return (boolean) true if exitting the field, false if not */ _changeField: function(inst, offset, moveOut) { var atFirstLast = (inst.input.val() == '' || inst._field == (offset == -1 ? 0 : Math.max(1, inst._secondField, inst._ampmField))); if (!atFirstLast) inst._field += offset; this._showField(inst); inst._lastChr = ''; jQuery.data(inst.input[0], PROP_NAME, inst); return (atFirstLast && moveOut); }, /* Update the current field in the direction indicated. @param inst (object) the instance settings @param offset (number) the amount to change by */ _adjustField: function(inst, offset) { if (inst.input.val() == '') offset = 0; this._setTime(inst, new Date(0, 0, 0, inst._selectedHour + (inst._field == 0 ? offset : 0) + (inst._field == inst._ampmField ? offset * 12 : 0), inst._selectedMinute + (inst._field == 1 ? offset : 0), inst._selectedSecond + (inst._field == inst._secondField ? offset : 0))); }, /* Check against minimum/maximum and display time. @param inst (object) the instance settings @param time (Date) an actual time or (number) offset in seconds from now or (string) units and periods of offsets from now */ _setTime: function(inst, time) { time = this._determineTime(inst, time); var fields = this._constrainTime(inst, time ? [time.getHours(), time.getMinutes(), time.getSeconds()] : null); time = new Date(0, 0, 0, fields[0], fields[1], fields[2]); // Normalise to base date var time = this._normaliseTime(time); var minTime = this._normaliseTime(this._determineTime(inst, this._get(inst, 'minTime'))); var maxTime = this._normaliseTime(this._determineTime(inst, this._get(inst, 'maxTime'))); // Ensure it is within the bounds set time = (minTime && time < minTime ? minTime : (maxTime && time > maxTime ? maxTime : time)); inst._selectedHour = time.getHours(); inst._selectedMinute = time.getMinutes(); inst._selectedSecond = time.getSeconds(); this._showTime(inst); jQuery.data(inst.input[0], PROP_NAME, inst); }, /* Normalise time object to a common date. @param time (Date) the original time @return (Date) the normalised time */ _normaliseTime: function(time) { if (!time) return null; time.setFullYear(1900); time.setMonth(0); time.setDate(0); return time; }, /* A time may be specified as an exact value or a relative one. @param inst (object) the instance settings @param setting (Date) an actual time or (number) offset in seconds from now or (string) units and periods of offsets from now @return (Date) the calculated time */ _determineTime: function(inst, setting) { var offsetNumeric = function(offset) { // E.g. +300, -2 var time = new Date(); time.setTime(time.getTime() + offset * 1000); return time; }; var offsetString = function(offset) { // E.g. '+2m', '-4h', '+3h +30m' or '12:34:56PM' var fields = jQuery.timeEntry._extractTime(inst, offset); // Actual time? var time = new Date(); var hour = (fields ? fields[0] : time.getHours()); var minute = (fields ? fields[1] : time.getMinutes()); var second = (fields ? fields[2] : time.getSeconds()); if (!fields) { var pattern = /([+-]?[0-9]+)\s*(s|S|m|M|h|H)?/g; var matches = pattern.exec(offset); while (matches) { switch (matches[2] || 's') { case 's' : case 'S' : second += parseInt(matches[1], 10); break; case 'm' : case 'M' : minute += parseInt(matches[1], 10); break; case 'h' : case 'H' : hour += parseInt(matches[1], 10); break; } matches = pattern.exec(offset); } } time = new Date(0, 0, 10, hour, minute, second, 0); if (/^!/.test(offset)) { // No wrapping if (time.getDate() > 10) time = new Date(0, 0, 10, 23, 59, 59); else if (time.getDate() < 10) time = new Date(0, 0, 10, 0, 0, 0); } return time; }; return (setting ? (typeof setting == 'string' ? offsetString(setting) : (typeof setting == 'number' ? offsetNumeric(setting) : setting)) : null); }, /* Update time based on keystroke entered. @param inst (object) the instance settings @param chr (ch) the new character */ _handleKeyPress: function(inst, chr) { if (chr == ':') this._changeField(inst, +1, false); else if (chr >= '0' && chr <= '9') { // Allow direct entry of time var key = parseInt(chr, 10); var value = parseInt(inst._lastChr + chr, 10); var show24Hours = this._get(inst, 'show24Hours'); var hour = (inst._field != 0 ? inst._selectedHour : (show24Hours ? (value < 24 ? value : key) : (value >= 1 && value <= 12 ? value : (key > 0 ? key : inst._selectedHour)) % 12 + (inst._selectedHour >= 12 ? 12 : 0))); var minute = (inst._field != 1 ? inst._selectedMinute : (value < 60 ? value : key)); var second = (inst._field != inst._secondField ? inst._selectedSecond : (value < 60 ? value : key)); var fields = this._constrainTime(inst, [hour, minute, second]); this._setTime(inst, new Date(0, 0, 0, fields[0], fields[1], fields[2])); inst._lastChr = chr; } else if (!this._get(inst, 'show24Hours')) { // Set am/pm based on first char of names chr = chr.toLowerCase(); var ampmNames = this._get(inst, 'ampmNames'); if ((chr == ampmNames[0].substring(0, 1).toLowerCase() && inst._selectedHour >= 12) || (chr == ampmNames[1].substring(0, 1).toLowerCase() && inst._selectedHour < 12)) { var saveField = inst._field; inst._field = inst._ampmField; this._adjustField(inst, +1); inst._field = saveField; this._showField(inst); } } } }); /* jQuery extend now ignores nulls! @param target (object) the object to update @param props (object) the new settings @return (object) the updated object */ function extendRemove(target, props) { jQuery.extend(target, props); for (var name in props) if (props[name] == null) target[name] = null; return target; } // Commands that don't return a jQuery object var getters = ['getOffset', 'getTime', 'isDisabled']; /* Attach the time entry functionality to a jQuery selection. @param command (string) the command to run (optional, default 'attach') @param options (object) the new settings to use for these countdown instances (optional) @return (jQuery) for chaining further calls */ jQuery.fn.timeEntry = function(options) { var otherArgs = Array.prototype.slice.call(arguments, 1); if (typeof options == 'string' && jQuery.inArray(options, getters) > -1) { return jQuery.timeEntry['_' + options + 'TimeEntry'].apply(jQuery.timeEntry, [this[0]].concat(otherArgs)); } return this.each(function() { var nodeName = this.nodeName.toLowerCase(); if (nodeName == 'input') { if (typeof options == 'string') jQuery.timeEntry['_' + options + 'TimeEntry'].apply(jQuery.timeEntry, [this].concat(otherArgs)); else { // Check for settings on the control itself var inlineSettings = (jQuery.fn.metadata ? jQuery(this).metadata() : {}); jQuery.timeEntry._connectTimeEntry(this, jQuery.extend(inlineSettings, options)); } } }); }; /* Initialise the time entry functionality. */ jQuery.timeEntry = new TimeEntry(); // Singleton instance })(jQuery); web2py-1.99.7.orig/applications/admin/static/plugin_jqmobile/0000755000175000017500000000000011724764235022712 5ustar josejoseweb2py-1.99.7.orig/applications/admin/static/plugin_jqmobile/dd_belatedpng.js0000644000175000017500000001555411724764235026036 0ustar josejose/** * DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML . * Author: Drew Diller * Email: drew.diller@gmail.com * URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/ * Version: 0.0.8a * Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license * * Example usage: * DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector * DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement **/ var DD_belatedPNG={ns:"DD_belatedPNG",imgSize:{},delay:10,nodesFixed:0,createVmlNameSpace:function(){if(document.namespaces&&!document.namespaces[this.ns]){document.namespaces.add(this.ns,"urn:schemas-microsoft-com:vml")}},createVmlStyleSheet:function(){var b,a;b=document.createElement("style");b.setAttribute("media","screen");document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild);if(b.styleSheet){b=b.styleSheet;b.addRule(this.ns+"\\:*","{behavior:url(#default#VML)}");b.addRule(this.ns+"\\:shape","position:absolute;");b.addRule("img."+this.ns+"_sizeFinder","behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;");this.screenStyleSheet=b;a=document.createElement("style");a.setAttribute("media","print");document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);a=a.styleSheet;a.addRule(this.ns+"\\:*","{display: none !important;}");a.addRule("img."+this.ns+"_sizeFinder","{display: none !important;}")}},readPropertyChange:function(){var b,c,a;b=event.srcElement;if(!b.vmlInitiated){return}if(event.propertyName.search("background")!=-1||event.propertyName.search("border")!=-1){DD_belatedPNG.applyVML(b)}if(event.propertyName=="style.display"){c=(b.currentStyle.display=="none")?"none":"block";for(a in b.vml){if(b.vml.hasOwnProperty(a)){b.vml[a].shape.style.display=c}}}if(event.propertyName.search("filter")!=-1){DD_belatedPNG.vmlOpacity(b)}},vmlOpacity:function(b){if(b.currentStyle.filter.search("lpha")!=-1){var a=b.currentStyle.filter;a=parseInt(a.substring(a.lastIndexOf("=")+1,a.lastIndexOf(")")),10)/100;b.vml.color.shape.style.filter=b.currentStyle.filter;b.vml.image.fill.opacity=a}},handlePseudoHover:function(a){setTimeout(function(){DD_belatedPNG.applyVML(a)},1)},fix:function(a){if(this.screenStyleSheet){var c,b;c=a.split(",");for(b=0;bn.H){i.B=n.H}d.vml.image.shape.style.clip="rect("+i.T+"px "+(i.R+a)+"px "+i.B+"px "+(i.L+a)+"px)"}else{d.vml.image.shape.style.clip="rect("+f.T+"px "+f.R+"px "+f.B+"px "+f.L+"px)"}},figurePercentage:function(d,c,f,a){var b,e;e=true;b=(f=="X");switch(a){case"left":case"top":d[f]=0;break;case"center":d[f]=0.5;break;case"right":case"bottom":d[f]=1;break;default:if(a.search("%")!=-1){d[f]=parseInt(a,10)/100}else{e=false}}d[f]=Math.ceil(e?((c[b?"W":"H"]*d[f])-(c[b?"w":"h"]*d[f])):parseInt(a,10));if(d[f]%2===0){d[f]++}return d[f]},fixPng:function(c){c.style.behavior="none";var g,b,f,a,d;if(c.nodeName=="BODY"||c.nodeName=="TD"||c.nodeName=="TR"){return}c.isImg=false;if(c.nodeName=="IMG"){if(c.src.toLowerCase().search(/\.png$/)!=-1){c.isImg=true;c.style.visibility="hidden"}else{return}}else{if(c.currentStyle.backgroundImage.toLowerCase().search(".png")==-1){return}}g=DD_belatedPNG;c.vml={color:{},image:{}};b={shape:{},fill:{}};for(a in c.vml){if(c.vml.hasOwnProperty(a)){for(d in b){if(b.hasOwnProperty(d)){f=g.ns+":"+d;c.vml[a][d]=document.createElement(f)}}c.vml[a].shape.stroked=false;c.vml[a].shape.appendChild(c.vml[a].fill);c.parentNode.insertBefore(c.vml[a].shape,c)}}c.vml.image.shape.fillcolor="none";c.vml.image.fill.type="tile";c.vml.color.fill.on=false;g.attachHandlers(c);g.giveLayout(c);g.giveLayout(c.offsetParent);c.vmlInitiated=true;g.applyVML(c)}};try{document.execCommand("BackgroundImageCache",false,true)}catch(r){}DD_belatedPNG.createVmlNameSpace();DD_belatedPNG.createVmlStyleSheet(); web2py-1.99.7.orig/applications/admin/static/plugin_jqmobile/jquery.mobile-1.0.min.css0000644000175000017500000014000111724764235027263 0ustar josejose/*! jQuery Mobile v1.0 jquerymobile.com | jquery.org/license */ .ui-bar-a{border:1px solid #2a2a2a;background:#111;color:#fff;font-weight:bold;text-shadow:0 -1px 1px #000;background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#111));background-image:-webkit-linear-gradient(#3c3c3c,#111);background-image:-moz-linear-gradient(#3c3c3c,#111);background-image:-ms-linear-gradient(#3c3c3c,#111);background-image:-o-linear-gradient(#3c3c3c,#111);background-image:linear-gradient(#3c3c3c,#111)}.ui-bar-a,.ui-bar-a input,.ui-bar-a select,.ui-bar-a textarea,.ui-bar-a button{font-family:Helvetica,Arial,sans-serif}.ui-bar-a .ui-link-inherit{color:#fff}.ui-bar-a .ui-link{color:#7cc4e7;font-weight:bold}.ui-bar-a .ui-link:hover{color:#2489ce}.ui-bar-a .ui-link:active{color:#2489ce}.ui-bar-a .ui-link:visited{color:#2489ce}.ui-body-a,.ui-dialog.ui-overlay-a{border:1px solid #2a2a2a;background:#222;color:#fff;text-shadow:0 1px 0 #000;font-weight:normal;background-image:-webkit-gradient(linear,left top,left bottom,from(#666),to(#222));background-image:-webkit-linear-gradient(#666,#222);background-image:-moz-linear-gradient(#666,#222);background-image:-ms-linear-gradient(#666,#222);background-image:-o-linear-gradient(#666,#222);background-image:linear-gradient(#666,#222)}.ui-body-a,.ui-body-a input,.ui-body-a select,.ui-body-a textarea,.ui-body-a button{font-family:Helvetica,Arial,sans-serif}.ui-body-a .ui-link-inherit{color:#fff}.ui-body-a .ui-link{color:#2489ce;font-weight:bold}.ui-body-a .ui-link:hover{color:#2489ce}.ui-body-a .ui-link:active{color:#2489ce}.ui-body-a .ui-link:visited{color:#2489ce}.ui-btn-up-a{border:1px solid #222;background:#333;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #000;background-image:-webkit-gradient(linear,left top,left bottom,from(#555),to(#333));background-image:-webkit-linear-gradient(#555,#333);background-image:-moz-linear-gradient(#555,#333);background-image:-ms-linear-gradient(#555,#333);background-image:-o-linear-gradient(#555,#333);background-image:linear-gradient(#555,#333)}.ui-btn-up-a a.ui-link-inherit{color:#fff}.ui-btn-hover-a{border:1px solid #000;background:#444;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #000;background-image:-webkit-gradient(linear,left top,left bottom,from(#666),to(#444));background-image:-webkit-linear-gradient(#666,#444);background-image:-moz-linear-gradient(#666,#444);background-image:-ms-linear-gradient(#666,#444);background-image:-o-linear-gradient(#666,#444);background-image:linear-gradient(#666,#444)}.ui-btn-hover-a a.ui-link-inherit{color:#fff}.ui-btn-down-a{border:1px solid #000;background:#3d3d3d;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #000;background-image:-webkit-gradient(linear,left top,left bottom,from(#333),to(#5a5a5a));background-image:-webkit-linear-gradient(#333,#5a5a5a);background-image:-moz-linear-gradient(#333,#5a5a5a);background-image:-ms-linear-gradient(#333,#5a5a5a);background-image:-o-linear-gradient(#333,#5a5a5a);background-image:linear-gradient(#333,#5a5a5a)}.ui-btn-down-a a.ui-link-inherit{color:#fff}.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-b{border:1px solid #456f9a;background:#5e87b0;color:#fff;font-weight:bold;text-shadow:0 -1px 1px #254f7a;background-image:-webkit-gradient(linear,left top,left bottom,from(#81a8ce),to(#5e87b0));background-image:-webkit-linear-gradient(#81a8ce,#5e87b0);background-image:-moz-linear-gradient(#81a8ce,#5e87b0);background-image:-ms-linear-gradient(#81a8ce,#5e87b0);background-image:-o-linear-gradient(#81a8ce,#5e87b0);background-image:linear-gradient(#81a8ce,#5e87b0)}.ui-bar-b,.ui-bar-b input,.ui-bar-b select,.ui-bar-b textarea,.ui-bar-b button{font-family:Helvetica,Arial,sans-serif}.ui-bar-b .ui-link-inherit{color:#fff}.ui-bar-b .ui-link{color:#ddf0f8;font-weight:bold}.ui-bar-b .ui-link:hover{color:#ddf0f8}.ui-bar-b .ui-link:active{color:#ddf0f8}.ui-bar-b .ui-link:visited{color:#ddf0f8}.ui-body-b,.ui-dialog.ui-overlay-b{border:1px solid #c6c6c6;background:#ccc;color:#333;text-shadow:0 1px 0 #fff;font-weight:normal;background-image:-webkit-gradient(linear,left top,left bottom,from(#e6e6e6),to(#ccc));background-image:-webkit-linear-gradient(#e6e6e6,#ccc);background-image:-moz-linear-gradient(#e6e6e6,#ccc);background-image:-ms-linear-gradient(#e6e6e6,#ccc);background-image:-o-linear-gradient(#e6e6e6,#ccc);background-image:linear-gradient(#e6e6e6,#ccc)}.ui-body-b,.ui-body-b input,.ui-body-b select,.ui-body-b textarea,.ui-body-b button{font-family:Helvetica,Arial,sans-serif}.ui-body-b .ui-link-inherit{color:#333}.ui-body-b .ui-link{color:#2489ce;font-weight:bold}.ui-body-b .ui-link:hover{color:#2489ce}.ui-body-b .ui-link:active{color:#2489ce}.ui-body-b .ui-link:visited{color:#2489ce}.ui-btn-up-b{border:1px solid #145072;background:#2567ab;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #145072;background-image:-webkit-gradient(linear,left top,left bottom,from(#5f9cc5),to(#396b9e));background-image:-webkit-linear-gradient(#5f9cc5,#396b9e);background-image:-moz-linear-gradient(#5f9cc5,#396b9e);background-image:-ms-linear-gradient(#5f9cc5,#396b9e);background-image:-o-linear-gradient(#5f9cc5,#396b9e);background-image:linear-gradient(#5f9cc5,#396b9e)}.ui-btn-up-b a.ui-link-inherit{color:#fff}.ui-btn-hover-b{border:1px solid #00516e;background:#4b88b6;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #014d68;background-image:-webkit-gradient(linear,left top,left bottom,from(#72b0d4),to(#4b88b6));background-image:-webkit-linear-gradient(#72b0d4,#4b88b6);background-image:-moz-linear-gradient(#72b0d4,#4b88b6);background-image:-ms-linear-gradient(#72b0d4,#4b88b6);background-image:-o-linear-gradient(#72b0d4,#4b88b6);background-image:linear-gradient(#72b0d4,#4b88b6)}.ui-btn-hover-b a.ui-link-inherit{color:#fff}.ui-btn-down-b{border:1px solid #225377;background:#4e89c5;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #225377;background-image:-webkit-gradient(linear,left top,left bottom,from(#396b9e),to(#4e89c5));background-image:-webkit-linear-gradient(#396b9e,#4e89c5);background-image:-moz-linear-gradient(#396b9e,#4e89c5);background-image:-ms-linear-gradient(#396b9e,#4e89c5);background-image:-o-linear-gradient(#396b9e,#4e89c5);background-image:linear-gradient(#396b9e,#4e89c5)}.ui-btn-down-b a.ui-link-inherit{color:#fff}.ui-btn-up-b,.ui-btn-hover-b,.ui-btn-down-b{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-c{border:1px solid #b3b3b3;background:#e9eaeb;color:#3e3e3e;font-weight:bold;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0f0),to(#e9eaeb));background-image:-webkit-linear-gradient(#f0f0f0,#e9eaeb);background-image:-moz-linear-gradient(#f0f0f0,#e9eaeb);background-image:-ms-linear-gradient(#f0f0f0,#e9eaeb);background-image:-o-linear-gradient(#f0f0f0,#e9eaeb);background-image:linear-gradient(#f0f0f0,#e9eaeb)}.ui-bar-c .ui-link-inherit{color:#3e3e3e}.ui-bar-c .ui-link{color:#7cc4e7;font-weight:bold}.ui-bar-c .ui-link:hover{color:#2489ce}.ui-bar-c .ui-link:active{color:#2489ce}.ui-bar-c .ui-link:visited{color:#2489ce}.ui-bar-c,.ui-bar-c input,.ui-bar-c select,.ui-bar-c textarea,.ui-bar-c button{font-family:Helvetica,Arial,sans-serif}.ui-body-c,.ui-dialog.ui-overlay-c{border:1px solid #b3b3b3;color:#333;text-shadow:0 1px 0 #fff;background:#f0f0f0;background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#ddd));background-image:-webkit-linear-gradient(#eee,#ddd);background-image:-moz-linear-gradient(#eee,#ddd);background-image:-ms-linear-gradient(#eee,#ddd);background-image:-o-linear-gradient(#eee,#ddd);background-image:linear-gradient(#eee,#ddd)}.ui-body-c,.ui-body-c input,.ui-body-c select,.ui-body-c textarea,.ui-body-c button{font-family:Helvetica,Arial,sans-serif}.ui-body-c .ui-link-inherit{color:#333}.ui-body-c .ui-link{color:#2489ce;font-weight:bold}.ui-body-c .ui-link:hover{color:#2489ce}.ui-body-c .ui-link:active{color:#2489ce}.ui-body-c .ui-link:visited{color:#2489ce}.ui-btn-up-c{border:1px solid #ccc;background:#eee;font-weight:bold;color:#444;text-shadow:0 1px 1px #f6f6f6;background-image:-webkit-gradient(linear,left top,left bottom,from(#fdfdfd),to(#eee));background-image:-webkit-linear-gradient(#fdfdfd,#eee);background-image:-moz-linear-gradient(#fdfdfd,#eee);background-image:-ms-linear-gradient(#fdfdfd,#eee);background-image:-o-linear-gradient(#fdfdfd,#eee);background-image:linear-gradient(#fdfdfd,#eee)}.ui-btn-up-c a.ui-link-inherit{color:#2f3e46}.ui-btn-hover-c{border:1px solid #bbb;background:#dadada;font-weight:bold;color:#101010;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#ededed),to(#dadada));background-image:-webkit-linear-gradient(#ededed,#dadada);background-image:-moz-linear-gradient(#ededed,#dadada);background-image:-ms-linear-gradient(#ededed,#dadada);background-image:-o-linear-gradient(#ededed,#dadada);background-image:linear-gradient(#ededed,#dadada)}.ui-btn-hover-c a.ui-link-inherit{color:#2f3e46}.ui-btn-down-c{border:1px solid #808080;background:#fdfdfd;font-weight:bold;color:#111;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#fdfdfd));background-image:-webkit-linear-gradient(#eee,#fdfdfd);background-image:-moz-linear-gradient(#eee,#fdfdfd);background-image:-ms-linear-gradient(#eee,#fdfdfd);background-image:-o-linear-gradient(#eee,#fdfdfd);background-image:linear-gradient(#eee,#fdfdfd)}.ui-btn-down-c a.ui-link-inherit{color:#2f3e46}.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-d{border:1px solid #ccc;background:#bbb;color:#333;text-shadow:0 1px 0 #eee;background-image:-webkit-gradient(linear,left top,left bottom,from(#ddd),to(#bbb));background-image:-webkit-linear-gradient(#ddd,#bbb);background-image:-moz-linear-gradient(#ddd,#bbb);background-image:-ms-linear-gradient(#ddd,#bbb);background-image:-o-linear-gradient(#ddd,#bbb);background-image:linear-gradient(#ddd,#bbb)}.ui-bar-d,.ui-bar-d input,.ui-bar-d select,.ui-bar-d textarea,.ui-bar-d button{font-family:Helvetica,Arial,sans-serif}.ui-bar-d .ui-link-inherit{color:#333}.ui-bar-d .ui-link{color:#2489ce;font-weight:bold}.ui-bar-d .ui-link:hover{color:#2489ce}.ui-bar-d .ui-link:active{color:#2489ce}.ui-bar-d .ui-link:visited{color:#2489ce}.ui-body-d,.ui-dialog.ui-overlay-d{border:1px solid #ccc;color:#333;text-shadow:0 1px 0 #fff;background:#fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#fff));background-image:-webkit-linear-gradient(#fff,#fff);background-image:-moz-linear-gradient(#fff,#fff);background-image:-ms-linear-gradient(#fff,#fff);background-image:-o-linear-gradient(#fff,#fff);background-image:linear-gradient(#fff,#fff)}.ui-body-d,.ui-body-d input,.ui-body-d select,.ui-body-d textarea,.ui-body-d button{font-family:Helvetica,Arial,sans-serif}.ui-body-d .ui-link-inherit{color:#333}.ui-body-d .ui-link{color:#2489ce;font-weight:bold}.ui-body-d .ui-link:hover{color:#2489ce}.ui-body-d .ui-link:active{color:#2489ce}.ui-body-d .ui-link:visited{color:#2489ce}.ui-btn-up-d{border:1px solid #ccc;background:#fff;font-weight:bold;color:#444;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#fff));background-image:-webkit-linear-gradient(#fff,#fff);background-image:-moz-linear-gradient(#fff,#fff);background-image:-ms-linear-gradient(#fff,#fff);background-image:-o-linear-gradient(#fff,#fff);background-image:linear-gradient(#fff,#fff)}.ui-btn-up-d a.ui-link-inherit{color:#333}.ui-btn-hover-d{border:1px solid #aaa;background:#eee;font-weight:bold;color:#222;cursor:pointer;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fdfdfd),to(#eee));background-image:-webkit-linear-gradient(#fdfdfd,#eee);background-image:-moz-linear-gradient(#fdfdfd,#eee);background-image:-ms-linear-gradient(#fdfdfd,#eee);background-image:-o-linear-gradient(#fdfdfd,#eee);background-image:linear-gradient(#fdfdfd,#eee)}.ui-btn-hover-d a.ui-link-inherit{color:#222}.ui-btn-down-d{border:1px solid #aaa;background:#fff;font-weight:bold;color:#111;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#fff));background-image:-webkit-linear-gradient(#eee,#fff);background-image:-moz-linear-gradient(#eee,#fff);background-image:-ms-linear-gradient(#eee,#fff);background-image:-o-linear-gradient(#eee,#fff);background-image:linear-gradient(#eee,#fff)}.ui-btn-down-d a.ui-link-inherit{color:#111}.ui-btn-up-d,.ui-btn-hover-d,.ui-btn-down-d{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-e{border:1px solid #f7c942;background:#fadb4e;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fceda7),to(#fadb4e));background-image:-webkit-linear-gradient(#fceda7,#fadb4e);background-image:-moz-linear-gradient(#fceda7,#fadb4e);background-image:-ms-linear-gradient(#fceda7,#fadb4e);background-image:-o-linear-gradient(#fceda7,#fadb4e);background-image:linear-gradient(#fceda7,#fadb4e)}.ui-bar-e,.ui-bar-e input,.ui-bar-e select,.ui-bar-e textarea,.ui-bar-e button{font-family:Helvetica,Arial,sans-serif}.ui-bar-e .ui-link-inherit{color:#333}.ui-bar-e .ui-link{color:#2489ce;font-weight:bold}.ui-bar-e .ui-link:hover{color:#2489ce}.ui-bar-e .ui-link:active{color:#2489ce}.ui-bar-e .ui-link:visited{color:#2489ce}.ui-body-e,.ui-dialog.ui-overlay-e{border:1px solid #f7c942;color:#333;text-shadow:0 1px 0 #fff;background:#faeb9e;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#faeb9e));background-image:-webkit-linear-gradient(#fff,#faeb9e);background-image:-moz-linear-gradient(#fff,#faeb9e);background-image:-ms-linear-gradient(#fff,#faeb9e);background-image:-o-linear-gradient(#fff,#faeb9e);background-image:linear-gradient(#fff,#faeb9e)}.ui-body-e,.ui-body-e input,.ui-body-e select,.ui-body-e textarea,.ui-body-e button{font-family:Helvetica,Arial,sans-serif}.ui-body-e .ui-link-inherit{color:#333}.ui-body-e .ui-link{color:#2489ce;font-weight:bold}.ui-body-e .ui-link:hover{color:#2489ce}.ui-body-e .ui-link:active{color:#2489ce}.ui-body-e .ui-link:visited{color:#2489ce}.ui-btn-up-e{border:1px solid #f7c942;background:#fadb4e;font-weight:bold;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fceda7),to(#fadb4e));background-image:-webkit-linear-gradient(#fceda7,#fadb4e);background-image:-moz-linear-gradient(#fceda7,#fadb4e);background-image:-ms-linear-gradient(#fceda7,#fadb4e);background-image:-o-linear-gradient(#fceda7,#fadb4e);background-image:linear-gradient(#fceda7,#fadb4e)}.ui-btn-up-e a.ui-link-inherit{color:#333}.ui-btn-hover-e{border:1px solid #e79952;background:#fbe26f;font-weight:bold;color:#111;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf0b5),to(#fbe26f));background-image:-webkit-linear-gradient(#fcf0b5,#fbe26f);background-image:-moz-linear-gradient(#fcf0b5,#fbe26f);background-image:-ms-linear-gradient(#fcf0b5,#fbe26f);background-image:-o-linear-gradient(#fcf0b5,#fbe26f);background-image:linear-gradient(#fcf0b5,#fbe26f)}.ui-btn-hover-e a.ui-link-inherit{color:#333}.ui-btn-down-e{border:1px solid #f7c942;background:#fceda7;font-weight:bold;color:#111;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fadb4e),to(#fceda7));background-image:-webkit-linear-gradient(#fadb4e,#fceda7);background-image:-moz-linear-gradient(#fadb4e,#fceda7);background-image:-ms-linear-gradient(#fadb4e,#fceda7);background-image:-o-linear-gradient(#fadb4e,#fceda7);background-image:linear-gradient(#fadb4e,#fceda7)}.ui-btn-down-e a.ui-link-inherit{color:#333}.ui-btn-up-e,.ui-btn-hover-e,.ui-btn-down-e{font-family:Helvetica,Arial,sans-serif;text-decoration:none}a.ui-link-inherit{text-decoration:none!important}.ui-btn-active{border:1px solid #155678;background:#4596ce;font-weight:bold;color:#fff;cursor:pointer;text-shadow:0 -1px 1px #145072;text-decoration:none;background-image:-webkit-gradient(linear,left top,left bottom,from(#85bae4),to(#5393c5));background-image:-webkit-linear-gradient(#85bae4,#5393c5);background-image:-moz-linear-gradient(#85bae4,#5393c5);background-image:-ms-linear-gradient(#85bae4,#5393c5);background-image:-o-linear-gradient(#85bae4,#5393c5);background-image:linear-gradient(#85bae4,#5393c5);font-family:Helvetica,Arial,sans-serif}.ui-btn-active a.ui-link-inherit{color:#fff}.ui-btn-inner{border-top:1px solid #fff;border-color:rgba(255,255,255,.3)}.ui-corner-tl{-moz-border-radius-topleft:.6em;-webkit-border-top-left-radius:.6em;border-top-left-radius:.6em}.ui-corner-tr{-moz-border-radius-topright:.6em;-webkit-border-top-right-radius:.6em;border-top-right-radius:.6em}.ui-corner-bl{-moz-border-radius-bottomleft:.6em;-webkit-border-bottom-left-radius:.6em;border-bottom-left-radius:.6em}.ui-corner-br{-moz-border-radius-bottomright:.6em;-webkit-border-bottom-right-radius:.6em;border-bottom-right-radius:.6em}.ui-corner-top{-moz-border-radius-topleft:.6em;-webkit-border-top-left-radius:.6em;border-top-left-radius:.6em;-moz-border-radius-topright:.6em;-webkit-border-top-right-radius:.6em;border-top-right-radius:.6em}.ui-corner-bottom{-moz-border-radius-bottomleft:.6em;-webkit-border-bottom-left-radius:.6em;border-bottom-left-radius:.6em;-moz-border-radius-bottomright:.6em;-webkit-border-bottom-right-radius:.6em;border-bottom-right-radius:.6em}.ui-corner-right{-moz-border-radius-topright:.6em;-webkit-border-top-right-radius:.6em;border-top-right-radius:.6em;-moz-border-radius-bottomright:.6em;-webkit-border-bottom-right-radius:.6em;border-bottom-right-radius:.6em}.ui-corner-left{-moz-border-radius-topleft:.6em;-webkit-border-top-left-radius:.6em;border-top-left-radius:.6em;-moz-border-radius-bottomleft:.6em;-webkit-border-bottom-left-radius:.6em;border-bottom-left-radius:.6em}.ui-corner-all{-moz-border-radius:.6em;-webkit-border-radius:.6em;border-radius:.6em}.ui-corner-none{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.ui-br{border-bottom:#828282;border-bottom:rgba(130,130,130,.3);border-bottom-width:1px;border-bottom-style:solid}.ui-disabled{opacity:.3}.ui-disabled,.ui-disabled a{pointer-events:none;cursor:default}.ui-icon,.ui-icon-searchfield:after{background:#666;background:rgba(0,0,0,.4);background-image:url(images/icons-18-white.png);background-repeat:no-repeat;-moz-border-radius:9px;-webkit-border-radius:9px;border-radius:9px}.ui-icon-alt{background:#fff;background:rgba(255,255,255,.3);background-image:url(images/icons-18-black.png);background-repeat:no-repeat}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-resolution:240dpi){.ui-icon-plus,.ui-icon-minus,.ui-icon-delete,.ui-icon-arrow-r,.ui-icon-arrow-l,.ui-icon-arrow-u,.ui-icon-arrow-d,.ui-icon-check,.ui-icon-gear,.ui-icon-refresh,.ui-icon-forward,.ui-icon-back,.ui-icon-grid,.ui-icon-star,.ui-icon-alert,.ui-icon-info,.ui-icon-home,.ui-icon-search,.ui-icon-searchfield:after,.ui-icon-checkbox-off,.ui-icon-checkbox-on,.ui-icon-radio-off,.ui-icon-radio-on{background-image:url(images/icons-36-white.png);-moz-background-size:776px 18px;-o-background-size:776px 18px;-webkit-background-size:776px 18px;background-size:776px 18px}.ui-icon-alt{background-image:url(images/icons-36-black.png)}}.ui-icon-plus{background-position:-0 50%}.ui-icon-minus{background-position:-36px 50%}.ui-icon-delete{background-position:-72px 50%}.ui-icon-arrow-r{background-position:-108px 50%}.ui-icon-arrow-l{background-position:-144px 50%}.ui-icon-arrow-u{background-position:-180px 50%}.ui-icon-arrow-d{background-position:-216px 50%}.ui-icon-check{background-position:-252px 50%}.ui-icon-gear{background-position:-288px 50%}.ui-icon-refresh{background-position:-324px 50%}.ui-icon-forward{background-position:-360px 50%}.ui-icon-back{background-position:-396px 50%}.ui-icon-grid{background-position:-432px 50%}.ui-icon-star{background-position:-468px 50%}.ui-icon-alert{background-position:-504px 50%}.ui-icon-info{background-position:-540px 50%}.ui-icon-home{background-position:-576px 50%}.ui-icon-search,.ui-icon-searchfield:after{background-position:-612px 50%}.ui-icon-checkbox-off{background-position:-684px 50%}.ui-icon-checkbox-on{background-position:-648px 50%}.ui-icon-radio-off{background-position:-756px 50%}.ui-icon-radio-on{background-position:-720px 50%}.ui-checkbox .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.ui-icon-checkbox-off,.ui-icon-radio-off{background-color:transparent}.ui-checkbox-on .ui-icon,.ui-radio-on .ui-icon{background-color:#4596ce}.ui-icon-loading{background-image:url(images/ajax-loader.png);width:40px;height:40px;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;background-size:35px 35px}.ui-btn-corner-tl{-moz-border-radius-topleft:1em;-webkit-border-top-left-radius:1em;border-top-left-radius:1em}.ui-btn-corner-tr{-moz-border-radius-topright:1em;-webkit-border-top-right-radius:1em;border-top-right-radius:1em}.ui-btn-corner-bl{-moz-border-radius-bottomleft:1em;-webkit-border-bottom-left-radius:1em;border-bottom-left-radius:1em}.ui-btn-corner-br{-moz-border-radius-bottomright:1em;-webkit-border-bottom-right-radius:1em;border-bottom-right-radius:1em}.ui-btn-corner-top{-moz-border-radius-topleft:1em;-webkit-border-top-left-radius:1em;border-top-left-radius:1em;-moz-border-radius-topright:1em;-webkit-border-top-right-radius:1em;border-top-right-radius:1em}.ui-btn-corner-bottom{-moz-border-radius-bottomleft:1em;-webkit-border-bottom-left-radius:1em;border-bottom-left-radius:1em;-moz-border-radius-bottomright:1em;-webkit-border-bottom-right-radius:1em;border-bottom-right-radius:1em}.ui-btn-corner-right{-moz-border-radius-topright:1em;-webkit-border-top-right-radius:1em;border-top-right-radius:1em;-moz-border-radius-bottomright:1em;-webkit-border-bottom-right-radius:1em;border-bottom-right-radius:1em}.ui-btn-corner-left{-moz-border-radius-topleft:1em;-webkit-border-top-left-radius:1em;border-top-left-radius:1em;-moz-border-radius-bottomleft:1em;-webkit-border-bottom-left-radius:1em;border-bottom-left-radius:1em}.ui-btn-corner-all{-moz-border-radius:1em;-webkit-border-radius:1em;border-radius:1em}.ui-corner-tl,.ui-corner-tr,.ui-corner-bl,.ui-corner-br,.ui-corner-top,.ui-corner-bottom,.ui-corner-right,.ui-corner-left,.ui-corner-all,.ui-btn-corner-tl,.ui-btn-corner-tr,.ui-btn-corner-bl,.ui-btn-corner-br,.ui-btn-corner-top,.ui-btn-corner-bottom,.ui-btn-corner-right,.ui-btn-corner-left,.ui-btn-corner-all{-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.ui-overlay{background:#666;opacity:.5;filter:Alpha(Opacity=50);position:absolute;width:100%;height:100%}.ui-overlay-shadow{-moz-box-shadow:0 0 12px rgba(0,0,0,.6);-webkit-box-shadow:0 0 12px rgba(0,0,0,.6);box-shadow:0 0 12px rgba(0,0,0,.6)}.ui-shadow{-moz-box-shadow:0 1px 4px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 4px rgba(0,0,0,.3);box-shadow:0 1px 4px rgba(0,0,0,.3)}.ui-bar-a .ui-shadow,.ui-bar-b .ui-shadow,.ui-bar-c .ui-shadow{-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.ui-shadow-inset{-moz-box-shadow:inset 0 1px 4px rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 4px rgba(0,0,0,.2);box-shadow:inset 0 1px 4px rgba(0,0,0,.2)}.ui-icon-shadow{-moz-box-shadow:0 1px 0 rgba(255,255,255,.4);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.4);box-shadow:0 1px 0 rgba(255,255,255,.4)}.ui-focus{-moz-box-shadow:0 0 12px #387bbe;-webkit-box-shadow:0 0 12px #387bbe;box-shadow:0 0 12px #387bbe}.ui-mobile-nosupport-boxshadow *{-moz-box-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui-mobile-nosupport-boxshadow .ui-focus{outline-width:2px}.ui-mobile,.ui-mobile body{height:100%}.ui-mobile fieldset,.ui-page{padding:0;margin:0}.ui-mobile a img,.ui-mobile fieldset{border:0}.ui-mobile-viewport{margin:0;overflow-x:visible;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}body.ui-mobile-viewport,div.ui-mobile-viewport{overflow-x:hidden}.ui-mobile [data-role=page],.ui-mobile [data-role=dialog],.ui-page{top:0;left:0;width:100%;min-height:100%;position:absolute;display:none;border:0}.ui-mobile .ui-page-active{display:block;overflow:visible}.ui-page{outline:0}@media screen and (orientation:portrait){.ui-mobile,.ui-mobile .ui-page{min-height:420px}}@media screen and (orientation:landscape){.ui-mobile,.ui-mobile .ui-page{min-height:300px}}.ui-page.ui-mobile-touch-overflow,.ui-mobile-touch-overflow.ui-native-fixed .ui-content{overflow:auto;height:100%;-webkit-overflow-scrolling:touch;-moz-overflow-scrolling:touch;-o-overflow-scrolling:touch;-ms-overflow-scrolling:touch;overflow-scrolling:touch}.ui-page.ui-mobile-touch-overflow,.ui-page.ui-mobile-touch-overflow *{-webkit-transform:rotateY(0)}.ui-page.ui-mobile-pre-transition{display:block}.ui-loading .ui-mobile-viewport{overflow:hidden!important}.ui-loading .ui-loader{display:block}.ui-loading .ui-page{overflow:hidden}.ui-loader{display:none;position:absolute;opacity:.85;z-index:100;left:50%;width:200px;margin-left:-130px;margin-top:-35px;padding:10px 30px}.ui-loader h1{font-size:15px;text-align:center}.ui-loader .ui-icon{position:static;display:block;opacity:.9;margin:0 auto;width:35px;height:35px;background-color:transparent}.ui-mobile-rendering>*{visibility:hidden}.ui-bar,.ui-body{position:relative;padding:.4em 15px;overflow:hidden;display:block;clear:both}.ui-bar{font-size:16px;margin:0}.ui-bar h1,.ui-bar h2,.ui-bar h3,.ui-bar h4,.ui-bar h5,.ui-bar h6{margin:0;padding:0;font-size:16px;display:inline-block}.ui-header,.ui-footer{display:block}.ui-page .ui-header,.ui-page .ui-footer{position:relative}.ui-header .ui-btn-left{position:absolute;left:10px;top:.4em}.ui-header .ui-btn-right{position:absolute;right:10px;top:.4em}.ui-header .ui-title,.ui-footer .ui-title{min-height:1.1em;text-align:center;font-size:16px;display:block;margin:.6em 90px .8em;padding:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;outline:0!important}.ui-footer .ui-title{margin:.6em 15px .8em}.ui-content{border-width:0;overflow:visible;overflow-x:hidden;padding:15px}.ui-page-fullscreen .ui-content{padding:0}.ui-mobile-touch-overflow.ui-page.ui-native-fixed,.ui-mobile-touch-overflow.ui-page.ui-native-fullscreen{overflow:visible}.ui-mobile-touch-overflow.ui-native-fixed .ui-header,.ui-mobile-touch-overflow.ui-native-fixed .ui-footer{position:fixed;left:0;right:0;top:0;z-index:200}.ui-mobile-touch-overflow.ui-page.ui-native-fixed .ui-footer{top:auto;bottom:0}.ui-mobile-touch-overflow.ui-native-fixed .ui-content{padding-top:2.5em;padding-bottom:3em;top:0;bottom:0;height:auto;position:absolute}.ui-mobile-touch-overflow.ui-native-fullscreen .ui-content{padding-top:0;padding-bottom:0}.ui-mobile-touch-overflow.ui-native-fullscreen .ui-header,.ui-mobile-touch-overflow.ui-native-fullscreen .ui-footer{opacity:.9}.ui-native-bars-hidden{display:none}.ui-icon{width:18px;height:18px}.ui-fullscreen img{max-width:100%}.ui-nojs{position:absolute;left:-9999px}.ui-hide-label label,.ui-hidden-accessible{position:absolute!important;left:-9999px;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.spin{-webkit-transform:rotate(360deg);-webkit-animation-name:spin;-webkit-animation-duration:1s;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:linear}@-webkit-keyframes spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}.in,.out{-webkit-animation-timing-function:ease-in-out;-webkit-animation-duration:350ms}.slide.out{-webkit-transform:translateX(-100%);-webkit-animation-name:slideouttoleft}.slide.in{-webkit-transform:translateX(0);-webkit-animation-name:slideinfromright}.slide.out.reverse{-webkit-transform:translateX(100%);-webkit-animation-name:slideouttoright}.slide.in.reverse{-webkit-transform:translateX(0);-webkit-animation-name:slideinfromleft}.slideup.out{-webkit-animation-name:dontmove;z-index:0}.slideup.in{-webkit-transform:translateY(0);-webkit-animation-name:slideinfrombottom;z-index:10}.slideup.in.reverse{z-index:0;-webkit-animation-name:dontmove}.slideup.out.reverse{-webkit-transform:translateY(100%);z-index:10;-webkit-animation-name:slideouttobottom}.slidedown.out{-webkit-animation-name:dontmove;z-index:0}.slidedown.in{-webkit-transform:translateY(0);-webkit-animation-name:slideinfromtop;z-index:10}.slidedown.in.reverse{z-index:0;-webkit-animation-name:dontmove}.slidedown.out.reverse{-webkit-transform:translateY(-100%);z-index:10;-webkit-animation-name:slideouttotop}@-webkit-keyframes slideinfromright{from{-webkit-transform:translateX(100%)}to{-webkit-transform:translateX(0)}}@-webkit-keyframes slideinfromleft{from{-webkit-transform:translateX(-100%)}to{-webkit-transform:translateX(0)}}@-webkit-keyframes slideouttoleft{from{-webkit-transform:translateX(0)}to{-webkit-transform:translateX(-100%)}}@-webkit-keyframes slideouttoright{from{-webkit-transform:translateX(0)}to{-webkit-transform:translateX(100%)}}@-webkit-keyframes slideinfromtop{from{-webkit-transform:translateY(-100%)}to{-webkit-transform:translateY(0)}}@-webkit-keyframes slideinfrombottom{from{-webkit-transform:translateY(100%)}to{-webkit-transform:translateY(0)}}@-webkit-keyframes slideouttobottom{from{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(100%)}}@-webkit-keyframes slideouttotop{from{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(-100%)}}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeout{from{opacity:1}to{opacity:0}}.fade.out{z-index:0;-webkit-animation-name:fadeout}.fade.in{opacity:1;z-index:10;-webkit-animation-name:fadein}.viewport-flip{-webkit-perspective:1000;position:absolute}.ui-mobile-viewport-transitioning,.ui-mobile-viewport-transitioning .ui-page{width:100%;height:100%;overflow:hidden}.flip{-webkit-animation-duration:.65s;-webkit-backface-visibility:hidden;-webkit-transform:translateX(0)}.flip.out{-webkit-transform:rotateY(-180deg) scale(.8);-webkit-animation-name:flipouttoleft}.flip.in{-webkit-transform:rotateY(0) scale(1);-webkit-animation-name:flipinfromleft}.flip.out.reverse{-webkit-transform:rotateY(180deg) scale(.8);-webkit-animation-name:flipouttoright}.flip.in.reverse{-webkit-transform:rotateY(0) scale(1);-webkit-animation-name:flipinfromright}@-webkit-keyframes flipinfromright{from{-webkit-transform:rotateY(-180deg) scale(.8)}to{-webkit-transform:rotateY(0) scale(1)}}@-webkit-keyframes flipinfromleft{from{-webkit-transform:rotateY(180deg) scale(.8)}to{-webkit-transform:rotateY(0) scale(1)}}@-webkit-keyframes flipouttoleft{from{-webkit-transform:rotateY(0) scale(1)}to{-webkit-transform:rotateY(-180deg) scale(.8)}}@-webkit-keyframes flipouttoright{from{-webkit-transform:rotateY(0) scale(1)}to{-webkit-transform:rotateY(180deg) scale(.8)}}@-webkit-keyframes dontmove{from{opacity:1}to{opacity:1}}.pop{-webkit-transform-origin:50% 50%}.pop.in{-webkit-transform:scale(1);opacity:1;-webkit-animation-name:popin;z-index:10}.pop.in.reverse{z-index:0;-webkit-animation-name:dontmove}.pop.out.reverse{-webkit-transform:scale(.2);opacity:0;-webkit-animation-name:popout;z-index:10}@-webkit-keyframes popin{from{-webkit-transform:scale(.2);opacity:0}to{-webkit-transform:scale(1);opacity:1}}@-webkit-keyframes popout{from{-webkit-transform:scale(1);opacity:1}to{-webkit-transform:scale(.2);opacity:0}}.ui-grid-a,.ui-grid-b,.ui-grid-c,.ui-grid-d{overflow:hidden}.ui-block-a,.ui-block-b,.ui-block-c,.ui-block-d,.ui-block-e{margin:0;padding:0;border:0;float:left;min-height:1px}.ui-grid-solo .ui-block-a{width:100%;float:none}.ui-grid-a .ui-block-a,.ui-grid-a .ui-block-b{width:50%}.ui-grid-a .ui-block-a{clear:left}.ui-grid-b .ui-block-a,.ui-grid-b .ui-block-b,.ui-grid-b .ui-block-c{width:33.333%}.ui-grid-b .ui-block-a{clear:left}.ui-grid-c .ui-block-a,.ui-grid-c .ui-block-b,.ui-grid-c .ui-block-c,.ui-grid-c .ui-block-d{width:25%}.ui-grid-c .ui-block-a{clear:left}.ui-grid-d .ui-block-a,.ui-grid-d .ui-block-b,.ui-grid-d .ui-block-c,.ui-grid-d .ui-block-d,.ui-grid-d .ui-block-e{width:20%}.ui-grid-d .ui-block-a{clear:left}.ui-header,.ui-footer,.ui-page-fullscreen .ui-header,.ui-page-fullscreen .ui-footer{position:absolute;overflow:hidden;width:100%;border-left-width:0;border-right-width:0}.ui-header-fixed,.ui-footer-fixed{z-index:1000;-webkit-transform:translateZ(0)}.ui-footer-duplicate,.ui-page-fullscreen .ui-fixed-inline{display:none}.ui-page-fullscreen .ui-header,.ui-page-fullscreen .ui-footer{opacity:.9}.ui-navbar{overflow:hidden}.ui-navbar ul,.ui-navbar-expanded ul{list-style:none;padding:0;margin:0;position:relative;display:block;border:0}.ui-navbar-collapsed ul{float:left;width:75%;margin-right:-2px}.ui-navbar-collapsed .ui-navbar-toggle{float:left;width:25%}.ui-navbar li.ui-navbar-truncate{position:absolute;left:-9999px;top:-9999px}.ui-navbar li .ui-btn,.ui-navbar .ui-navbar-toggle .ui-btn{display:block;font-size:12px;text-align:center;margin:0;border-right-width:0}.ui-navbar li .ui-btn{margin-right:-1px}.ui-navbar li .ui-btn:last-child{margin-right:0}.ui-header .ui-navbar li .ui-btn,.ui-header .ui-navbar .ui-navbar-toggle .ui-btn,.ui-footer .ui-navbar li .ui-btn,.ui-footer .ui-navbar .ui-navbar-toggle .ui-btn{border-top-width:0;border-bottom-width:0}.ui-navbar .ui-btn-inner{padding-left:2px;padding-right:2px}.ui-navbar-noicons li .ui-btn .ui-btn-inner,.ui-navbar-noicons .ui-navbar-toggle .ui-btn-inner{padding-top:.8em;padding-bottom:.9em}.ui-navbar-expanded .ui-btn{margin:0;font-size:14px}.ui-navbar-expanded .ui-btn-inner{padding-left:5px;padding-right:5px}.ui-navbar-expanded .ui-btn-icon-top .ui-btn-inner{padding:45px 5px 15px;text-align:center}.ui-navbar-expanded .ui-btn-icon-top .ui-icon{top:15px}.ui-navbar-expanded .ui-btn-icon-bottom .ui-btn-inner{padding:15px 5px 45px;text-align:center}.ui-navbar-expanded .ui-btn-icon-bottom .ui-icon{bottom:15px}.ui-navbar-expanded li .ui-btn .ui-btn-inner{min-height:2.5em}.ui-navbar-expanded .ui-navbar-noicons .ui-btn .ui-btn-inner{padding-top:1.8em;padding-bottom:1.9em}.ui-btn{display:block;text-align:center;cursor:pointer;position:relative;margin:.5em 5px;padding:0}.ui-header .ui-btn,.ui-footer .ui-btn,.ui-bar .ui-btn{display:inline-block;font-size:13px;margin:0}.ui-btn-inline{display:inline-block}.ui-btn-inner{padding:.6em 25px;display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative;zoom:1}.ui-btn input,.ui-btn button{z-index:2}.ui-header .ui-btn-inner,.ui-footer .ui-btn-inner,.ui-bar .ui-btn-inner{padding:.4em 8px .5em}.ui-btn-icon-notext{width:24px;height:24px}.ui-btn-icon-notext .ui-btn-inner{padding:2px 1px 2px 3px}.ui-btn-text{position:relative;z-index:1}.ui-btn-icon-notext .ui-btn-text{position:absolute;left:-9999px}.ui-btn-icon-left .ui-btn-inner{padding-left:33px}.ui-header .ui-btn-icon-left .ui-btn-inner,.ui-footer .ui-btn-icon-left .ui-btn-inner,.ui-bar .ui-btn-icon-left .ui-btn-inner{padding-left:27px}.ui-btn-icon-right .ui-btn-inner{padding-right:33px}.ui-header .ui-btn-icon-right .ui-btn-inner,.ui-footer .ui-btn-icon-right .ui-btn-inner,.ui-bar .ui-btn-icon-right .ui-btn-inner{padding-right:27px}.ui-btn-icon-top .ui-btn-inner{padding-top:33px}.ui-header .ui-btn-icon-top .ui-btn-inner,.ui-footer .ui-btn-icon-top .ui-btn-inner,.ui-bar .ui-btn-icon-top .ui-btn-inner{padding-top:27px}.ui-btn-icon-bottom .ui-btn-inner{padding-bottom:33px}.ui-header .ui-btn-icon-bottom .ui-btn-inner,.ui-footer .ui-btn-icon-bottom .ui-btn-inner,.ui-bar .ui-btn-icon-bottom .ui-btn-inner{padding-bottom:27px}.ui-btn-icon-notext .ui-icon{display:block;z-index:0}.ui-btn-icon-left .ui-icon,.ui-btn-icon-right .ui-icon{position:absolute;top:50%;margin-top:-9px}.ui-btn-icon-top .ui-icon,.ui-btn-icon-bottom .ui-icon{position:absolute;left:50%;margin-left:-9px}.ui-btn-icon-left .ui-icon{left:10px}.ui-btn-icon-right .ui-icon{right:10px}.ui-btn-icon-top .ui-icon{top:10px}.ui-btn-icon-bottom .ui-icon{bottom:10px}.ui-header .ui-btn-icon-left .ui-icon,.ui-footer .ui-btn-icon-left .ui-icon,.ui-bar .ui-btn-icon-left .ui-icon{left:4px}.ui-header .ui-btn-icon-right .ui-icon,.ui-footer .ui-btn-icon-right .ui-icon,.ui-bar .ui-btn-icon-right .ui-icon{right:4px}.ui-header .ui-btn-icon-top .ui-icon,.ui-footer .ui-btn-icon-top .ui-icon,.ui-bar .ui-btn-icon-top .ui-icon{top:4px}.ui-header .ui-btn-icon-bottom .ui-icon,.ui-footer .ui-btn-icon-bottom .ui-icon,.ui-bar .ui-btn-icon-bottom .ui-icon{bottom:4px}.ui-btn-hidden{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-appearance:button;opacity:.1;cursor:pointer;background:#fff;background:rgba(255,255,255,0);filter:Alpha(Opacity=.0001);font-size:1px;border:0;line-height:999px}.ui-collapsible{margin:.5em 0}.ui-collapsible-heading{font-size:16px;display:block;margin:0 -8px;padding:0;border-width:0 0 1px 0;position:relative}.ui-collapsible-heading a{text-align:left;margin:0}.ui-collapsible-heading a .ui-btn-inner{padding-left:40px}.ui-collapsible-heading a span.ui-btn{position:absolute;left:6px;top:50%;margin:-12px 0 0 0;width:20px;height:20px;padding:1px 0 1px 2px;text-indent:-9999px}.ui-collapsible-heading a span.ui-btn .ui-btn-inner{padding:10px 0}.ui-collapsible-heading a span.ui-btn .ui-icon{left:0;margin-top:-10px}.ui-collapsible-heading-status{position:absolute;top:-9999px;left:0}.ui-collapsible-content{display:block;margin:0 -8px;padding:10px 16px;border-top:0;background-image:none;font-weight:normal}.ui-collapsible-content-collapsed{display:none}.ui-collapsible-set{margin:.5em 0}.ui-collapsible-set .ui-collapsible{margin:-1px 0 0}.ui-controlgroup,fieldset.ui-controlgroup{padding:0;margin:.5em 0 1em}.ui-bar .ui-controlgroup{margin:0 .3em}.ui-controlgroup-label{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em}.ui-controlgroup-controls{display:block;width:100%}.ui-controlgroup li{list-style:none}.ui-controlgroup-vertical .ui-btn,.ui-controlgroup-vertical .ui-checkbox,.ui-controlgroup-vertical .ui-radio{margin:0;border-bottom-width:0}.ui-controlgroup-controls label.ui-select{position:absolute;left:-9999px}.ui-controlgroup-vertical .ui-controlgroup-last{border-bottom-width:1px}.ui-controlgroup-horizontal{padding:0}.ui-controlgroup-horizontal .ui-btn,.ui-controlgroup-horizontal .ui-select{display:inline-block;margin:0 -5px 0 0}.ui-controlgroup-horizontal .ui-checkbox,.ui-controlgroup-horizontal .ui-radio{float:left;margin:0 -1px 0 0}.ui-controlgroup-horizontal .ui-checkbox .ui-btn,.ui-controlgroup-horizontal .ui-radio .ui-btn,.ui-controlgroup-horizontal .ui-checkbox:last-child,.ui-controlgroup-horizontal .ui-radio:last-child{margin-right:0}.ui-controlgroup-horizontal .ui-controlgroup-last{margin-right:0}.ui-controlgroup .ui-checkbox label,.ui-controlgroup .ui-radio label{font-size:16px}@media all and (min-width:450px){.ui-field-contain .ui-controlgroup-label{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain .ui-controlgroup-controls{width:60%;display:inline-block}.ui-field-contain .ui-controlgroup .ui-select{width:100%}.ui-field-contain .ui-controlgroup-horizontal .ui-select{width:auto}}.ui-dialog{min-height:480px}.ui-dialog .ui-header,.ui-dialog .ui-content,.ui-dialog .ui-footer{max-width:500px;margin:10% auto 15px auto;width:85%;position:relative}.ui-dialog .ui-header,.ui-dialog .ui-footer{padding:0 15px;z-index:10}.ui-dialog .ui-content{padding:15px}.ui-dialog .ui-content,.ui-dialog .ui-footer{margin-top:-15px}.ui-checkbox,.ui-radio{position:relative;margin:.2em 0 .5em;z-index:1}.ui-checkbox .ui-btn,.ui-radio .ui-btn{margin:0;text-align:left;z-index:2}.ui-checkbox .ui-btn-inner,.ui-radio .ui-btn-inner{white-space:normal}.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner{padding-left:45px}.ui-checkbox .ui-btn-icon-right .ui-btn-inner,.ui-radio .ui-btn-icon-right .ui-btn-inner{padding-right:45px}.ui-checkbox .ui-icon,.ui-radio .ui-icon{top:1.1em}.ui-checkbox .ui-btn-icon-left .ui-icon,.ui-radio .ui-btn-icon-left .ui-icon{left:15px}.ui-checkbox .ui-btn-icon-right .ui-icon,.ui-radio .ui-btn-icon-right .ui-icon{right:15px}.ui-checkbox input,.ui-radio input{position:absolute;left:20px;top:50%;width:10px;height:10px;margin:-5px 0 0 0;outline:0!important;z-index:1}.ui-field-contain{padding:1.5em 0;margin:0;border-bottom-width:1px;overflow:visible}.ui-field-contain:first-child{border-top-width:0}@media all and (min-width:450px){.ui-field-contain{border-width:0;padding:0;margin:1em 0}}.ui-select{display:block;position:relative}.ui-select select{position:absolute;left:-9999px;top:-9999px}.ui-select .ui-btn{overflow:hidden}.ui-select .ui-btn{opacity:1}.ui-select .ui-btn select{cursor:pointer;-webkit-appearance:button;left:0;top:0;width:100%;min-height:1.5em;min-height:100%;height:3em;max-height:100%;opacity:0;-ms-filter:"alpha(opacity=0)";filter:alpha(opacity=0);z-index:2}.ui-select .ui-disabled{opacity:.3}@-moz-document url-prefix(){.ui-select .ui-btn select{opacity:.0001}}.ui-select .ui-btn select.ui-select-nativeonly{opacity:1;text-indent:0}.ui-select .ui-btn-icon-right .ui-btn-inner{padding-right:45px}.ui-select .ui-btn-icon-right .ui-icon{right:15px}label.ui-select{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em;display:block}.ui-select .ui-btn-text,.ui-selectmenu .ui-btn-text{display:block;min-height:1em;overflow:hidden}.ui-select .ui-btn-text{text-overflow:ellipsis}.ui-selectmenu{position:absolute;padding:0;z-index:1100!important;width:80%;max-width:350px;padding:6px}.ui-selectmenu .ui-listview{margin:0}.ui-selectmenu .ui-btn.ui-li-divider{cursor:default}.ui-selectmenu-hidden{top:-9999px;left:-9999px}.ui-selectmenu-screen{position:absolute;top:0;left:0;width:100%;height:100%;z-index:99}.ui-screen-hidden,.ui-selectmenu-list .ui-li .ui-icon{display:none}.ui-selectmenu-list .ui-li .ui-icon{display:block}.ui-li.ui-selectmenu-placeholder{display:none}.ui-selectmenu .ui-header .ui-title{margin:.6em 46px .8em}@media all and (min-width:450px){.ui-field-contain label.ui-select{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain .ui-select{width:60%;display:inline-block}}.ui-selectmenu .ui-header h1:after{content:'.';visibility:hidden}label.ui-input-text{font-size:16px;line-height:1.4;display:block;font-weight:normal;margin:0 0 .3em}input.ui-input-text,textarea.ui-input-text{background-image:none;padding:.4em;line-height:1.4;font-size:16px;display:block;width:97%}input.ui-input-text{-webkit-appearance:none}textarea.ui-input-text{height:50px;-webkit-transition:height 200ms linear;-moz-transition:height 200ms linear;-o-transition:height 200ms linear;transition:height 200ms linear}.ui-input-search{padding:0 30px;background-image:none;position:relative}.ui-icon-searchfield:after{position:absolute;left:7px;top:50%;margin-top:-9px;content:"";width:18px;height:18px;opacity:.5}.ui-input-search input.ui-input-text{border:0;width:98%;padding:.4em 0;margin:0;display:block;background:transparent none;outline:0!important}.ui-input-search .ui-input-clear{position:absolute;right:0;top:50%;margin-top:-13px}.ui-input-search .ui-input-clear-hidden{display:none}@media all and (min-width:450px){.ui-field-contain label.ui-input-text{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain input.ui-input-text,.ui-field-contain textarea.ui-input-text,.ui-field-contain .ui-input-search{width:60%;display:inline-block}.ui-field-contain .ui-input-search{width:50%}.ui-hide-label input.ui-input-text,.ui-hide-label textarea.ui-input-text,.ui-hide-label .ui-input-search{padding:.4em;width:97%}.ui-input-search input.ui-input-text{width:98%}}.ui-listview{margin:0;counter-reset:listnumbering}.ui-content .ui-listview{margin:-15px}.ui-content .ui-listview-inset{margin:1em 0}.ui-listview,.ui-li{list-style:none;padding:0}.ui-li,.ui-li.ui-field-contain{display:block;margin:0;position:relative;overflow:visible;text-align:left;border-width:0;border-top-width:1px}.ui-li .ui-btn-text a.ui-link-inherit{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-divider,.ui-li-static{padding:.5em 15px;font-size:14px;font-weight:bold}.ui-li-divider{counter-reset:listnumbering}ol.ui-listview .ui-link-inherit:before,ol.ui-listview .ui-li-static:before,.ui-li-dec{font-size:.8em;display:inline-block;padding-right:.3em;font-weight:normal;counter-increment:listnumbering;content:counter(listnumbering) ". "}ol.ui-listview .ui-li-jsnumbering:before{content:""!important}.ui-listview-inset .ui-li{border-right-width:1px;border-left-width:1px}.ui-li:last-child,.ui-li.ui-field-contain:last-child{border-bottom-width:1px}.ui-li>.ui-btn-inner{display:block;position:relative;padding:0}.ui-li .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li{padding:.7em 15px .7em 15px;display:block}.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-thumb{min-height:60px;padding-left:100px}.ui-li-has-icon .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-icon{min-height:20px;padding-left:40px}.ui-li-has-count .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-count{padding-right:45px}.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-arrow{padding-right:30px}.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-arrow.ui-li-has-count{padding-right:75px}.ui-li-has-count .ui-btn-text{padding-right:15px}.ui-li-heading{font-size:16px;font-weight:bold;display:block;margin:.6em 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-desc{font-size:12px;font-weight:normal;display:block;margin:-.5em 0 .6em;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-thumb,.ui-listview .ui-li-icon{position:absolute;left:1px;top:0;max-height:80px;max-width:80px}.ui-listview .ui-li-icon{max-height:40px;max-width:40px;left:10px;top:.9em}.ui-li-thumb,.ui-listview .ui-li-icon,.ui-li-content{float:left;margin-right:10px}.ui-li-aside{float:right;width:50%;text-align:right;margin:.3em 0}@media all and (min-width:480px){.ui-li-aside{width:45%}}.ui-li-divider{cursor:default}.ui-li-has-alt .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-alt{padding-right:95px}.ui-li-has-count .ui-li-count{position:absolute;font-size:11px;font-weight:bold;padding:.2em .5em;top:50%;margin-top:-.9em;right:38px}.ui-li-divider .ui-li-count,.ui-li-static .ui-li-count{right:10px}.ui-li-has-alt .ui-li-count{right:55px}.ui-li-link-alt{position:absolute;width:40px;height:100%;border-width:0;border-left-width:1px;top:0;right:0;margin:0;padding:0;z-index:2}.ui-li-link-alt .ui-btn{overflow:hidden;position:absolute;right:8px;top:50%;margin:-11px 0 0 0;border-bottom-width:1px;z-index:-1}.ui-li-link-alt .ui-btn-inner{padding:0;height:100%;position:absolute;width:100%;top:0;left:0}.ui-li-link-alt .ui-btn .ui-icon{right:50%;margin-right:-9px}.ui-listview * .ui-btn-inner>.ui-btn>.ui-btn-inner{border-top:0}.ui-listview-filter{border-width:0;overflow:hidden;margin:-15px -15px 15px -15px}.ui-listview-filter .ui-input-search{margin:5px;width:auto;display:block}.ui-listview-filter-inset{margin:-15px -5px -15px -5px;background:transparent}.ui-li.ui-screen-hidden{display:none}@media only screen and (min-device-width:768px) and (max-device-width:1024px){.ui-li .ui-btn-text{overflow:visible}}label.ui-slider{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em;display:block}input.ui-slider-input,.ui-field-contain input.ui-slider-input{display:inline-block;width:50px}select.ui-slider-switch{display:none}div.ui-slider{position:relative;display:inline-block;overflow:visible;height:15px;padding:0;margin:0 2% 0 20px;top:4px;width:60%}div.ui-slider-switch{width:99.8%}a.ui-slider-handle{position:absolute;z-index:10;top:50%;width:28px;height:28px;margin-top:-15px;margin-left:-15px}a.ui-slider-handle .ui-btn-inner{padding-left:0;padding-right:0}@media all and (min-width:480px){.ui-field-contain label.ui-slider{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain div.ui-slider{width:43%}}div.ui-slider-switch{height:32px;overflow:hidden;margin-left:0}div.ui-slider-inneroffset{margin-left:50%;position:absolute;top:1px;height:100%;width:50%}a.ui-slider-handle-snapping{-webkit-transition:left 70ms linear}div.ui-slider-labelbg{position:absolute;top:0;margin:0;border-width:0}div.ui-slider-switch div.ui-slider-labelbg-a{width:60%;height:100%;left:0}div.ui-slider-switch div.ui-slider-labelbg-b{width:60%;height:100%;right:0}.ui-slider-switch-a div.ui-slider-labelbg-a,.ui-slider-switch-b div.ui-slider-labelbg-b{z-index:-1}.ui-slider-switch-a div.ui-slider-labelbg-b,.ui-slider-switch-b div.ui-slider-labelbg-a{z-index:0}div.ui-slider-switch a.ui-slider-handle{z-index:20;width:101%;height:32px;margin-top:-18px;margin-left:-101%}span.ui-slider-label{width:100%;position:absolute;height:32px;font-size:16px;text-align:center;line-height:2;background:0;border-color:transparent}span.ui-slider-label-a{left:-100%;margin-right:-1px}span.ui-slider-label-b{right:-100%;margin-left:-1px} web2py-1.99.7.orig/applications/admin/static/plugin_jqmobile/jquery.mobile-1.0.min.js0000644000175000017500000023776011724764235027132 0ustar josejose/*! jQuery Mobile v1.0 jquerymobile.com | jquery.org/license */ (function(a,e){if(a.cleanData){var b=a.cleanData;a.cleanData=function(f){for(var c=0,h;(h=f[c])!=null;c++)a(h).triggerHandler("remove");b(f)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){a(this).triggerHandler("remove")});return d.call(a(this),b,c)})}}a.widget=function(b,c,h){var d=b.split(".")[0],e,b=b.split(".")[1];e=d+"-"+b;if(!h)h=c,c=a.Widget;a.expr[":"][e]=function(c){return!!a.data(c, b)};a[d]=a[d]||{};a[d][b]=function(a,b){arguments.length&&this._createWidget(a,b)};c=new c;c.options=a.extend(true,{},c.options);a[d][b].prototype=a.extend(true,c,{namespace:d,widgetName:b,widgetEventPrefix:a[d][b].prototype.widgetEventPrefix||b,widgetBaseClass:e},h);a.widget.bridge(b,a[d][b])};a.widget.bridge=function(b,c){a.fn[b]=function(d){var g=typeof d==="string",i=Array.prototype.slice.call(arguments,1),k=this,d=!g&&i.length?a.extend.apply(null,[true,d].concat(i)):d;if(g&&d.charAt(0)==="_")return k; g?this.each(function(){var c=a.data(this,b);if(!c)throw"cannot call methods on "+b+" prior to initialization; attempted to call method '"+d+"'";if(!a.isFunction(c[d]))throw"no such method '"+d+"' for "+b+" widget instance";var g=c[d].apply(c,i);if(g!==c&&g!==e)return k=g,false}):this.each(function(){var e=a.data(this,b);e?e.option(d||{})._init():a.data(this,b,new c(d,this))});return k}};a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)};a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"", options:{disabled:false},_createWidget:function(b,c){a.data(c,this.widgetName,this);this.element=a(c);this.options=a.extend(true,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){var b={};a.metadata&&(b=a.metadata.get(element)[this.widgetName]);return b},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName); this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(b,c){var d=b;if(arguments.length===0)return a.extend({},this.options);if(typeof b==="string"){if(c===e)return this.options[b];d={};d[b]=c}this._setOptions(d);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b;a==="disabled"&& this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(b,c,d){var e=this.options[b],c=a.Event(c);c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase();d=d||{};if(c.originalEvent)for(var b=a.event.props.length,i;b;)i=a.event.props[--b],c[i]=c.originalEvent[i];this.element.trigger(c, d);return!(a.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); (function(a,e){a.widget("mobile.widget",{_createWidget:function(){a.Widget.prototype._createWidget.apply(this,arguments);this._trigger("init")},_getCreateOptions:function(){var b=this.element,d={};a.each(this.options,function(a){var c=b.jqmData(a.replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()}));c!==e&&(d[a]=c)});return d},enhanceWithin:function(b){var d=a(b).closest(":jqmData(role='page')").data("page"),d=d&&d.keepNativeSelector()||"";a(this.options.initSelector,b).not(d)[this.widgetName]()}})})(jQuery); (function(a){a(window);var e=a("html");a.mobile.media=function(){var b={},d=a("
    "),f=a("").append(d);return function(a){if(!(a in b)){var h=document.createElement("style"),g="@media "+a+" { #jquery-mediatest { position:absolute; } }";h.type="text/css";h.styleSheet?h.styleSheet.cssText=g:h.appendChild(document.createTextNode(g));e.prepend(f).prepend(h);b[a]=d.css("position")==="absolute";f.add(h).remove()}return b[a]}}()})(jQuery); (function(a,e){function b(a){var b=a.charAt(0).toUpperCase()+a.substr(1),a=(a+" "+c.join(b+" ")+b).split(" "),d;for(d in a)if(f[a[d]]!==e)return true}var d=a("").prependTo("html"),f=d[0].style,c=["Webkit","Moz","O"],h="palmGetResource"in window,g=window.operamini&&{}.toString.call(window.operamini)==="[object OperaMini]",i=window.blackberry;a.mobile.browser={};a.mobile.browser.ie=function(){for(var a=3,b=document.createElement("div"),c=b.all||[];b.innerHTML="<\!--[if gt IE "+ ++a+"]>
    ", c[0];);return a>4?a:!a}();a.extend(a.support,{orientation:"orientation"in window&&"onorientationchange"in window,touch:"ontouchend"in document,cssTransitions:"WebKitTransitionEvent"in window,pushState:"pushState"in history&&"replaceState"in history,mediaquery:a.mobile.media("only all"),cssPseudoElement:!!b("content"),touchOverflow:!!b("overflowScrolling"),boxShadow:!!b("boxShadow")&&!i,scrollTop:("pageXOffset"in window||"scrollTop"in document.documentElement||"scrollTop"in d[0])&&!h&&!g,dynamicBaseTag:function(){var b= location.protocol+"//"+location.host+location.pathname+"ui-dir/",c=a("head base"),f=null,e="",h;c.length?e=c.attr("href"):c=f=a("",{href:b}).appendTo("head");h=a("").prependTo(d)[0].href;c[0].href=e||location.pathname;f&&f.remove();return h.indexOf(b)===0}()});d.remove();h=function(){var a=window.navigator.userAgent;return a.indexOf("Nokia")>-1&&(a.indexOf("Symbian/3")>-1||a.indexOf("Series60/5")>-1)&&a.indexOf("AppleWebKit")>-1&&a.match(/(BrowserNG|NokiaBrowser)\/7\.[0-3]/)}(); a.mobile.ajaxBlacklist=window.blackberry&&!window.WebKitPoint||g||h;h&&a(function(){a("head link[rel='stylesheet']").attr("rel","alternate stylesheet").attr("rel","stylesheet")});a.support.boxShadow||a("html").addClass("ui-mobile-nosupport-boxshadow")})(jQuery); (function(a,e,b,d){function f(a){for(;a&&typeof a.originalEvent!=="undefined";)a=a.originalEvent;return a}function c(b){for(var c={},f,d;b;){f=a.data(b,n);for(d in f)if(f[d])c[d]=c.hasVirtualBinding=true;b=b.parentNode}return c}function h(){v&&(clearTimeout(v),v=0);v=setTimeout(function(){E=v=0;u.length=0;D=false;y=true},a.vmouse.resetTimerDuration)}function g(b,c,r){var e,h;if(!(h=r&&r[b])){if(r=!r)a:{for(r=c.target;r;){if((h=a.data(r,n))&&(!b||h[b]))break a;r=r.parentNode}r=null}h=r}if(h){e=c;var r= e.type,j,g;e=a.Event(e);e.type=b;h=e.originalEvent;j=a.event.props;if(h)for(g=j.length;g;)b=j[--g],e[b]=h[b];if(r.search(/mouse(down|up)|click/)>-1&&!e.which)e.which=1;if(r.search(/^touch/)!==-1&&(b=f(h),r=b.touches,b=b.changedTouches,r=r&&r.length?r[0]:b&&b.length?b[0]:d))for(h=0,len=z.length;he||Math.abs(d.pageY- t)>e;flags=c(b.target);w&&!r&&g("vmousecancel",b,flags);g("vmousemove",b,flags);h()}}function m(a){if(!y){y=true;var b=c(a.target),d;g("vmouseup",a,b);if(!w&&(d=g("vclick",a,b))&&d.isDefaultPrevented())d=f(a).changedTouches[0],u.push({touchID:E,x:d.clientX,y:d.clientY}),D=true;g("vmouseout",a,b);w=false;h()}}function p(b){var b=a.data(b,n),c;if(b)for(c in b)if(b[c])return true;return false}function j(){}function q(b){var c=b.substr(1);return{setup:function(){p(this)||a.data(this,n,{});a.data(this, n)[b]=true;s[b]=(s[b]||0)+1;s[b]===1&&B.bind(c,i);a(this).bind(c,j);if(C)s.touchstart=(s.touchstart||0)+1,s.touchstart===1&&B.bind("touchstart",k).bind("touchend",m).bind("touchmove",o).bind("scroll",l)},teardown:function(){--s[b];s[b]||B.unbind(c,i);C&&(--s.touchstart,s.touchstart||B.unbind("touchstart",k).unbind("touchmove",o).unbind("touchend",m).unbind("scroll",l));var d=a(this),f=a.data(this,n);f&&(f[b]=false);d.unbind(c,j);p(this)||d.removeData(n)}}}var n="virtualMouseBindings",A="virtualTouchID", e="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),z="clientX clientY pageX pageY screenX screenY".split(" "),s={},v=0,x=0,t=0,w=false,u=[],D=false,y=false,C="addEventListener"in b,B=a(b),r=1,E=0;a.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(var F=0;Fa.event.special.swipe.scrollSupressionThreshold&& b.preventDefault()}}var e=c.originalEvent.touches?c.originalEvent.touches[0]:c,m={time:(new Date).getTime(),coords:[e.pageX,e.pageY],origin:a(c.target)},p;d.bind(g,f).one(h,function(){d.unbind(g,f);m&&p&&p.time-m.timea.event.special.swipe.horizontalDistanceThreshold&&Math.abs(m.coords[1]-p.coords[1])p.coords[0]?"swipeleft":"swiperight"); m=p=b})})}};(function(a,b){function c(){var a=f();a!==e&&(e=a,d.trigger("orientationchange"))}var d=a(b),f,e;a.event.special.orientationchange={setup:function(){if(a.support.orientation&&a.mobile.orientationChangeEnabled)return false;e=f();d.bind("throttledresize",c)},teardown:function(){if(a.support.orientation&&a.mobile.orientationChangeEnabled)return false;d.unbind("throttledresize",c)},add:function(a){var b=a.handler;a.handler=function(a){a.orientation=f();return b.apply(this,arguments)}}};a.event.special.orientationchange.orientation= f=function(){var c=true,c=document.documentElement;return(c=a.support.orientation?b.orientation%180==0:c&&c.clientWidth/c.clientHeight<1.1)?"portrait":"landscape"}})(jQuery,e);(function(){a.event.special.throttledresize={setup:function(){a(this).bind("resize",b)},teardown:function(){a(this).unbind("resize",b)}};var b=function(){f=(new Date).getTime();e=f-c;e>=250?(c=f,a(this).trigger("throttledresize")):(d&&clearTimeout(d),d=setTimeout(b,250-e))},c=0,d,f,e})();a.each({scrollstop:"scrollstart",taphold:"tap", swipeleft:"swipe",swiperight:"swipe"},function(b,c){a.event.special[b]={setup:function(){a(this).bind(c,a.noop)}}})})(jQuery,this); (function(a,e,b){function d(a){a=a||location.href;return"#"+a.replace(/^[^#]*#?(.*)$/,"$1")}var f="hashchange",c=document,h,g=a.event.special,i=c.documentMode,k="on"+f in e&&(i===b||i>7);a.fn[f]=function(a){return a?this.bind(f,a):this.trigger(f)};a.fn[f].delay=50;g[f]=a.extend(g[f],{setup:function(){if(k)return false;a(h.start)},teardown:function(){if(k)return false;a(h.stop)}});h=function(){function h(){var b=d(),c=n(p);if(b!==p)q(p=b,c),a(e).trigger(f);else if(c!==p)location.href=location.href.replace(/#.*/, "")+c;i=setTimeout(h,a.fn[f].delay)}var g={},i,p=d(),j=function(a){return a},q=j,n=j;g.start=function(){i||h()};g.stop=function(){i&&clearTimeout(i);i=b};a.browser.msie&&!k&&function(){var b,e;g.start=function(){if(!b)e=(e=a.fn[f].src)&&e+d(),b=a('