summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--COPYING437
-rw-r--r--autobuilder_requirements.mdwn25
-rw-r--r--bug_tracker.mdwn8
-rw-r--r--caveat_risc_os.mdwn85
-rw-r--r--continuous_integration.mdwn42
-rw-r--r--continuous_integration_debian_jessie_setup.mdwn421
-rw-r--r--continuous_integration_debian_wheezy_setup.mdwn164
-rw-r--r--continuous_integration_freebsd_setup.mdwn67
-rw-r--r--continuous_integration_haiku_slave_setup.mdwn83
-rw-r--r--continuous_integration_mac_os_x_setup.mdwn9
-rw-r--r--continuous_integration_mac_os_x_snow_leopard_setup.mdwn80
-rw-r--r--continuous_integration_mac_os_x_yosemite_setup.mdwn77
-rw-r--r--continuous_integration_manual_debian_wheezy_setup.mdwn9
-rw-r--r--continuous_integration_manual_haiku_slave_setup.mdwn9
-rw-r--r--continuous_integration_manual_openbsd_setup.mdwn9
-rw-r--r--continuous_integration_openbsd_setup.mdwn127
-rw-r--r--continuous_integration_setup_haiku_slave.mdwn7
-rw-r--r--css_media_queries.mdwn116
-rw-r--r--developer_weekend__jan_2014_.mdwn72
-rw-r--r--developer_weekend__mar_2010_.mdwn30
-rw-r--r--developer_weekend__nov_2012_.mdwn22
-rw-r--r--developer_weekend__nov_2014_.mdwn182
-rw-r--r--developer_weekend__nov_2016_.mdwn36
-rw-r--r--development_plan.mdwn98
-rw-r--r--disc_caching_and_history.mdwn34
-rw-r--r--documentation.mdwn27
-rw-r--r--documentation/buildingforamigaos.mdwn57
-rw-r--r--documentation/buildingforriscosquickstart.mdwn85
-rw-r--r--documentation/contents.mdwn148
-rw-r--r--documentation/directory_structure.mdwn45
-rw-r--r--documentation/errors.mdwn36
-rw-r--r--documentation/frames.mdwn64
-rw-r--r--documentation/front_end_functions.mdwn81
-rw-r--r--documentation/gettingcoding.mdwn155
-rw-r--r--documentation/gitcheatsheet.mdwn278
-rw-r--r--documentation/gtk_interface.mdwn36
-rw-r--r--documentation/layout.mdwn70
-rw-r--r--documentation/memory.mdwn26
-rw-r--r--documentation/modular_coding_style.mdwn39
-rw-r--r--documentation/overview.mdwn9
-rw-r--r--documentation/printing.mdwn65
-rw-r--r--documentation/references.mdwn37
-rw-r--r--documentation/treeview.mdwn88
-rw-r--r--frames.mdwn115
-rw-r--r--gsoc.mdwn18
-rw-r--r--gsoc/application.mdwn151
-rw-r--r--gsoc/information.mdwn9
-rw-r--r--gsoc/requirements.mdwn85
-rw-r--r--gsoc/student_guidelines.mdwn66
-rw-r--r--gsoc_2014.mdwn9
-rw-r--r--gsoc_2014_ideas.mdwn124
-rw-r--r--index.mdwn71
-rw-r--r--layout.mdwn34
-rw-r--r--libcss_style_sharing.mdwn48
-rw-r--r--libdom.mdwn22
-rw-r--r--libdom/core_support_status.mdwn254
-rw-r--r--libdom/events_support_status.mdwn115
-rw-r--r--libdom/minimalsubset.mdwn99
-rw-r--r--libdom/the_mutationevent_generation.mdwn96
-rw-r--r--libdom_core_support_status.mdwn9
-rw-r--r--libdom_events_support_status.mdwn9
-rw-r--r--libhubbub.mdwn59
-rw-r--r--module/index.mdwn20
-rw-r--r--module/utils/container.mdwn38
-rw-r--r--module/utils/errors.mdwn38
-rw-r--r--module/utils/filename.mdwn38
-rw-r--r--module/utils/findresource.mdwn35
-rw-r--r--module/utils/hashtable.mdwn38
-rw-r--r--module/utils/http.mdwn34
-rw-r--r--module/utils/locale.mdwn38
-rw-r--r--netsurf_2.5.mdwn28
-rw-r--r--netsurf_2.6.mdwn50
-rw-r--r--netsurf_2.7.mdwn71
-rw-r--r--netsurf_2.8.mdwn70
-rw-r--r--netsurf_2.9.mdwn83
-rw-r--r--netsurf_3.0.mdwn88
-rw-r--r--netsurf_3.1.mdwn127
-rw-r--r--netsurf_3.2.mdwn31
-rw-r--r--netsurf_3.3.mdwn34
-rw-r--r--netsurf_3.4.mdwn34
-rw-r--r--netsurf_3.5.mdwn88
-rw-r--r--netsurf_3.6.mdwn67
-rw-r--r--netsurf_corebuild.mdwn148
-rw-r--r--release_admin.mdwn69
-rw-r--r--release_process.mdwn273
-rw-r--r--released_versions.mdwn20
-rw-r--r--sequence_planning_for_libdom_specialisations.mdwn348
-rw-r--r--society.mdwn9
-rw-r--r--society/constitution.mdwn117
-rw-r--r--society/members.mdwn31
-rw-r--r--spec/htm5_alignment.mdwn9
-rw-r--r--spec/html5_alignment.mdwn59
-rw-r--r--test/libcss/nstests.mdwn187
-rw-r--r--the_attr_node_todo.mdwn11
-rw-r--r--the_mutationevent_generation.mdwn9
-rw-r--r--todo.mdwn23
-rw-r--r--todo/amigaos_frontend.mdwn175
-rw-r--r--todo/framebuffer_frontend.mdwn72
-rw-r--r--todo/gtk_frontend.mdwn17
-rw-r--r--todo/jmb.mdwn49
-rw-r--r--todo/risc_os_frontend.mdwn61
-rw-r--r--todo/tlsa.mdwn47
-rw-r--r--todo/win32.mdwn28
-rw-r--r--virtual_host_server.mdwn56
104 files changed, 7856 insertions, 0 deletions
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..d60efe4
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,437 @@
+Attribution-NonCommercial-ShareAlike 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+ Considerations for licensors: Our public licenses are
+ intended for use by those authorized to give the public
+ permission to use material in ways otherwise restricted by
+ copyright and certain other rights. Our licenses are
+ irrevocable. Licensors should read and understand the terms
+ and conditions of the license they choose before applying it.
+ Licensors should also secure all rights necessary before
+ applying our licenses so that the public can reuse the
+ material as expected. Licensors should clearly mark any
+ material not subject to the license. This includes other CC-
+ licensed material, or material used under an exception or
+ limitation to copyright. More considerations for licensors:
+ wiki.creativecommons.org/Considerations_for_licensors
+
+ Considerations for the public: By using one of our public
+ licenses, a licensor grants the public permission to use the
+ licensed material under specified terms and conditions. If
+ the licensor's permission is not necessary for any reason--for
+ example, because of any applicable exception or limitation to
+ copyright--then that use is not regulated by the license. Our
+ licenses grant only permissions under copyright and certain
+ other rights that a licensor has authority to grant. Use of
+ the licensed material may still be restricted for other
+ reasons, including because others have copyright or other
+ rights in the material. A licensor may make special requests,
+ such as asking that all changes be marked or described.
+ Although not required by our licenses, you are encouraged to
+ respect those requests where reasonable. More_considerations
+ for the public:
+ wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
+Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution-NonCommercial-ShareAlike 4.0 International Public License
+("Public License"). To the extent this Public License may be
+interpreted as a contract, You are granted the Licensed Rights in
+consideration of Your acceptance of these terms and conditions, and the
+Licensor grants You such rights in consideration of benefits the
+Licensor receives from making the Licensed Material available under
+these terms and conditions.
+
+
+Section 1 -- Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material
+ and in which the Licensed Material is translated, altered,
+ arranged, transformed, or otherwise modified in a manner requiring
+ permission under the Copyright and Similar Rights held by the
+ Licensor. For purposes of this Public License, where the Licensed
+ Material is a musical work, performance, or sound recording,
+ Adapted Material is always produced where the Licensed Material is
+ synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+
+ c. BY-NC-SA Compatible License means a license listed at
+ creativecommons.org/compatiblelicenses, approved by Creative
+ Commons as essentially the equivalent of this Public License.
+
+ d. Copyright and Similar Rights means copyright and/or similar rights
+ closely related to copyright including, without limitation,
+ performance, broadcast, sound recording, and Sui Generis Database
+ Rights, without regard to how the rights are labeled or
+ categorized. For purposes of this Public License, the rights
+ specified in Section 2(b)(1)-(2) are not Copyright and Similar
+ Rights.
+
+ e. Effective Technological Measures means those measures that, in the
+ absence of proper authority, may not be circumvented under laws
+ fulfilling obligations under Article 11 of the WIPO Copyright
+ Treaty adopted on December 20, 1996, and/or similar international
+ agreements.
+
+ f. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+
+ g. License Elements means the license attributes listed in the name
+ of a Creative Commons Public License. The License Elements of this
+ Public License are Attribution, NonCommercial, and ShareAlike.
+
+ h. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public
+ License.
+
+ i. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+
+ j. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+
+ k. NonCommercial means not primarily intended for or directed towards
+ commercial advantage or monetary compensation. For purposes of
+ this Public License, the exchange of the Licensed Material for
+ other material subject to Copyright and Similar Rights by digital
+ file-sharing or similar means is NonCommercial provided there is
+ no payment of monetary compensation in connection with the
+ exchange.
+
+ l. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such
+ as reproduction, public display, public performance, distribution,
+ dissemination, communication, or importation, and to make material
+ available to the public including in ways that members of the
+ public may access the material from a place and at a time
+ individually chosen by them.
+
+ m. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and of
+ the Council of 11 March 1996 on the legal protection of databases,
+ as amended and/or succeeded, as well as other essentially
+ equivalent rights anywhere in the world.
+
+ n. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License,
+ the Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to
+ exercise the Licensed Rights in the Licensed Material to:
+
+ a. reproduce and Share the Licensed Material, in whole or
+ in part, for NonCommercial purposes only; and
+
+ b. produce, reproduce, and Share Adapted Material for
+ NonCommercial purposes only.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
+ Exceptions and Limitations apply to Your use, this Public
+ License does not apply, and You do not need to comply with
+ its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section
+ 6(a).
+
+ 4. Media and formats; technical modifications allowed. The
+ Licensor authorizes You to exercise the Licensed Rights in
+ all media and formats whether now known or hereafter created,
+ and to make technical modifications necessary to do so. The
+ Licensor waives and/or agrees not to assert any right or
+ authority to forbid You from making technical modifications
+ necessary to exercise the Licensed Rights, including
+ technical modifications necessary to circumvent Effective
+ Technological Measures. For purposes of this Public License,
+ simply making modifications authorized by this Section 2(a)
+ (4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ a. Offer from the Licensor -- Licensed Material. Every
+ recipient of the Licensed Material automatically
+ receives an offer from the Licensor to exercise the
+ Licensed Rights under the terms and conditions of this
+ Public License.
+
+ b. Additional offer from the Licensor -- Adapted Material.
+ Every recipient of Adapted Material from You
+ automatically receives an offer from the Licensor to
+ exercise the Licensed Rights in the Adapted Material
+ under the conditions of the Adapter's License You apply.
+
+ c. No downstream restrictions. You may not offer or impose
+ any additional or different terms or conditions on, or
+ apply any Effective Technological Measures to, the
+ Licensed Material if doing so restricts exercise of the
+ Licensed Rights by any recipient of the Licensed
+ Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or
+ may be construed as permission to assert or imply that You
+ are, or that Your use of the Licensed Material is, connected
+ with, or sponsored, endorsed, or granted official status by,
+ the Licensor or others designated to receive attribution as
+ provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not
+ licensed under this Public License, nor are publicity,
+ privacy, and/or other similar personality rights; however, to
+ the extent possible, the Licensor waives and/or agrees not to
+ assert any such rights held by the Licensor to the limited
+ extent necessary to allow You to exercise the Licensed
+ Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this
+ Public License.
+
+ 3. To the extent possible, the Licensor waives any right to
+ collect royalties from You for the exercise of the Licensed
+ Rights, whether directly or through a collecting society
+ under any voluntary or waivable statutory or compulsory
+ licensing scheme. In all other cases the Licensor expressly
+ reserves any right to collect such royalties, including when
+ the Licensed Material is used other than for NonCommercial
+ purposes.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified
+ form), You must:
+
+ a. retain the following if it is supplied by the Licensor
+ with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed
+ Material and any others designated to receive
+ attribution, in any reasonable manner requested by
+ the Licensor (including by pseudonym if
+ designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of
+ warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the
+ extent reasonably practicable;
+
+ b. indicate if You modified the Licensed Material and
+ retain an indication of any previous modifications; and
+
+ c. indicate the Licensed Material is licensed under this
+ Public License, and include the text of, or the URI or
+ hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in
+ which You Share the Licensed Material. For example, it may be
+ reasonable to satisfy the conditions by providing a URI or
+ hyperlink to a resource that includes the required
+ information.
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent
+ reasonably practicable.
+
+ b. ShareAlike.
+
+ In addition to the conditions in Section 3(a), if You Share
+ Adapted Material You produce, the following conditions also apply.
+
+ 1. The Adapter's License You apply must be a Creative Commons
+ license with the same License Elements, this version or
+ later, or a BY-NC-SA Compatible License.
+
+ 2. You must include the text of, or the URI or hyperlink to, the
+ Adapter's License You apply. You may satisfy this condition
+ in any reasonable manner based on the medium, means, and
+ context in which You Share Adapted Material.
+
+ 3. You may not offer or impose any additional or different terms
+ or conditions on, or apply any Effective Technological
+ Measures to, Adapted Material that restrict exercise of the
+ rights granted under the Adapter's License You apply.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial
+ portion of the contents of the database for NonCommercial purposes
+ only;
+
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material,
+ including for purposes of Section 3(b); and
+
+ c. You must comply with the conditions in Section 3(a) if You Share
+ all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+ IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent
+ possible, most closely approximates an absolute disclaimer and
+ waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under
+ Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided
+ it is cured within 30 days of Your discovery of the
+ violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations
+ of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+ License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could lawfully
+ be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is
+ deemed unenforceable, it shall be automatically reformed to the
+ minimum extent necessary to make it enforceable. If the provision
+ cannot be reformed, it shall be severed from this Public License
+ without affecting the enforceability of the remaining terms and
+ conditions.
+
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+
+=======================================================================
+
+Creative Commons is not a party to its public
+licenses. Notwithstanding, Creative Commons may elect to apply one of
+its public licenses to material it publishes and in those instances
+will be considered the “Licensor.” The text of the Creative Commons
+public licenses is dedicated to the public domain under the CC0 Public
+Domain Dedication. Except for the limited purpose of indicating that
+material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the
+public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
diff --git a/autobuilder_requirements.mdwn b/autobuilder_requirements.mdwn
new file mode 100644
index 0000000..511fec8
--- /dev/null
+++ b/autobuilder_requirements.mdwn
@@ -0,0 +1,25 @@
+[[!meta title="Autobuilder requirements"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2009-07-08T13:38:43Z"]]
+
+
+[[!toc]] The current autobuilder
+script is in need of an overhaul. Additionally, we need more features
+for it to be useful in the future. This page enumerates the features we
+need.
+
+- Automated fetch of component sources
+- Detection of updated components
+- Configurable installation prefix/destdir and build environment
+- Ability to specify which versions of components are built for a
+ given product
+- Dependency tracking (so, e.g a change to Hubbub results in a new
+ NetSurf binary)
+- Robust rewriting of URLs in documentation (maybe better handled in
+ component buildsystems)
+- Retain features of existing autobuild.pl
+- Automated packaging of components for release
+- Automated creation of NSTools distribution for RISC OS.
+- Automatically run component testsuites, notifying any failures.
+ Also, compute code coverage statistics.
+
diff --git a/bug_tracker.mdwn b/bug_tracker.mdwn
new file mode 100644
index 0000000..9afa23e
--- /dev/null
+++ b/bug_tracker.mdwn
@@ -0,0 +1,8 @@
+[[!meta title="Bug Tracker"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2016-06-17T07:41:58Z"]]
+
+
+[[!toc]] The Mantis issue tracker
+is located at <http://bugs.netsurf-browser.org/mantis/>
+
diff --git a/caveat_risc_os.mdwn b/caveat_risc_os.mdwn
new file mode 100644
index 0000000..f55f6bf
--- /dev/null
+++ b/caveat_risc_os.mdwn
@@ -0,0 +1,85 @@
+[[!meta title="Caveat RISC OS"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2010-03-01T02:57:12Z"]]
+
+
+[[!toc]] When working on software
+that must run under RISC OS, there are many issues that you must keep in
+mind that might not be obvious or apparent to people who have never
+written software for RISC OS before. This page describes some of them.
+
+Some of the NetSurf Project's sponsors have donated us the equipment and
+bandwidth required to give accepted students access to an open-access
+RISC OS computer over the internet, so they can test and experiment with
+it. This is done via an IP KVM using a rather ghastly, but usable, Java
+applet in a web page. The machine is an A9 Home donated by Advantage Six
+Ltd.
+
+RISC OS is co-operatively multi-tasked
+--------------------------------------
+
+RISC OS GUI applications must 'yield' to the OS before another process
+can be scheduled. This is done via the Wimp\_Poll system call. In
+NetSurf, this is wrapped inside gui\_multitask(), which handles yielding
+to the OS, getting GUI events from it, and running scheduled functions.
+
+RISC OS has a limited number of shared-namespace file descriptors
+-----------------------------------------------------------------
+
+RISC OS has 255 file handles - and that's it. You can't possibly have
+more files than that open at anyone time, and there is a single pool of
+file handles shared by all processes. Don't leave files open that you
+don't need to keep open, and don't blindly close other handles.
+
+RISC OS has a limited number of shared-namespace socket descriptors
+-------------------------------------------------------------------
+
+Unlike on other operating systems, RISC OS's sockets are allocated from
+a different pool of numbers. They may, for example, overlap with file
+descriptors. Also note that as with file descriptors, there is a single
+pool of them shared by all processes. There's also a limit on the number
+you can have open at once. This can be as low as 64.
+
+RISC OS's environment variables are global to the system
+--------------------------------------------------------
+
+RISC OS uses environment variables extensively: much of the
+configuration of the system is done via them. They are shared by all
+processes. Because of this, RISC OS has a naming convention for them so
+they don't clash. If you really feel the need to use an environment
+variable, you should prefix its name with NetSurf\$.
+
+Memory is valuable
+------------------
+
+RISC OS machines may have as little as 64MB of RAM, and the OS provides
+no support for swap or paging. Additionally, much of the memory
+allocated via malloc() will end up being allocated in what is called a
+Dynamic Area. The upshot of this is that if you fragment the heap too
+much, you've basically wasted memory, and no process will be able to use
+the spaces you have freed.
+
+RISC OS hardware is slow
+------------------------
+
+The fastest RISC OS computer you can buy is a 600MHz ARM clone with no
+floating point and a tiny cache. Make sure your code is tight, but
+remember readability and maintenability is paramount!
+
+RISC OS is delicate and lacks wide-spread memory protection
+-----------------------------------------------------------
+
+It's trivial to take down the entire OS if you're not careful, where on
+other OSes you'd just get a SIGSEGV. Be careful!
+
+RISC OS lacks shared libraries
+------------------------------
+
+While the GTK version of NetSurf's binary is less than 600kB, RISC OS
+has no shared libraries, meaning it's over 3MB. Given the speed of RISC
+OS machines, this is already a problem. If you want to make use of a new
+library, make sure it's not too huge, and that it doesn't depend on a
+dozen other libraries.
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/continuous_integration.mdwn b/continuous_integration.mdwn
new file mode 100644
index 0000000..193d8d9
--- /dev/null
+++ b/continuous_integration.mdwn
@@ -0,0 +1,42 @@
+[[!meta title="Continuous Integration"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2016-02-06T11:38:14Z"]]
+
+
+[[!toc]] The CI system is a jenkins
+instance on <http://ci.netsurf-browser.org/>
+
+The old discussion on [[Autobuilder requirements|autobuilder_requirements]] —
+lists requirements for the new autobuilder.
+
+Master
+------
+
+The master instance is a VPS provided by Mythic beasts.
+
+A VPN between it and all the build slaves provides a network where no
+machines are publicly accessible. This is in addition to the ssh based
+tunnels used to copy data between CI nodes.
+
+The Jenkins install on the master server is a snapshot release version
+
+Slave
+-----
+
+The majority of the build slaves are provided by our own
+[[virtual host server|virtual_host_server]] excepting operating
+systems which cannot be virtualised (principally MAC OS X).
+
+### [[Continuous Integration Debian Jessie Setup|continuous_integration_debian_jessie_setup]]
+
+### [[Continuous Integration Debian Wheezy Setup|continuous_integration_debian_wheezy_setup]]
+
+### [[Continuous Integration OpenBSD Setup|continuous_integration_openbsd_setup]]
+
+### [[Continuous Integration FreeBSD Setup|continuous_integration_freebsd_setup]]
+
+### [[Continuous Integration Haiku Slave Setup|continuous_integration_haiku_slave_setup]]
+
+### [[Continuous Integration Mac OS X Snow Leopard Setup|continuous_integration_mac_os_x_snow_leopard_setup]]
+
+### [[Continuous Integration Mac OS X Yosemite Setup|continuous_integration_mac_os_x_yosemite_setup]]
diff --git a/continuous_integration_debian_jessie_setup.mdwn b/continuous_integration_debian_jessie_setup.mdwn
new file mode 100644
index 0000000..fb794a8
--- /dev/null
+++ b/continuous_integration_debian_jessie_setup.mdwn
@@ -0,0 +1,421 @@
+[[!meta title="Continuous Integration Debian Jessie Setup"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2016-07-06T12:46:14Z"]]
+
+
+[[!toc]]
+
+Debian jessie (8.x) OS install
+------------------------------
+
+### amd64 VDS install from media
+
+[[Virtual server setup|virtual_host_server]]
+
+Install minimal system from netinst CD (attached when VDS is created on
+phoenix) Config options:
+
+- In the "role" selection select "ssh server" and "system utilities"
+ only.
+- The whole disc default partitioning is fine
+- The base user the install insists on creating should be the netsurf
+ user.
+- Boot loader in MBR
+
+Once installed:
+
+- install sudo package and add netsurf user to sudo group
+- edit /etc/default/grub
+
+`GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"`
+
+`# update-grub2`
+
+### arm64 VDS install
+
+[[ARM64 virtual server setup|virtual_host_server_arm64]]
+
+Once installed:
+
+- create netsurf user
+- install sudo package and add netsurf user to sudo group
+- edit /etc/inittab comment pty 3 through 6 and uncomment serial T0
+- enable backports
+
+`echo "deb `[`http://http.debian.net/debian`](http://http.debian.net/debian)` jessie-backports main" > /etc/apt/sources.list.d/backports.list`
+`apt-get update`
+
+- install updated kernel
+
+`apt-get install linux-image-4.3.0-0.bpo.1-arm64`
+
+### Banana Pi
+
+This system is a dual core ARMv7 allwinner using the armhf ABI
+
+Used the install SD media from
+[[http://www.igorpecovnik.com/2014/09/07/banana-pi-debian-sd-image/ Igor Pecovnik|http///www.igorpecovnik.com/2014/09/07/banana-pi-debian-sd-image/_igor_pecovnik]]
+
+- unzip and write raw file to full size SD card.
+
+Once installed:
+
+- first login as root:1234 which will need to be immediately changed
+- use the nand-sata-install script and moved the install to sata disc.
+ The drive needs to be a clean drive with a recognised partition
+ table (DOS or GPT) and a single partition where the OS will be
+ installed.
+- edit /etc/init.d/armhwinfo to remove the toilet dynamic MOTD banner
+- (re)move /etc/bash.bashrc.custom as it issues a lot of unnecessary
+ commands
+- adduser netsurf
+- change /etc/apt/sources.list to point at a local mirror
+- apt-get update
+- apt-get upgrade
+- install sudo package and add netsurf user to sudo group
+
+### Raspberry Pi 2
+
+This system is a quad core ARMv7 Broadcom using the armhf ABI
+
+Used install media from [[http://sjoerd.luon.net/posts/2015/02/debian-jessie-on-rpi2/ Sjored|http///sjoerd.luon.net/posts/2015/02/debian-jessie-on-rpi2/_sjored]]
+
+- unpack onto micro SD card with bmap-tools
+
+`On any debian-based linux type "sudo apt-get install bmap-tools" and install it.`
+`Then type "sudo bmaptool copy --nobmap 'yourlocation/jessie-rpi2.img' /dev/sdx" (Change yourlocation to the location of the .img file and sdx for the letter where the SD is mounted, if you don't know it type "sudo fdisk -l" and look for it).`
+
+Once installed:
+
+- first login as root:debian which will need to be immediately changed
+- Prevent package FLASH-KERNEL UPDATING FROM OFFICIAL REPO WITH APT
+ PINNING
+
+`'touch /etc/apt/preferences.d/flash-kernel' create a new file`
+`'vi /etc/apt/preferences.d/flash-kernel' edit it an add the following lines to it:`
+`Package: flash-kernel`
+`Pin: origin repositories.collabora.co.uk`
+`Pin-Priority: 1000`
+`'apt-cache policy flash-kernel' check if the package is pinned`
+
+- change /etc/apt/sources.list to point at a local mirror
+- apt-get update
+- apt-get upgrade
+- adduser netsurf
+- install sudo package and add netsurf user to sudo group
+
+### Orange Pi PC
+
+This system is a quad core ARMv7 allwinner H3 using the armhf ABI
+
+Used "mini" install media from
+[[http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=342 loboris|http///www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=342_loboris]]
+
+- unpack image and write to micro SD card and configure as per loboris
+ instructions, careful installation steps are not immediately obvious
+
+Once installed:
+
+- first login as orangepi:orangepi which will need to be immediately
+ changed
+
+`* superuser available via sudo -i`
+
+- change /etc/apt/sources.list to point at a local mirror
+- apt-get update
+- apt-get upgrade
+- alter orangepi user to netsurf by editing
+
+`/etc/group (dont forget to replace orangepi on the sudo group)`
+`/etc/passwd`
+`/etc/shadow`
+`mv /home/orangepi /home/netsurf`
+
+Packaged CI worker install
+--------------------------
+
+Do a base OS install
+
+The recommended hostname for CI workers is "ciworker13" this allows us
+to clearly identify CI worker nodes. Note historically we have used
+"cislave1" which has been objected to by several users. See
+[[https://wiki.debian.org/HowTo/ChangeHostname changing hostname|https///wiki.debian.org/howto/changehostname_changing_hostname]] on how to achive this.
+
+On master jenkins use "manage nodes" to create new node. Ensure "remote
+fs root" is set to /var/lib/jenkins add variable JENKINS\_HOME set to
+/var/lib/jenkins
+
+Note: replace arm64 with architecture name as required (armhf etc.)
+
+As superuser:
+
+- create jenkins user
+
+`adduser --system --group --home /var/lib/jenkins/ --disabled-login jenkins`
+
+- Add CI server repo to slave apt sources
+
+`echo "deb `[`http://ci.netsurf-browser.org/debian/`](http://ci.netsurf-browser.org/debian/)` jessie/amd64/" >> /etc/apt/sources.list.d/netsurf-browser.list`
+
+- update repos
+
+`apt-get update`
+
+- install ns-ci-worker package. accept the large package list and the
+ unsigned package install for gcovr and ns-ci-slave
+
+`apt-get install ns-ci-worker`
+
+- edit /etc/default/ns-ci-worker to set the correct url and secret
+ parameters
+- If toolchains are to be built on the node ensure /opt is setup
+ correctly
+
+`mkdir -p /opt/netsurf`
+`chown jenkins:jenkins /opt/netsurf`
+
+- become jenkins user
+
+`su -s/bin/bash - jenkins`
+
+- create ssh keypair (accept defaults - no password)
+
+`ssh-keygen -t rsa -C "netsurf@cislave12.netsurf-browser.org"`
+
+- copy .ssh/id\_rsa.pub from slave to jenkins master node and append
+ to /home/netsurf/.ssh/authorized\_keys
+
+`scp /home/jenkins/.ssh/id_rsa.pub netsurf@ci.netsurf-browser.org:ciworker12_id_rsa.pub`
+
+- exit jenkins user shell
+- start CI worker daemon
+
+`/etc/init.d/ns-ci-worker start`
+
+Manual CI worker install
+------------------------
+
+### required packages
+
+The Netsurf repository has necessary updated packages in it and can be
+accessed by doing the following:
+
+- Add CI server repo to slave apt sources
+
+`echo "deb `[`http://ci.netsurf-browser.org/builds/debian/`](http://ci.netsurf-browser.org/builds/debian/)` jessie/amd64/" >> /etc/apt/sources.list`
+
+- update repos
+
+`apt-get update`
+
+use apt to install these packages:
+
+`openjdk-7-jre-headless `
+`screen `
+`build-essential`
+`ccache`
+`clang`
+`git`
+`pkg-config`
+`check`
+`doxygen`
+`libjson0-dev (from our repo - needs bugfixes `[`http://ci.netsurf-browser.org/builds/debian/`](http://ci.netsurf-browser.org/builds/debian/)`)`
+`libexpat1-dev`
+`libxml-perl`
+`libxml-xpath-perl`
+`lcov`
+`gcovr (from our repo)`
+`gperf`
+`flex`
+`bison`
+`libpng-dev`
+`libjpeg-dev`
+`libmozjs185-dev`
+`libglib2.0-dev`
+`libcurl4-openssl-dev`
+`liblcms1-dev`
+`libxml2-dev`
+`librsvg2-dev`
+`libmng-dev`
+`libgtk2.0-dev`
+`libmozjs-dev`
+
+### config
+
+- on master jenkins use "manage nodes" to create new node. Ensure
+ "remote fs root" is set to /home/netsurf/jenkins
+- create netsurf user
+- as netsurf user:
+ - wget <http://ci.netsurf-browser.org/jenkins/jnlpJars/slave.jar>
+ - run screen
+ - create jenkins-slave.sh
+
+`#!/bin/bash`
+
+`java -Djava.awt.headless=true -jar slave.jar -jnlpUrl `[`http://ci.netsurf-browser.org/jenkins/computer/chimera/slave-agent.jnlp`](http://ci.netsurf-browser.org/jenkins/computer/chimera/slave-agent.jnlp)` -secret 0123456789abcdef01234567890abcdef`
+
+- - run jenkins-slave.sh
+ - create new screen tab
+ - create ssh keypair (accept defaults - no password)
+
+`ssh-keygen -t rsa -C "netsurf@cislave0.netsurf-browser.org"`
+
+- - copy .ssh/id\_rsa.pub from slave to jenkins master node and
+ append to /home/netsurf/.ssh/authorized\_keys
+
+`scp ci.netsurf-browser.org:.ssh/id_rsa.pub .id_rsa.pub`
+`cat id_rsa.pub >> .ssh/authorized_keys`
+
+- - copy .ssh/id\_rsa.pub from master node to slave and append to
+ /home/netsurf/.ssh/authorized\_keys
+ - create reverse-ssh.sh (change tunnel port number!)
+
+`#!/bin/sh`
+
+`ssh -R 22224:localhost:22 netsurf@ci.netsurf-browser.org 'bash -c "while true; do echo .; sleep 60; done"'`
+
+- - run reverse-ssh.sh
+ - on the master create a shell script to use the ssh tunnel
+ connection, thus firewalls etc are moot as long as the slave can
+ connect to the master
+
+`ssh netsurf@localhost -p 22223`
+
+Pbuilder setup
+--------------
+
+This allows a worker to build Debian packages. The worker should be
+installed as a normal CI worker node and then:
+
+as superuser on node:
+
+- apt-get install pbuilder
+- addgroup pbuilder
+- addgroup jenkins pbuilder
+- create /etc/sudoers.d/pbuilder
+
+`jenkins         ALL = NOPASSWD:/usr/sbin/pbuilder`
+
+- visudo and alter Defaults
+
+`Defaults        env_reset,env_keep="DIST ARCH"`
+
+- replace /etc/pbuilderrc
+
+`# this is your configuration file for pbuilder.`
+`# the file in /usr/share/pbuilder/pbuilderrc is the default template.`
+`# /etc/pbuilderrc is the one meant for overwriting defaults in`
+`# the default template`
+`#`
+`# read pbuilderrc.5 document for notes on specific options.`
+`# List of Debian suites.`
+`DEBIAN_SUITES=("sid", "stretch", "jessie", "wheezy", "squeeze")`
+``
+`# List of Ubuntu suites.`
+`UBUNTU_SUITES=("vivid" "utopic" "trusty" "saucy" "raring" "quantal" "precise" "oneiric" "natty" "lucid" "hardy")`
+``
+`# Mirrors to use. Update these to your preferred mirror.`
+`DEBIAN_MIRROR="ftp.uk.debian.org"`
+`UBUNTU_MIRROR="mirrors.kernel.org"`
+``
+`# set a default distribution if none is used.`
+`: ${DIST:="$(lsb_release --short --codename)"}`
+``
+`# set the architecture to the host architecture if none set.`
+`: ${ARCH:="$(dpkg --print-architecture)"}`
+``
+`NAME="$DIST"`
+`if [ -n "${ARCH}" ]; then`
+`    NAME="$NAME-$ARCH"`
+`    DEBOOTSTRAPOPTS=("--arch" "$ARCH" "${DEBOOTSTRAPOPTS[@]}")`
+`fi`
+`BASETGZ="/var/cache/pbuilder/$NAME-base.tgz"`
+`DISTRIBUTION="$DIST"`
+`BUILDRESULT="/var/cache/pbuilder/$NAME/result/"`
+`APTCACHE="/var/cache/pbuilder/$NAME/aptcache/"`
+`BUILDPLACE="/var/cache/pbuilder/build/"`
+``
+`if $(echo ${DEBIAN_SUITES[@]} | grep -q $DIST); then`
+`    # Debian configuration`
+`    MIRRORSITE="http://$DEBIAN_MIRROR/debian/"`
+`    COMPONENTS="main contrib non-free"`
+`    if $(echo "$STABLE_CODENAME stable" | grep -q $DIST); then`
+`        OTHERMIRROR="$OTHERMIRROR | deb $MIRRORSITE $STABLE_BACKPORTS_SUITE $COMPONENTS"`
+`    fi`
+`elif $(echo ${UBUNTU_SUITES[@]} | grep -q $DIST); then`
+`    # Ubuntu configuration`
+`    MIRRORSITE="http://$UBUNTU_MIRROR/ubuntu/"`
+`    COMPONENTS="main restricted universe multiverse"`
+`else`
+`    echo "Unknown distribution: $DIST"`
+`    exit 1`
+`fi`
+
+The architecture is assumed to be the native one from
+
+`dpkg --print-architecture`
+
+This can be set by passing ARCH to pbuilder (useful for i386 maybe?)
+
+for each distribution this node will build for:
+
+- create pbuilder result directory and set ownership permissions
+
+`mkdir -p /var/cache/pbuilder/jessie-armhf/result`
+`chown root:pbuilder /var/cache/pbuilder/jessie-armhf/result`
+`chmod g+w /var/cache/pbuilder/jessie-armhf/result`
+
+- become jenkins user
+
+`su -s/bin/bash - jenkins`
+
+- create pbuilder base for distribution
+
+`sudo DIST=jessie pbuilder create`
+
+- if desired additional packages and config can be made to the base
+ with
+
+`sudo DIST=jessie pbuilder login --save-after-login`
+
+distcc worker node
+------------------
+
+Do a basic OS install but \*not\* a CI worker setup.
+
+A recommended hostname for distcc worker is something like "cicpu0" this
+allows us to use systems as processing node for other purposes than just
+distcc in future. See debians
+[[https://wiki.debian.org/HowTo/ChangeHostname changing hostname|https///wiki.debian.org/howto/changehostname_changing_hostname]] on how to achive this.
+
+The Netsurf repository has necessary updated packages in it and can be
+accessed by doing the following:
+
+- Add CI server repo to slave apt sources
+
+`echo "deb `[`http://ci.netsurf-browser.org/builds/debian/`](http://ci.netsurf-browser.org/builds/debian/)` jessie/amd64/" >> /etc/apt/sources.list`
+
+- update repos
+
+`apt-get update`
+
+- use apt to install these packages:
+
+`build-essential`
+`gcc`
+`clang`
+`distcc`
+
+- edit /etc/default/distcc
+
+`STARTDISTCC="true"`
+`ALLOWEDNETS="192.168.211.0/24"`
+`LISTEN="0.0.0.0"`
+`JOBS="8"`
+
+- start the service
+
+`service distcc start`
+
+- ensure the client has hosts set to use the new worker
+
diff --git a/continuous_integration_debian_wheezy_setup.mdwn b/continuous_integration_debian_wheezy_setup.mdwn
new file mode 100644
index 0000000..9127b32
--- /dev/null
+++ b/continuous_integration_debian_wheezy_setup.mdwn
@@ -0,0 +1,164 @@
+[[!meta title="Continuous Integration Debian Wheezy Setup"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2014-12-20T11:46:57Z"]]
+
+
+[[!toc]]
+
+Debian wheezy (7.0) OS install
+------------------------------
+
+Install minimal system from netinst CD (attached when VDS is created on
+phoenix) Config options:
+
+- In the "role" selection select "ssh server" and "system utilities"
+ only.
+- The whole disc default partitioning is fine
+- The base user the install insists on creating should be the netsurf
+ user.
+- Boot loader in MBR
+
+Once installed:
+
+- install sudo package and add netsurf user to sudo group
+- edit /etc/inittab comment pty 3 through 6 and uncomment serial T0
+
+Packaged Setup for Debian wheezy (7.0)
+--------------------------------------
+
+on master jenkins use "manage nodes" to create new node. Ensure "remote
+fs root" is set to /var/lib/jenkins add variable JENKINS\_HOME set to
+/var/lib/jenkins
+
+As superuser:
+
+- create jenkins user
+
+`adduser --system --group --home /var/lib/jenkins/ --disabled-login jenkins`
+
+- Add CI server repo to slave apt sources
+
+`echo "deb `[`http://ci.netsurf-browser.org/debian/`](http://ci.netsurf-browser.org/debian/)` wheezy/amd64/" >> /etc/apt/sources.list.d/netsurf-browser.list`
+
+- update repos
+
+`apt-get update`
+
+- install ns-ci-slave package. accept the large package list and the
+ unsigned package install for gcovr and ns-ci-slave
+
+`apt-get install ns-ci-slave`
+
+- edit /etc/default/ns-ci-slave to set the correct url and secret
+ parameters
+- If toolchains are to be built on the node ensure /opt is setup
+ correctly
+
+`mkdir -p /opt/netsurf`
+`chown jenkins:jenkins /opt/netsurf`
+
+- become jenkins user
+
+`su -s/bin/bash - jenkins`
+
+- create ssh keypair (accept defaults - no password)
+
+`ssh-keygen -t rsa -C "netsurf@cislave10.netsurf-browser.org"`
+
+- copy .ssh/id\_rsa.pub from slave to jenkins master node and append
+ to /home/netsurf/.ssh/authorized\_keys
+
+`scp /home/jenkins/.ssh/id_rsa.pub netsurf@ci.netsurf-browser.org:cislave10_id_rsa.pub`
+
+- exit jenkins user shell
+- start slave daemon
+
+`/etc/init.d/ns-ci-slave start`
+
+Manual Setup of Debian wheezy (7.0)
+-----------------------------------
+
+### required packages
+
+use apt to install all these. The Netsurf repository has the necessary
+updated packages in it and can be accessed by doing the following:
+
+- Add CI server repo to slave apt sources
+
+`echo "deb `[`http://ci.netsurf-browser.org/builds/debian/`](http://ci.netsurf-browser.org/builds/debian/)` wheezy/amd64/" >> /etc/apt/sources.list`
+
+- update repos
+
+`apt-get update`
+
+`openjdk-7-jre-headless `
+`screen `
+`build-essential`
+`ccache`
+`clang`
+`git`
+`pkg-config`
+`check`
+`doxygen`
+`libjson0-dev (from our repo - needs bugfixes `[`http://ci.netsurf-browser.org/builds/debian/`](http://ci.netsurf-browser.org/builds/debian/)`)`
+`libexpat1-dev`
+`libxml-perl`
+`libxml-xpath-perl`
+`lcov`
+`gcovr (from our repo)`
+`gperf`
+`flex`
+`bison`
+`libpng-dev`
+`libjpeg-dev`
+`libmozjs185-dev`
+`libglib2.0-dev`
+`libcurl4-openssl-dev`
+`liblcms1-dev`
+`libxml2-dev`
+`librsvg2-dev`
+`libmng-dev`
+`libgtk2.0-dev`
+`libmozjs-dev`
+
+### config
+
+- on master jenkins use "manage nodes" to create new node. Ensure
+ "remote fs root" is set to /home/netsurf/jenkins
+- create netsurf user
+- as netsurf user:
+ - wget <http://ci.netsurf-browser.org/jenkins/jnlpJars/slave.jar>
+ - run screen
+ - create jenkins-slave.sh
+
+`#!/bin/bash`
+
+`java -Djava.awt.headless=true -jar slave.jar -jnlpUrl `[`http://ci.netsurf-browser.org/jenkins/computer/chimera/slave-agent.jnlp`](http://ci.netsurf-browser.org/jenkins/computer/chimera/slave-agent.jnlp)` -secret 0123456789abcdef01234567890abcdef`
+
+- - run jenkins-slave.sh
+ - create new screen tab
+ - create ssh keypair (accept defaults - no password)
+
+`ssh-keygen -t rsa -C "netsurf@cislave0.netsurf-browser.org"`
+
+- - copy .ssh/id\_rsa.pub from slave to jenkins master node and
+ append to /home/netsurf/.ssh/authorized\_keys
+
+`scp ci.netsurf-browser.org:.ssh/id_rsa.pub .id_rsa.pub`
+`cat id_rsa.pub >> .ssh/authorized_keys`
+
+- - copy .ssh/id\_rsa.pub from master node to slave and append to
+ /home/netsurf/.ssh/authorized\_keys
+ - create reverse-ssh.sh (change tunnel port number!)
+
+`#!/bin/sh`
+
+`ssh -R 22224:localhost:22 netsurf@ci.netsurf-browser.org 'bash -c "while true; do echo .; sleep 60; done"'`
+
+- - run reverse-ssh.sh
+ - on the master create a shell script to use the ssh tunnel
+ connection, thus firewalls etc are moot as long as the slave can
+ connect to the master
+
+`ssh netsurf@localhost -p 22223`
+
diff --git a/continuous_integration_freebsd_setup.mdwn b/continuous_integration_freebsd_setup.mdwn
new file mode 100644
index 0000000..d2bde05
--- /dev/null
+++ b/continuous_integration_freebsd_setup.mdwn
@@ -0,0 +1,67 @@
+[[!meta title="Continuous Integration FreeBSD Setup"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2014-12-21T02:25:02Z"]]
+
+
+[[!toc]]
+
+Manual setup of FreeBSD 10.1
+----------------------------
+
+Install VM from ISO the usual 1G of RAM and 40G of disc is sufficient.
+The install will ask for root password, also create a jenkins user and
+give it a password and home dir of /var/lib/jenkins .
+
+I had lots of issues trying to get ps2 mouse support working, the usb
+mouse did work but a CI slave does not need it.
+
+enable serial console
+
+`echo 'console="comconsole"' >> /boot/loader.conf`
+
+ensure pkg-config is replaced by the freebsd equivalent
+
+`pkg set -o devel/pkg-config:devel/pkgconf`
+`pkg install -f devel/pkgconf`
+
+### required packages
+
+Ensure all ports were added in the install or mess with ports as needed
+
+The first run of the pkg command will prompt you to install it.
+
+`pkg install curl`
+
+is a good starting place.
+
+Required packages:
+
+`git`
+`gmake`
+`bash`
+`ccache`
+`flex`
+`bison`
+`png`
+`jpeg`
+`wget `
+`gtk2`
+`openssl`
+`p5-HTML-Parser`
+`screen`
+`gperf`
+`rsync`
+`openjdk`
+
+### config
+
+on master jenkins use "manage nodes" to create new node. Ensure "remote
+fs root" is set to /var/lib/jenkins add variable JENKINS\_HOME set to
+/var/lib/jenkins
+
+As superuser on slave:
+
+- create jenkins user
+
+`adduser -home /var/lib`
+
diff --git a/continuous_integration_haiku_slave_setup.mdwn b/continuous_integration_haiku_slave_setup.mdwn
new file mode 100644
index 0000000..cde58e8
--- /dev/null
+++ b/continuous_integration_haiku_slave_setup.mdwn
@@ -0,0 +1,83 @@
+[[!meta title="Continuous Integration Haiku Slave Setup"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2014-11-21T12:14:02Z"]]
+
+
+[[!toc]] install nightly x86 GCC 2
+Hybrid (http://download.haiku-os.org/nightly-images/x86\_gcc2\_hybrid/)
+
+once installed
+
+enable sshd with
+
+`useradd sshd`
+
+default user is "user"
+
+set default password with passwd
+
+` shutdown -r`
+
+restart system
+
+install build deps (possibly some already present)
+
+`pkgman install git curl_devel libpng_devel jpeg_devel openssl_devel libiconv_devel expat_devel gperf html_parser devel:libiconv_x86 devel:libssl_x86 devel:libexpat_x86 cmd:pkg_config_x86 ccache`
+
+ssh keys
+--------
+
+create ssh keypair (accept defaults - no password)
+
+`ssh-keygen -t rsa -C "netsurf@cislave0.netsurf-browser.org"`
+
+copy /boot/home/config/settings/ssh/id\_rsa.pub from slave to jenkins
+master node and append to /home/netsurf/.ssh/authorized\_keys
+
+`scp /boot/home/config/settings/ssh/id_rsa.pub foo@ci.netsurf-browser.org:cislave3.id_rsa.pub`
+
+copy .ssh/id\_rsa.pub from master node to slave and append to
+/boot/home/config/settings/ssh/authorized\_keys
+
+`scp ci.netsurf-browser.org:.ssh/id_rsa.pub id_rsa.pub`
+`cat id_rsa.pub >> /boot/home/config/settings/ssh/authorized_keys`
+
+jenkins slave setup
+-------------------
+
+install java\_x86
+
+`pkgman install openjdk`
+
+edit shell profile /etc/profile.d/openjdk.sh
+
+`` JAVA_CONFIG=`which java-config || which java-config-x86` ``
+`` JAVA_HOME=`$JAVA_CONFIG -H` ``
+`export JAVA_HOME`
+
+create jenkins-slave.sh
+
+`#!/bin/bash`
+
+`# use gcc4 in preference to gcc2 as some libraries use c99 constructs`
+`export PATH=/system/bin/x86:$PATH`
+
+`nohup java -Djava.awt.headless=true -jar slave.jar -jnlpUrl `[`http://ci.netsurf-browser.org/jenkins/computer/cislave3/slave-agent.jnlp`](http://ci.netsurf-browser.org/jenkins/computer/cislave3/slave-agent.jnlp)` -secret 1234 >jenkins-slave.output &`
+
+copy the script to /boot/home/config/settings/boot/launch/ to make it
+start on boot
+
+system can be manually restarted with
+
+`shutdown -r`
+
+current issues
+--------------
+
+As of 24th June 2014 we have some persistant kernel crashes on the
+active CI slave. Bugs are:
+
+<https://dev.haiku-os.org/ticket/10975>
+
+<https://dev.haiku-os.org/ticket/10977>
+
diff --git a/continuous_integration_mac_os_x_setup.mdwn b/continuous_integration_mac_os_x_setup.mdwn
new file mode 100644
index 0000000..9fa4895
--- /dev/null
+++ b/continuous_integration_mac_os_x_setup.mdwn
@@ -0,0 +1,9 @@
+[[!meta title="Continuous Integration Mac OS X Setup"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2016-02-06T11:36:48Z"]]
+
+
+[[!toc]]
+
+1. REDIRECT [[Continuous Integration Mac OS X Snow Leopard Setup|continuous_integration_mac_os_x_snow_leopard_setup]]
+
diff --git a/continuous_integration_mac_os_x_snow_leopard_setup.mdwn b/continuous_integration_mac_os_x_snow_leopard_setup.mdwn
new file mode 100644
index 0000000..5df37ab
--- /dev/null
+++ b/continuous_integration_mac_os_x_snow_leopard_setup.mdwn
@@ -0,0 +1,80 @@
+[[!meta title="Continuous Integration Mac OS X Snow Leopard Setup"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2016-02-06T11:52:56Z"]]
+
+
+[[!toc]]
+
+Manual Installation
+-------------------
+
+Install snow leopard from master discs
+
+Create jenkins user
+
+Install XCode
+
+Software update to latest version
+
+Enable remote login (sshd)
+
+if xcode 4 is installed you need to do:
+
+`sudo xcodebuild -license`
+
+Install [[https://code.google.com/p/tunnelblick/ tunnelblick|https///code.google.com/p/tunnelblick/_tunnelblick]] and configure for
+auto start openvpn to ci master
+
+Download Mac Ports:
+
+`curl -o MacPorts-2.3.1-10.6-SnowLeopard.pkg `[`https://distfiles.macports.org/MacPorts/MacPorts-2.3.1-10.6-SnowLeopard.pkg`](https://distfiles.macports.org/MacPorts/MacPorts-2.3.1-10.6-SnowLeopard.pkg)
+
+double click on the pkg file to install
+
+Update ports database ready for use
+
+`export PATH=/opt/local/bin:/opt/local/sbin:$PATH`
+`sudo port -v selfupdate`
+
+install required packages
+
+`sudo port install git ccache expat openssl curl libjpeg-turbo libpng p5-html-parser screen bison`
+
+As jenkins user:
+
+create jenkins workspace directory
+
+`mkdir jenkins`
+
+download slave jar
+
+`curl -o slave.jar `[`http://ci.netsurf-browser.org/jenkins/jnlpJars/slave.jar`](http://ci.netsurf-browser.org/jenkins/jnlpJars/slave.jar)
+
+Add node on jenkins master CI instance
+
+`Name       cislave7`
+`Description    Mac os X build slave`
+`# of executors 1`
+`Remote FS root /Users/jenkins/jenkins`
+`Labels     i686-apple-darwin10`
+
+take note of secret for use.
+
+create jenkins slave script
+
+`cat << EOF > jenkins-slave.sh`
+`#!/bin/sh`
+
+`java -Djava.awt.headless=true -jar slave.jar -jnlpUrl `[`http://ci.netsurf-browser.org/jenkins/computer/cislave7/slave-agent.jnlp`](http://ci.netsurf-browser.org/jenkins/computer/cislave7/slave-agent.jnlp)` -secret 1234`
+`EOF`
+`chmod a+x jenkins-slave.sh`
+
+create ssh keypair (accept defaults - no password)
+
+`ssh-keygen -t rsa -C "netsurf@cislave8.netsurf-browser.org"`
+
+copy .ssh/id\_rsa.pub from slave to jenkins master node and append to
+/home/netsurf/.ssh/authorized\_keys
+
+start slave daemon in screen
+
diff --git a/continuous_integration_mac_os_x_yosemite_setup.mdwn b/continuous_integration_mac_os_x_yosemite_setup.mdwn
new file mode 100644
index 0000000..8acf882
--- /dev/null
+++ b/continuous_integration_mac_os_x_yosemite_setup.mdwn
@@ -0,0 +1,77 @@
+[[!meta title="Continuous Integration Mac OS X Yosemite Setup"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2016-02-06T14:27:38Z"]]
+
+
+[[!toc]] Install yosemite
+
+set system name in system preferences-\>sharing
+
+Update system in app store
+
+Install Xcode from app store
+
+install xcode commandline tools
+
+`xcode-select --install`
+
+accept licence
+
+`xcodebuild -license`
+
+install java
+
+install [[https://www.macports.org/install.php Mac Ports|https///www.macports.org/install.php_mac_ports]]
+
+Update ports database ready for use
+
+`sudo port -v selfupdate`
+`sudo port upgrade outdated`
+
+install required packages
+
+`sudo port install git ccache expat openssl curl libjpeg-turbo libpng p5-html-parser screen bison pkgconfig`
+
+create jenkins user
+
+enable ssh login for jenkins user in system
+preferences-\>sharing-\>remote login
+
+Add node on jenkins master CI instance.
+
+`Name       cislave14`
+`Description    Mac os X yosemite build slave`
+`# of executors 2`
+`Remote FS root /Users/jenkins/jenkins`
+`Labels     x86_64-apple-darwin14.5.0`
+
+take note of secret and slave url for use in next steps.
+
+As jenkins user:
+
+create jenkins workspace directory
+
+`mkdir jenkins`
+
+download slave jar
+
+`curl -o slave.jar `[`http://ci.netsurf-browser.org/jenkins/jnlpJars/slave.jar`](http://ci.netsurf-browser.org/jenkins/jnlpJars/slave.jar)
+
+create jenkins slave script
+
+`cat << EOF > jenkins-slave.sh`
+`#!/bin/sh`
+
+`java -Djava.awt.headless=true -jar slave.jar -jnlpUrl `[`http://ci.netsurf-browser.org/jenkins/computer/cislave7/slave-agent.jnlp`](http://ci.netsurf-browser.org/jenkins/computer/cislave7/slave-agent.jnlp)` -secret 1234`
+`EOF`
+`chmod a+x jenkins-slave.sh`
+
+create ssh keypair (accept defaults - no password)
+
+`ssh-keygen -t rsa -C "netsurf@cislave8.netsurf-browser.org"`
+
+copy .ssh/id\_rsa.pub from slave to jenkins master node and append to
+/home/netsurf/.ssh/authorized\_keys
+
+start slave daemon in screen
+
diff --git a/continuous_integration_manual_debian_wheezy_setup.mdwn b/continuous_integration_manual_debian_wheezy_setup.mdwn
new file mode 100644
index 0000000..cbea4da
--- /dev/null
+++ b/continuous_integration_manual_debian_wheezy_setup.mdwn
@@ -0,0 +1,9 @@
+[[!meta title="Continuous Integration Manual Debian Wheezy Setup"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2014-09-18T15:54:45Z"]]
+
+
+[[!toc]]
+
+1. REDIRECT [[Continuous Integration Debian Wheezy Setup|continuous_integration_debian_wheezy_setup]]
+
diff --git a/continuous_integration_manual_haiku_slave_setup.mdwn b/continuous_integration_manual_haiku_slave_setup.mdwn
new file mode 100644
index 0000000..0b0a4d4
--- /dev/null
+++ b/continuous_integration_manual_haiku_slave_setup.mdwn
@@ -0,0 +1,9 @@
+[[!meta title="Continuous Integration Manual Haiku Slave Setup"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2014-09-18T15:58:26Z"]]
+
+
+[[!toc]]
+
+1. REDIRECT [[Continuous Integration Haiku Slave Setup|continuous_integration_haiku_slave_setup]]
+
diff --git a/continuous_integration_manual_openbsd_setup.mdwn b/continuous_integration_manual_openbsd_setup.mdwn
new file mode 100644
index 0000000..8a83191
--- /dev/null
+++ b/continuous_integration_manual_openbsd_setup.mdwn
@@ -0,0 +1,9 @@
+[[!meta title="Continuous Integration Manual OpenBSD Setup"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2014-09-18T15:56:47Z"]]
+
+
+[[!toc]]
+
+1. REDIRECT [[Continuous Integration OpenBSD Setup|continuous_integration_openbsd_setup]]
+
diff --git a/continuous_integration_openbsd_setup.mdwn b/continuous_integration_openbsd_setup.mdwn
new file mode 100644
index 0000000..6057e69
--- /dev/null
+++ b/continuous_integration_openbsd_setup.mdwn
@@ -0,0 +1,127 @@
+[[!meta title="Continuous Integration OpenBSD Setup"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2015-05-03T07:53:24Z"]]
+
+
+[[!toc]]
+
+Manual setup of OpenBSD 5.7
+---------------------------
+
+### system prep
+
+- set serial console up for VM
+ <http://www.openbsd.org/faq/faq7.html#SerCon>
+
+### required packages
+
+Ensure all ports were added in the install or mess with ports as needed
+
+`pkg_add -v jdk-1.7.0.71v0 screen-4.0.3p4 ccache gcc-4.9.2p3`
+`pkg_add -v rsync-3.1.1-iconv git check doxygen `
+`pkg_add -v gperf flex bison gtk+2 png jpeg spidermonkey-1.9.2.28p1v0`
+`pkg_add -v wget curl bash gmake p5-HTML-Parser`
+
+### config
+
+Add node on jenkins master CI instance
+
+`Name       cislave6`
+`Description    OpenBSD 5.7 worker`
+`# of executors 1`
+`Remote FS root /var/lib/jenkins`
+`Labels     amd64-unknown-openbsd5.7`
+
+take note of secret for use.
+
+add jenkins user
+
+`mkdir /var/lib`
+`adduser -home /var/lib`
+
+login as jenkins user
+
+download slave jar
+
+`curl -o slave.jar `[`http://ci.netsurf-browser.org/jenkins/jnlpJars/slave.jar`](http://ci.netsurf-browser.org/jenkins/jnlpJars/slave.jar)
+
+create jenkins slave script
+
+`cat << EOF > jenkins-slave.sh`
+`#!/bin/sh`
+
+`java -Djava.awt.headless=true -jar slave.jar -jnlpUrl `[`http://ci.netsurf-browser.org/jenkins/computer/cislave6/slave-agent.jnlp`](http://ci.netsurf-browser.org/jenkins/computer/cislave6/slave-agent.jnlp)` -secret 1234`
+`EOF`
+`chmod a+x jenkins-slave.sh`
+
+create ssh keypair (accept defaults - no password)
+
+`ssh-keygen -t rsa -C "netsurf@cislave8.netsurf-browser.org"`
+
+copy .ssh/id\_rsa.pub from slave to jenkins master node and append to
+/home/netsurf/.ssh/authorized\_keys
+
+start slave daemon in screen
+
+Manual setup of OpenBSD 5.5
+---------------------------
+
+### required packages
+
+Ensure all ports were added in the install or mess with ports as needed
+
+`pkg_add -v jdk-1.7.0.21p2v0  screen-4.0.3p4 ccache gcc-4.8.2p2`
+`pkg_add -v rsync-3.1.0-iconv git check doxygen `
+`pkg_add -v gperf flex bison gtk+2 png jpeg spidermonkey-1.9.2.28p1v0`
+`pkg_add -v wget curl bash gmake p5-HTML-Parser`
+
+### config
+
+- on master jenkins use "manage nodes" to create new node. Ensure
+ "remote fs root" is set to /var/lib/jenkins add variable
+ JENKINS\_HOME set to /var/lib/jenkins
+- As superuser on slave
+ - mkdir /var/lib
+ - create jenkins user
+
+`adduser -home /var/lib`
+
+Manual setup of OpenBSD 5.4
+---------------------------
+
+### required packages
+
+Ensure all ports were added in the install or mess with ports as needed
+
+`jdk-1.7.0.21v0`
+`screen-4.0.3p3`
+`ccache`
+`gcc-4.8.1p2`
+`rsync-3.0.9p3-iconv`
+`git`
+`check`
+`doxygen`
+`gperf`
+`flex`
+`bison`
+`gtk+2`
+`png`
+`jpeg`
+`spidermonkey-1.9.2.28p0v0`
+`wget`
+`curl`
+`bash`
+`gmake`
+`p5-HTML-Parser`
+
+### config
+
+- on master jenkins use "manage nodes" to create new node. Ensure
+ "remote fs root" is set to /var/lib/jenkins add variable
+ JENKINS\_HOME set to /var/lib/jenkins
+- As superuser on slave
+ - mkdir /var/lib
+ - create jenkins user
+
+`adduser -home /var/lib`
+
diff --git a/continuous_integration_setup_haiku_slave.mdwn b/continuous_integration_setup_haiku_slave.mdwn
new file mode 100644
index 0000000..35b4348
--- /dev/null
+++ b/continuous_integration_setup_haiku_slave.mdwn
@@ -0,0 +1,7 @@
+[[!meta title="Continuous Integration Setup Haiku Slave"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2014-06-20T15:03:32Z"]]
+
+
+[[!toc]] **Page was empty**
+
diff --git a/css_media_queries.mdwn b/css_media_queries.mdwn
new file mode 100644
index 0000000..cbd91f7
--- /dev/null
+++ b/css_media_queries.mdwn
@@ -0,0 +1,116 @@
+[[!meta title="Css media queries"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2015-04-03T13:09:32Z"]]
+
+
+[[!toc]]
+
+irc discussion
+==============
+
+**jmb** if this is in libcss, then you probably only need to alter
+parseMediaList (and friends)
+
+**kyllikki** oh thats a thought, this should probably be an interface in
+libcss rather than open coded in the browser
+
+**jmb** seems reasonable, given libcss needs it too
+
+**kyllikki** I worked my way to where it was currently done and it
+extracts the entry from the link and does string messing on it
+
+**jmb** yeah; that's hideous, and should die
+
+**kyllikki** ok so how ought we to do it?
+
+**jmb** first, we need to change how libcss represents media. currently,
+it's a bitfield. which clearly doesn't work for media queries. so, that
+needs to be an object, instead. which probably isn't much work to
+change. then, in libcss' parser, parseMediaList will need to change to
+understand the new media query grammar
+
+**kyllikki** ok, i think i know what you mean. thats just altering the
+internal libcss representation?
+
+**jmb** mostly. And then, finally, we need to expose an api to allow a
+client to parse an arbitrary string as if it were a media query list.
+that should return the new media object. that's needed, because of
+
+` `<link type="stylesheet" media="<query>`">`
+
+**kyllikki** right, which is all we currently support right?
+
+**jmb** libcss supports @media rules.
+
+<style markdown="1">
+may also have a media attribute. though I don't recall if NetSurf
+supports that.
+
+**kyllikki**
+<https://html.spec.whatwg.org/multipage/semantics.html#the-style-element>
+it does indeed carry it and netsurf does not support it
+
+**kyllikki** so how does libcss make decisions about applying the rules?
+it obviously has no knowledge of any of the state
+
+**jmb** see the selection api. when you add a stylesheet to a selection
+context, the client provides the media it applies to (e.g.
+css\_select\_ctx\_append\_sheet)
+
+**kyllikki** so we have netsurf call the new libcss api to get the media
+object and pass that instead?
+
+**jmb** seems reasonable
+
+**kyllikki** but how does libcss make an actual decision whether to
+apply the styling or not?
+
+**jmb** there needs to be a way to construct one computationally, too
+(rather than from string), as the client must also pass a media
+descriptor into css\_select\_style. which I think answers your question
+:)
+
+**kyllikki** not sure how they are comparable though. I guess thats
+implementation detail
+
+**jmb** likely. today's implementation uses & .the basic concept is:
+style information has associated metadata that says what kinds of media
+it applies to
+
+**kyllikki** I guess we have to figure that providing a media object
+that represents the browsers current media state is enough to make media
+selection comparisons
+
+*'jmb* and then, when selecting a style, you know what media you are
+selecting for, and can then include/exclude specific style information
+based on that. and the metadata either applies to the whole of a
+stylesheet (be that <link> or
+
+<style markdown="1">
+), or it applies to part of a stylesheet (through the use of @media
+within the CSS). libcss already has all the plumbing for that logic; it
+just doesn't have a rich enough mechanism for expressing media
+information. or the parse implementation for media queries ;)
+
+**kyllikki** so
+
+- first up is moving the existing media api to be an object
+- then ensuring the browser creates such objects where needed and
+ passes them
+- only then should the parse api in libcss be expanded, given it
+ already has one for @media and we want it to be universal
+
+**jmb** ya
+
+**kyllikki** so we are already just fucking doing it wrong
+
+**jmb** well, media queries weren't mature enough when libcss was first
+designed for them to be considered and all the stuff in NS mostly
+predates libcss, anyway -- certainly that media attribute parsing on
+link elements has been around forever
+
+**kyllikki** yeah but we always add sheets fetched from the dom as
+screen!
+
+**jmb** "oops" :)
+
diff --git a/developer_weekend__jan_2014_.mdwn b/developer_weekend__jan_2014_.mdwn
new file mode 100644
index 0000000..caf32e9
--- /dev/null
+++ b/developer_weekend__jan_2014_.mdwn
@@ -0,0 +1,72 @@
+[[!meta title="Developer Weekend (Jan 2014)"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2013-12-18T11:25:18Z"]]
+
+
+[[!toc]]
+
+When
+----
+
+To be held afternoon of 3rd to afternoon of 5th
+
+Who
+---
+
+Anyone interested in contributing to NetSurf, we generally have small
+discussion times and a great deal of hacking time. Previous events have
+crammed in excess of 20 hours working time into the weekend.
+
+You **must** confirm your attendance no later than the 2nd of January
+2014 so i can update the security list. We cannot offer travel
+sponsorship to the event and free accommodation is limited (and basic).
+
+Currently confirmed are
+
+- Vincent Sanders
+- Michael Drake
+- Daniel Silverstone
+- Rob Kendrick
+- John Mark-Bell
+
+Where
+-----
+
+At the Collabora Cambridge offices: Kett house Station Road Cambridge
+
+CB1 2JH
+
+<http://goo.gl/maps/iOb9R>
+
+This venue has easy access from the railway station and is a twenty
+minute walk from the city cenre where national express coaches stop.
+Nearest airport is Stanstead and the railway provides good links.
+
+Vincent has arranged to have accommodation for two people. More might be
+accommodated if they do not mind sleeping bags on the floor. Vincent
+also has a car and will be designated driver.
+
+Agenda
+------
+
+List of ideas to consider and/or work on, if they've not already been
+addressed:
+
+- Forms to use LibDOM
+- New layout engine discussion
+- State of JS discussion
+- More LibCSS work (style interning & sharing)
+- Release process was a mad rush for 3.0
+ - Do we need to sort anything out?
+ - Non RISC OS platforms still haven't had a 3.0 release on our
+ site.
+ - Sort out the autobuilder generating releases
+- Can LibDOM be optimised?
+- Hubbub is years behind spec, and causing real bugs.
+- media and GStreamer 1.0 integration
+- libjpeg turbo
+- haru pdf integration
+- printing
+- Any other 3.1 blockers?
+- Urgent bugs?
+
diff --git a/developer_weekend__mar_2010_.mdwn b/developer_weekend__mar_2010_.mdwn
new file mode 100644
index 0000000..2e7b917
--- /dev/null
+++ b/developer_weekend__mar_2010_.mdwn
@@ -0,0 +1,30 @@
+[[!meta title="Developer Weekend (Mar 2010)"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2016-09-21T10:30:48Z"]]
+
+
+[[!toc]]
+
+Goals for NetSurf
+-----------------
+
+ 1. Complete jmb/newcache
+ 2. Fix favicons, godsdamnit
+ 3. Refactor initialisation to unthread it slightly
+ -- Make ParserUtils build aliases in, and refactor Hubbub and thus netsurf to not pass it in.
+ 4. Plan the 2.5 release -- RM=vince
+ -- RISC OS, Gtk/Linux (Ubuntu/Debian packages?), Framebuffer?, Amiga (if Chris is ready).
+ -- Bug François about BeOS/Haiku port
+ -- Check libraries and prepare releases for them
+ 5. Consider renaming /my_?realloc/i
+ 6. Plan the abstract IO streams thingy
+
+
+
+ If we have time for the following, we've not done the above properly:
+
+
+ Examine use of libxml tree thingy and see if we can magically replace them with lwc_string
+ -- If we can, hubbub string interning is worth doing at this time.
+
+ Bring hubbub up to html5 again
diff --git a/developer_weekend__nov_2012_.mdwn b/developer_weekend__nov_2012_.mdwn
new file mode 100644
index 0000000..b9af068
--- /dev/null
+++ b/developer_weekend__nov_2012_.mdwn
@@ -0,0 +1,22 @@
+[[!meta title="Developer Weekend (Nov 2012)"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2012-11-01T16:00:28Z"]]
+
+
+[[!toc]] List of ideas to consider
+and/or work on, if they've not already been addressed:
+
+- <about:testament> to include library versions
+- Release automation
+- Purge LibXML usage
+- Migrate previous release tags in git repo
+- Handle LINK, META, STYLE, etc tags as they're added to the DOM.
+- Examine porting spidermonkey to RO
+- LibDOM optimisation
+ - <http://www.netsurf-browser.org/temp/Profiles>
+ - \_dom\_node\_dispatch\_event takes \>8% causing some of
+ post-libDOM speed regression
+ - CSS selection still dominates
+ - CSS parse takes some time too.
+- More?
+
diff --git a/developer_weekend__nov_2014_.mdwn b/developer_weekend__nov_2014_.mdwn
new file mode 100644
index 0000000..dfe9386
--- /dev/null
+++ b/developer_weekend__nov_2014_.mdwn
@@ -0,0 +1,182 @@
+[[!meta title="Developer Weekend (Nov 2014)"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2014-11-21T17:41:48Z"]]
+
+
+[[!toc]] There will be a NetSurf
+developer weekend on 14, 15, 16 November 2014 in Manchester, hosted at
+the offices of Codethink.
+
+People
+------
+
+- jmb
+- Kinnison
+- kyllikki
+- rjek
+- tlsa
+
+Stuff
+-----
+
+Some things that may be discussed or worked on include:
+
+- Review, fix and merge GSoC Hubbub work
+- Testing
+ - Layout: bitmap export via framebuffer frontend, and comparison
+ - Browser: scripting monkey front end
+- Current state of JS
+ - Duktape? (Quack.)
+- URLdb rewrite
+- Current state of core browser API
+- New layout engine planning
+- Squashing old bugs
+- Filterable logging stuff
+- Performance
+- NetSurf to core buildsystem
+
+Discussions
+-----------
+
+### Libraries
+
+- Vince recently split out utf8proc and all present hurrahed.
+- Libharu appears to be abandonware -- Do we want to take it on, or do
+ we want to drop it? Decision is to drop it for now, and worry about
+ it again when we have paginating layout
+- Break out most of utils/\* and shunt the rest around? -- Non-urgent
+ but not vetoed (call it libnsutils)
+ - Officially, John-Mark Bell acknowledges he's okay to re-license
+ his code as MIT/Expat
+ - Officially, Daniel Silverstone acknowledges he's okay to
+ re-license his code as MIT/Expat
+ - Officially, Rob Kendrick acknowledges he's okay to re-license
+ his code as MIT/Expat
+ - Officially, Michael Drake acknowledges he's okay to re-license
+ his code as MIT/Expat
+ - Officially, Vincent Sanders acknowledges he's okay to re-license
+ his code as MIT/Expat
+ - Missing permissions: Chris Young, Achal-Aggarwal, Adrian Lees,
+ Adrien Destuegues, Andrew Duffell, Andrew Sidwell, Andrew
+ Timmins, Anthony J. Bentley, Chris Williams, François Revol,
+ James Bursa, James Shaw, Jeffrey Lee, John Tytgat, Kevin Bagust,
+ Matthew Hambley, Mike Lester, Ole Loots, Philip Pemberton, Phil
+ Mellor, Richard Wilson, Rob Jackson, Sean Fox, Steve Fryatt,
+ Sven Weidauer
+- Toolchains
+ - Atari is bugged
+ - libcurl/openssl updates are often and annoying
+ - We need to lorry all the things -- Daniel to assist
+ - GCCSDK not compilable with modern ubuntu (14.04) currently
+ (maybe update?) (Wheezy works)
+- Michael has a load of libcss stuff he hasn't pushed because he's a
+ silly moo.
+- TODO: come back and think about hubbub
+
+### URLDB
+
+1. URL (normalised fragmentless nsurl) -\> key/value store (avec
+ \$indices of various smells)
+2. Cookie jar
+3. Password bucket
+4. Autocompletion database
+5. hostname pattern -\> key/value store
+
+This should be part of libnsutils
+
+Further design discussion at that time.
+
+### Layout
+
+libfandango
+
+layout context hangs off a DOM document
+
+Needs:
+
+- Render API (potentially extended with compositing)
+- Font Metrics API
+- Scheduler
+- CSS handling
+- Event injection API?
+
+Research:
+
+- Text layout algorithms
+- CSS3 features and impact vs. currently understood layout
+
+Deep thought:
+
+- inlines
+
+### JavaScript
+
+Vince is concerned about nsgenbind -- He feels the idl vs. bnd thing
+might be a pain. There are two branches, one in nsgenbind and one in
+NetSurf which need finishing. Basically restructuring the output. This
+is idle from 12 months ago and needs adopting.
+
+A C mirror of the IDL object model has to be constructed in order that
+we can then bind to an engine.
+
+Duktape (finally released in October 2014) lacks a lazy evaluation
+model. This means that we'd have to build 400 prototypes up front on
+every engine initialisation. Expensive in time and memory (can we
+perhaps handle this with duktape threads?)
+
+Spidermonkey JSVERSION is not Spidermonkey's API version -- oopsie
+
+Our Spidermonkey API version is, unfortunately orphaned (1.7 is pre-NSPR
+and we use this everywhere but Linux) 1.8 and 1.85 are post-NSPR and are
+the last separable library releases of spidermonkey (and here is the
+orphaning). Between 1.7 and 1.8[5] we have significant API/ABI
+differences. We currently "patch" this with a header file full of
+macros. 1.85 actually refers to the javascript version not spidermonkey.
+We're not seeing API stability and we cannot build against more modern
+Spidermonkey
+
+We'd like to split out spidermonkey version and make the macros use
+those. Unfortunately pkg-config is a tad pants here due to missing
+version information.
+
+Perhaps we need someone (not Vince to save his brain) to research
+duktape's status, capabilities and write a mini report for Vince.
+
+Ultimate goal would be something like libnsjavascript which builds on
+top of duktape, contains the bindings, and abstracts all of that out of
+the netsurf repository, so that netsurf simply ends up gluing
+browser\_window, libnsjavascript, the dom it got content and fandango
+together.
+
+### Buildsystem
+
+1. Core buildsystem -\> triplets
+ - BUILD/HOST/TARGET
+ - Move the warning flags into the core
+ - If a platform lacks a triplet, inventorizificate one.
+
+1. Port NetSurf to the core build system
+ - May need extensions to core build
+ - May be feature discovery stuff
+ - Ensure that testrunner can run any of the random
+ mini-test-suites we have in NetSurf currently
+
+So core-buildsystem gains pkg-config.mk kinda thing
+
+Migration of NetSurf to core build system may be predicated on moving
+platform content from frontends into libnsutils
+
+### Core Window Thing
+
+Coalescence of all core vs. frontend window abstractions:
+
+1. Browser Window
+2. Treeviews
+3. Local history
+
+Approaches:
+
+1. Everything is a browser window (abuse Content model)
+2. Have a 'Window' superclass, move most interaction to that
+ abstraction, browser\_window is effectively a subclass
+
diff --git a/developer_weekend__nov_2016_.mdwn b/developer_weekend__nov_2016_.mdwn
new file mode 100644
index 0000000..7e53553
--- /dev/null
+++ b/developer_weekend__nov_2016_.mdwn
@@ -0,0 +1,36 @@
+[[!meta title="Developer Weekend (Nov 2016)"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2016-09-21T10:04:30Z"]]
+
+
+[[!toc]]
+
+People
+------
+
+Confirmed:
+
+- John-Mark Bell
+- Michael Drake
+- Vincent Sanders
+- Daniel Silverstone
+
+Unknown:
+
+- Rob Kendrick
+- Chris Young
+- ?
+
+Agenda
+------
+
+### Discussions
+
+- urldb/metadata handling
+- ?
+
+### Possible work items
+
+- LibCSS media queries
+- JavaScript
+
diff --git a/development_plan.mdwn b/development_plan.mdwn
new file mode 100644
index 0000000..c9e8f55
--- /dev/null
+++ b/development_plan.mdwn
@@ -0,0 +1,98 @@
+[[!meta title="Development Plan"]]
+[[!meta author="Chris"]]
+[[!meta date="2014-05-11T18:53:19Z"]]
+
+
+[[!toc]] This is a planning
+document covering NetSurf development and release goals.
+
+General
+-------
+
+Historical NetSurf 2 and before
+-------------------------------
+
+These editions are now completely obsolete and upgrading is recommended.
+
+The SVN revision control system and RISC OS only autobuilder were used
+to provide rudimentary CI.
+
+Releases were principally manual in nature and were oriented around
+stability and incremental improvements.
+
+Development concentrated on expanding functionality in a progression
+towards important core functionality.
+
+Major completed milestones in the 2.x series were:
+
+- The Hubbub parse library and integrating into NetSurf
+- The LibCSS CSS library and integation into NetSurf
+
+NetSurf 3
+---------
+
+This is the current release series where development is concentrated.
+
+We use git for our [control
+system](http://git.netsurf-browser.org|source) and have a full multi
+platform [Integration](http://ci.netsurf-browser.org/|Continuous)
+system.
+
+### Improvements in 3.0
+
+The first release in the 3 series had several important technical
+improvements the main ones were:
+
+- LibDOM Document Object Model library completed and integrated with
+ NetSurf
+- Libraries using the core buildsystem
+- Script support including Spidermonkey javascript interpreter and
+ basic DOM bindings
+- Integrated frame support
+- Integrated core treeview allowing for all frontends to benefit from
+ global history, bookmarks, cookie management
+
+### The 3 series development overview
+
+The focus of this series will be on:
+
+- improving speed and memory efficiency
+- improvement of user interaction, e.g. with form widgets
+- treeview improvements.
+- Improve url database handling
+- Improve coockie handling
+- Improving DOM integration
+- No major improvements are planned for the layout engine until
+ NetSurf 4.0.
+- APNGs are already used in the wild (unlike MNG). While we can
+ display the first frame, thanks to PNG backwards compatibility, it
+ would be good to support the animation extension.
+- We have always put XHTML though an HTML parser, which works well
+ enough currently, but it will be good to handle XHTML properly.
+
+### Active 3 release
+
+We maintain a page for the forthcoming release listing specific issues
+for that release.
+
+Next release will be [[NetSurf_3.2|netsurf_3.2]]
+
+Netsurf 4
+---------
+
+The focus of this release will be a
+[[new layout engine|layout]]. The new layout engine
+will enable dynamic changes to pages such as `:hover`, reflowing for
+scrollbar insertion.
+
+It will also add support for features missing from the old layout engine
+such as `z-index` and `vertical-align`.
+
+Javascript DOM integration should be completed and use the dynamic
+layout capabilities.
+
+### Core features
+
+- [[New layout engine|layout]], capable of dynamic
+ changes
+
diff --git a/disc_caching_and_history.mdwn b/disc_caching_and_history.mdwn
new file mode 100644
index 0000000..7e84c21
--- /dev/null
+++ b/disc_caching_and_history.mdwn
@@ -0,0 +1,34 @@
+[[!meta title="Disc Caching and History"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2009-07-08T14:34:46Z"]]
+
+
+[[!toc]] This page contains ideas
+for adding a disk cache and improving browsing history.
+
+Aims
+----
+
+- Faster page loading using a disk cache
+- Navigating local or global history will show page exactly as it was
+- Groundwork for exciting future features like :-
+- "This page has changed since your last visit 3 minutes ago!"
+- Offline browsing
+- Go back to the past
+- Highlight new text / diff
+- ???
+
+Ideas
+-----
+
+- Each retrieved resource is assigned an id (could just be an
+ incrementing counter) (so the id refers to a URL at a particular
+ time and as the result of a particular GET or POST)
+- Almost everything refers to those ids instead of URLs (pages with
+ objects, local history, global history)
+- Disk caching can be switched on or off (for devices without storage,
+ private mode, etc.)
+- Disk cache stores headers, data, various metadata, ids of objects it
+ uses
+- Memory cache remains (but modified to be like disk cache)
+
diff --git a/documentation.mdwn b/documentation.mdwn
new file mode 100644
index 0000000..aee953b
--- /dev/null
+++ b/documentation.mdwn
@@ -0,0 +1,27 @@
+[[!meta title="Documentation"]]
+[[!meta author="DanielSilverstone"]]
+[[!meta date="2012-07-01T07:10:01Z"]]
+
+
+[[!toc]]
+
+|colspan=2 style="background: gray; color: white" | NetSurf Code Documentation|
+|-----------------------------------------------------------------------------|
+|Organization and Conventions|1. [[Modular coding style|documentation/modular_coding_style]]
+2. [[Directory structure|documentation/directory_structure]]
+3. [[Error handling|documentation/errors]]
+4. [[Memory management|documentation/memory]]|
+|Features|1. [[Content handling|documentation/contents]]
+2. [[Layout engine|documentation/layout]]
+3. [[Frames|documentation/frames]]
+4. [[Printing|documentation/printing]]
+5. [[Treeview|documentation/treeview]]|
+|Platform-specifics|1. [[Front end functions|documentation/front_end_functions]]
+2. [[Caveat RISC OS|caveat_risc_os]]
+3. [[GTK interface|documentation/gtk_interface]]|
+|References|1. [[References|documentation/references]]
+2. [[Getting started|documentation/gettingcoding]] (with coding on
+ NetSurf)
+3. [[Git Cheat Sheet|documentation/gitcheatsheet]]|
+
+
diff --git a/documentation/buildingforamigaos.mdwn b/documentation/buildingforamigaos.mdwn
new file mode 100644
index 0000000..23fcb26
--- /dev/null
+++ b/documentation/buildingforamigaos.mdwn
@@ -0,0 +1,57 @@
+[[!meta title="Documentation/BuildingForAmigaOS"]]
+[[!meta author="Chris"]]
+[[!meta date="2016-06-27T19:13:10Z"]]
+
+
+[[!toc]]
+
+Building NetSurf for AmigaOS 3.5+ (m68k-unknown-amigaos)
+========================================================
+
+Rough notes on how to build NetSurf for AmigaOS 3.5+. There may be an
+easier way, but this works for me!
+
+Building for AmigaOS 4.x (ppc-amigaos) is similar.
+
+Toolchain
+---------
+
+Toolchain is built using something like this:
+
+`git clone `[`git://git.netsurf-browser.org/toolchains.git`](git://git.netsurf-browser.org/toolchains.git)
+`cd ./toolchains/m68k-unknown-amigaos`
+`sudo make`
+`cd ../sdk`
+`sudo GCCSDK_INSTALL_CROSSBIN=/opt/netsurf/m68k-unknown-amigaos/cross/bin GCCSDK_INSTALL_ENV=/opt/netsurf/m68k-unknown-amigaos/env make`
+
+Libraries
+---------
+
+Make/install buildsystem first!
+
+Clone and build the libraries with:
+
+`make HOST=m68k-unknown-amigaos`
+`sudo make HOST=m68k-unknown-amigaos install`
+
+NetSurf
+-------
+
+Build NetSurf with
+
+`make TARGET=amigaos3`
+
+Building under Cygwin
+=====================
+
+Cygwin is a bit troublesome, as the toolchain setup is designed for
+Debian 64-bit. Cygwin apparently works but there are two changes
+required (I know nothing about these changes beyond what's here):
+
+- c-parse.in: I must replace two occurrences of YYLEX by yylex()
+- collect2.c: I must add 0666 as parameter of the open for
+ redir\_handle.
+
+There is a script to build NetSurf for AmigaOS3 under Cygwin here:
+<https://github.com/DNADNL/NetScript>
+
diff --git a/documentation/buildingforriscosquickstart.mdwn b/documentation/buildingforriscosquickstart.mdwn
new file mode 100644
index 0000000..5a4d53a
--- /dev/null
+++ b/documentation/buildingforriscosquickstart.mdwn
@@ -0,0 +1,85 @@
+[[!meta title="Documentation/BuildingForRISCOSQuickStart"]]
+[[!meta author="Sprow"]]
+[[!meta date="2015-08-11T21:40:32Z"]]
+
+
+[[!toc]]
+
+<strong>Note:</strong>
+<span style="text-indent:2em; display: inline-block;">Commands proceeded
+by \# should be done as root</span>
+<span style="text-indent:2em; display: inline-block;">Commands proceeded
+by \$ should be done as your normal user</span>
+Depending on how your system is configured you may need to log in as
+root, or you may be able to use sudo.
+
+Building for the first time
+---------------------------
+
+### Install Debian or Ubuntu in a Virtual Machine, such as Virtual Box or kvm.
+
+Follow the rest of these instructions inside it.
+
+An example [guide for installing Debian in virtualbox on
+windows](http://www.brianlinkletter.com/installing-debian-linux-in-a-virtualbox-virtual-machine/)
+is linked here, however this is for Debian 6 but if followed current
+Debian (version 8) should be installed.
+
+### Get a copy of env.sh, which manages a build environment for you, and have it install the dependencies.
+
+`$ wget `[`http://git.netsurf-browser.org/netsurf.git/plain/Docs/env.sh`](http://git.netsurf-browser.org/netsurf.git/plain/Docs/env.sh)
+`# source env.sh`
+`# ns-package-install`
+
+### Download and install the latest arm-unknown-riscos toolchain from <http://ci.netsurf-browser.org/builds/toolchains/>
+
+<strong>Note :</strong>
+The pre-compiled toolchains are for x86\_64 (64 bit x86 processors) and
+therefore require the Virtual Machine be installed 64Bit
+
+`$ wget `[`http://ci.netsurf-browser.org/builds/toolchains/arm-unknown-riscos-2015-03-19_14-33-21.tar.xz`](http://ci.netsurf-browser.org/builds/toolchains/arm-unknown-riscos-2015-03-19_14-33-21.tar.xz)
+`# tar xvf arm-unknown-riscos-2015-01-15_13-14-02.tar.xz -C /`
+
+### Clone all the NetSurf repositories. This creates a workspace for you to work in, /home/yourname/dev-netsurf/workspace
+
+`$ TARGET_ABI=arm-unknown-riscos source env.sh`
+`$ ns-clone`
+
+### Build and install the libraries
+
+`$ ns-pull-install`
+
+### Switch to your newly created NetSurf workspace
+
+`$ rm env.sh`
+`$ cd ~/dev-netsurf/workspace`
+`$ TARGET_ABI=arm-unknown-riscos source env.sh`
+
+### Build NetSurf
+
+`$ cd netsurf`
+`$ make TARGET=riscos`
+
+### Zip up the build for transfer to your RISC OS machine
+
+`$ make TARGET=riscos package`
+
+You can alternatively use Sunfish to access your VM via NFS and run your
+build directly, but that is outside the scope of this document.
+
+To confirm you're running what you just build, you can visit
+<about:testament> in NetSurf to view information about the build.
+
+Updating and building again
+---------------------------
+
+Next time you come to build NetSurf, remember to execute this before
+working with the workspace:
+
+`$ TARGET_ABI=arm-unknown-riscos source env.sh`
+
+You can re-pull and re-install the libraries (to get the latest
+versions) by simply reexecuting this:
+
+` $ ns-pull-install`
+
diff --git a/documentation/contents.mdwn b/documentation/contents.mdwn
new file mode 100644
index 0000000..dea18da
--- /dev/null
+++ b/documentation/contents.mdwn
@@ -0,0 +1,148 @@
+[[!meta title="Documentation/Contents"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2010-03-01T02:56:11Z"]]
+
+
+[[!toc]] The modules in the content
+directory provide the infrastructure for fetching data, managing it in
+memory, and converting it for display.
+
+Contents
+--------
+
+The data related to each URL used by NetSurf is stored in a 'struct
+content' (known as a "content"). A content contains
+
+- a 'content type' which corresponds to the MIME type of the URL (for
+ example CONTENT\_HTML, CONTENT\_JPEG, or CONTENT\_OTHER)
+- a status (for example LOADING, DONE, or ERROR)
+- type independent data such as the URL and raw source bytes
+- a union of structs for type dependent data (for example 'struct
+ content\_html\_data')
+
+Contents are stored in a global linked list 'content\_list', also known
+as the "memory cache".
+
+The content\_\* functions provide a general interface for handling these
+structures. They use a table of handlers to call type-specific code
+('handler\_map'). For example, content\_redraw() may call html\_redraw()
+or nsjpeg\_redraw() depending on the type of content.
+
+Each content has a list of users. A user is a callback function which is
+sent a message (called) when something interesting happens to the
+content (for example, it's ready to be displayed). Examples of users are
+browser windows (of HTML contents) and HTML contents (of JPEG contents).
+
+Some content types may not be shared among users: an HTML content is
+dependent on the width of the window, so sharing by two or more windows
+wouldn't work. Thus there may be more than one content with the same URL
+in memory.
+
+Content status
+--------------
+
+The status of a content follows a fixed order. Certain content functions
+change the status, and each change of status results in a message to all
+users of the content:
+
+- content\_create() creates a content in status TYPE\_UNKNOWN
+- content\_set\_type() takes a content TYPE\_UNKNOWN to one of
+ - LOADING (sends optional MSG\_NEWPTR followed by MSG\_LOADING)
+ - ERROR (sends MSG\_ERROR)
+- content\_process\_data() takes LOADING to one of
+ - LOADING (no message)
+ - ERROR (MSG\_ERROR)
+- content\_convert() takes LOADING to one of
+ - READY (MSG\_READY)
+ - DONE (MSG\_READY, MSG\_DONE)
+ - ERROR (MSG\_ERROR)
+- a content can move from READY to DONE by itself, for example HTML
+ contents become DONE when all images are fetched and the document is
+ reformatted (MSG\_DONE)
+- content\_stop() aborts loading of a READY content and results in
+ status DONE (MSG\_DONE)
+
+Type functions
+--------------
+
+The type-specific functions for a content are as follows (where 'type'
+is replaced by something):
+
+- type\_create():: called to initialise type-specific fields in the
+ content structure. Optional.
+- type\_process\_data():: called when some data arrives. Optional.
+- type\_convert():: called when data has finished arriving. The
+ content needs to be converted for display. Must set the status to
+ one of CONTENT\_STATUS\_READY or CONTENT\_STATUS\_DONE if no error
+ occurs. Optional, but probably required for non-trivial types.
+- type\_reformat():: called when, for example, the window has been
+ resized, and the content needs reformatting for the new size.
+ Optional.
+- type\_destroy():: called when the content is being destroyed. Free
+ all resources. Optional.
+- type\_redraw():: called to plot the content to screen.
+- type\_redraw\_tiled():: called to plot the content tiled across the
+ screen. Optional.
+- type\_stop(): called when the user interrupts in status
+ CONTENT\_STATUS\_READY. Must stop any processing and set the status
+ to CONTENT\_STATUS\_DONE. Required iff the status can be
+ CONTENT\_STATUS\_READY.
+- type\_open(): called when a window containing the content is opened.
+ Probably only makes sense if no\_share is set for the content type
+ in handler\_map. Optional.
+- type\_close():: called when the window containing the content is
+ closed. Optional.
+
+If an error occurs in type\_create(), type\_process\_data(),
+type\_convert(), CONTENT\_MSG\_ERROR must be broadcast and false
+returned. The \_destroy function will be called soon after.
+
+Memory allocation
+-----------------
+
+Each content structure is allocated using talloc, and all data related
+to a content should be allocated as a child block of the content
+structure using talloc. This will ensure that all memory used by a
+content is freed.
+
+Contents must keep an estimate of non-talloc allocations in the
+total\_size attribute. This is used to control the size of the memory
+cache.
+
+Creating and fetching contents
+------------------------------
+
+A high-level interface to starting the process of fetching and
+converting an URL is provided by the fetchcache functions, which check
+the memory cache for a url and fetch, convert, and cache it if not
+present.
+
+The fetch module provides a low-level URL fetching interface.
+
+Adding support for a new content type
+-------------------------------------
+
+Addition of support for new content types is fairly simple and the
+process is as follows:
+
+- Implement, or at least stub out, the new content type handler. See
+ the 'Type Functions' section above for details of the type handler
+ API.
+- Add a type value to the 'content\_type' enumeration
+ (content\_type.h)
+- Add an entry for the new type's private data in the 'data' union
+ within 'struct content' (content.h)
+- Add appropriate mappings in the 'mime\_map' table from MIME type
+ strings to the 'content\_type' value created. (content.c)
+- Add a textual name for the new content type to
+ 'content\_type\_name'. This array is indexed by 'content\_type'.
+ (content.c)
+- Add an entry for the new content type's handler in the
+ 'handler\_map' array. This array is indexed by 'content\_type'.
+ (content.c)
+
+For examples of content type handlers, consult the image/ directory. The
+JPEG handler is fairly self-explanatory.
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/documentation/directory_structure.mdwn b/documentation/directory_structure.mdwn
new file mode 100644
index 0000000..e9d00a7
--- /dev/null
+++ b/documentation/directory_structure.mdwn
@@ -0,0 +1,45 @@
+[[!meta title="Documentation/Directory Structure"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2012-10-23T10:53:54Z"]]
+
+
+[[!toc]] NetSurf's code is broadly
+split into two; core code, and front end code. All ports make use of the
+core code and each port has its own front end code.
+
+Directory Structure
+-------------------
+
+The source is split at top level as follows:
+
+### Core
+
+#### Content handling
+
+- **content** -- Generic content handling: Fetching, caching,
+ managing, etc
+- **css** -- CSS content specific handling
+- **image** -- Image content specific handling (conversion)
+- **javascript** -- JavaScript content specific handling
+- **render** -- HTML and Text content specific handling (processing,
+ layout, render)
+
+#### Other core components
+
+- **desktop** -- Non-platform specific front-end
+- **utils** -- Misc reusable components
+
+### Front ends
+
+- **amiga** -- AmigaOS specific code
+- **atari** -- Atari FreeMiNT code
+- **beos** -- BeOS/Haiku specific code
+- **cocoa** -- Mac OS X specific code
+- **framebuffer** -- Framebuffer specific code
+- **gtk** -- GTK specific code
+- **monkey** -- Terminal based test engine specific code
+- **riscos** -- RISC OS specific code
+- **windows** -- Windows specific code
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/documentation/errors.mdwn b/documentation/errors.mdwn
new file mode 100644
index 0000000..2e818ab
--- /dev/null
+++ b/documentation/errors.mdwn
@@ -0,0 +1,36 @@
+[[!meta title="Documentation/Errors"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2010-03-01T02:55:53Z"]]
+
+
+[[!toc]] This section describes
+error handling in the code.
+
+The most common serious error is memory exhaustion. If malloc(),
+strdup(), etc. fails, clean up and free any partially complete
+structures leaving data in a consistent state, and return a value which
+indicates failure, eg. 0 for functions which return a pointer (document
+the value in the function documentation). The caller should then
+propagate the failure up in the same way. At some point, the error
+should stop being passed up and be reported to the user using
+
+ warn_user("NoMemory", 0);
+
+The other common error is one returned by a RISC OS SWI. Always use "X"
+SWIs, something like this:
+
+ os_error *error;
+ error = xwimp_get_pointer_info(&pointer);
+ if (error) {
+ LOG(("xwimp_get_pointer_info: 0x%x: %s\n",
+ error->errnum, error->errmess));
+ warn_user("WimpError", error->errmess);
+ return false;
+ }
+
+If an error occurs during initialisation, in most cases exit immediately
+using die(), since this indicates that there is already insufficient
+memory, or a resource file is corrupted, etc.
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/documentation/frames.mdwn b/documentation/frames.mdwn
new file mode 100644
index 0000000..236277f
--- /dev/null
+++ b/documentation/frames.mdwn
@@ -0,0 +1,64 @@
+[[!meta title="Documentation/Frames"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2010-03-01T02:56:32Z"]]
+
+
+[[!toc]] Frames cut across many
+parts of the browser.
+
+Representation in content
+-------------------------
+
+During box-tree construction (box\_construct.c), frameset, frame, and
+iframe elements are converted into structures in the 'struct content'
+for the HTML document.
+
+Framesets and frames form a tree of 'struct content\_html\_frames' at
+content-\>data.html.frameset. For example, the source
+
+ <nowiki>
+ <frameset rows="50%,50%">
+ <frameset cols="40,200">
+ <frame name="A" src="aaa">
+ <frame name="B" src="bbb">
+ </frameset>
+ <frameset cols="3*,*">
+ <frame name="C" src="ccc">
+ <frame name="D" src="ddd">
+ </frameset>
+ </frameset>
+ </nowiki>
+
+results in the tree
+
+ 0x6099f2f4 (2 1) w0px h0px (margin w0 h0) (scrolling no)
+ (0 0): 0x608b730c (1 2) w100% h50% (margin w0 h0) (scrolling no)
+ (0 0): 0x608dae74 (0 0) w40px h100% (margin w0 h0) 'A' <aaa> (scrolling auto) border 0
+ (0 1): 0x608daeb0 (0 0) w200px h100% (margin w0 h0) 'B' <bbb> (scrolling auto) border 0
+ (1 0): 0x608b7348 (1 2) w100% h50% (margin w0 h0) (scrolling no)
+ (0 0): 0x608d9b4c (0 0) w3* h100% (margin w0 h0) 'C' <ccc> (scrolling auto) border 0
+ (0 1): 0x608d9b88 (0 0) w1* h100% (margin w0 h0) 'D' <ddd> (scrolling auto) border 0
+
+(output from html\_dump\_frameset()).
+
+Creation of browser windows
+---------------------------
+
+When a document containing frames is displayed in a browser window,
+child windows are created for frames and iframes. This occurs when a
+browser window receives a CONTENT\_MSG\_READY in
+browser\_window\_callback(), which calls
+browser\_window\_create\_frameset().
+
+browser\_window\_create\_frameset() constructs a tree of 'struct
+browser\_window' corresponding to the tree of 'struct
+content\_html\_frames'. For each new browser\_window, it calls
+gui\_create\_browser\_window() to create and open the actual
+platform-specific window (represented by a 'struct gui\_window').
+
+When this is completed it calls browser\_window\_recalculate\_frameset()
+which calculates the positions of each frame in pixels and calls
+gui\_window\_position\_frame() to position each one.
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/documentation/front_end_functions.mdwn b/documentation/front_end_functions.mdwn
new file mode 100644
index 0000000..4e056f4
--- /dev/null
+++ b/documentation/front_end_functions.mdwn
@@ -0,0 +1,81 @@
+[[!meta title="Documentation/Front end functions"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-11-26T22:20:01Z"]]
+
+
+[[!toc]] This page documents the
+functions that need to be implemented by each platform's front end.
+
+: *Note: in progress and incomplete*
+
+The prototypes for these functions are usually in gui/gui.h. The
+implementations live in the platform code, for example **gui\_init()**
+is implemented in each of amiga/gui.c, beos/beos\_gui.cpp,
+framebuffer/gui.c, gtk/gtk\_gui.c, riscos/gui.c, and windows/gui.c. Of
+course only one of those implementations is ever compiled into a binary
+of NetSurf.
+
+Initialization and clean-up
+---------------------------
+
+### int main(int argc, char\*\* argv)
+
+This is the standard C entry point. It should do any critical very-early
+initialization is required, and finish with
+
+`return netsurf_main(argc, argv);`
+
+The prototype may differ on some platforms.
+
+### void gui\_init(int argc, char\*\* argv)
+
+General initialization of platform stuff. Prepare the gui for use, but
+don't yet open any windows.
+
+It should call:
+
+- hubbub\_initialise(), with the platform-specific path to the Aliases
+ file
+- options\_read(), if saving and loading options is supported
+- messages\_load(), with the platform-specific path to the Messages
+ file
+- save\_complete\_init(), if save complete is used
+- urldb\_load() and urldb\_load\_cookies()
+
+Should set default\_stylesheet\_url, quirks\_stylesheet\_url, and
+adblock\_stylesheet\_url.
+
+(Called by netsurf\_init() in desktop/netsurf.c.)
+
+### void gui\_init2(int argc, char\*\* argv)
+
+Last-step of initialization. Can open window(s) by calling
+browser\_window\_create() (e.g. depending on argv).
+
+(Called by netsurf\_init() in desktop/netsurf.c.)
+
+### void gui\_quit(void)
+
+Prepare for exit by doing whatever is needed by the platform.
+
+It should call:
+
+- urldb\_save\_cookies() and urldb\_save()
+- hubbub\_finalise()
+
+(Called by netsurf\_exit() in desktop/netsurf.c.)
+
+Multitasking
+------------
+
+### void gui\_multitask(void)
+
+NetSurf's core will occasionally call this during long-running
+operations. It should yield briefly to the OS if applicable, and handle
+urgent gui events to keep NetSurf responsive. Then it should return
+quickly.
+
+It **must not** call any function in the core or non-platform code.
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/documentation/gettingcoding.mdwn b/documentation/gettingcoding.mdwn
new file mode 100644
index 0000000..d53fe33
--- /dev/null
+++ b/documentation/gettingcoding.mdwn
@@ -0,0 +1,155 @@
+[[!meta title="Documentation/GettingCoding"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2014-03-15T12:02:06Z"]]
+
+
+[[!toc]]
+
+Getting started with the NetSurf code base
+==========================================
+
+NetSurf and its libraries are kept in the `git` revision control system.
+This document guides though setting up an envronment to build and
+develop NetSurf and the NetSurf project libraries from scratch..
+
+You can see the `git` repositories at [The NetSurf
+Gitweb](http://git.netsurf-browser.org/).
+
+There are two ways to go. You can use our
+[env.sh](http://git.netsurf-browser.org/netsurf.git/plain/Docs/env.sh)
+which will fetch the sources from git and build NetSurf and the
+libraries with a few commands, or you can set up things manually.
+
+Easy way: Using NetSurf's env.sh and QUICK-START
+------------------------------------------------
+
+This makes it simple to git clone the sources for NetSurf and the
+project libraries, build and install them.
+
+To use
+[env.sh](http://git.netsurf-browser.org/netsurf.git/plain/Docs/env.sh),
+follow the steps in our
+[QUICK-START](http://git.netsurf-browser.org/netsurf.git/plain/Docs/QUICK-START)
+document.
+
+Less easy: Manual setup
+-----------------------
+
+If you need to do things manually, the rest of this section will take
+you through the process.
+
+### Preparing your workspace
+
+NetSurf has a number of libraries which must be built in-order and
+installed into your workspace. Each library depends on a core build
+system which NetSurf projects use. This build system relies on the
+presence of things like `pkg-config` to find libraries and also certain
+environment variables in order to work correctly. Assuming you are
+preparing a workspace in /home/netsurf/workspace then the following
+sequence of commands will set you up.
+
+`# Make the workspace directory`
+`mkdir -p ${HOME}/netsurf/workspace`
+`# Change to it`
+`cd ${HOME}/netsurf/workspace`
+`# Make the temporary install space`
+`mkdir inst`
+`# Prepare environment script`
+`cat > env.sh <<'EOF'`
+`export PKG_CONFIG_PATH=${HOME}/netsurf/workspace/inst/lib/pkgconfig::`
+`export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HOME}/netsurf/workspace/inst/lib`
+`export PREFIX=${HOME}/netsurf/workspace/inst`
+`EOF`
+
+Whenever you wish to start development in a new shell, run the
+following.
+
+`# Change to workspace`
+`cd ${HOME}/netsurf/workspace`
+`# Prepare shell environment`
+`source env.sh`
+
+From here down, any commands in this document assume you have prepared
+your shell environment and you are starting from the workspace
+directory.
+
+### Checking the codebase out for the first time
+
+Now you can clone all of the core libraries and build them in turn. Some
+may have additional dependencies outside of the NetSurf project's
+codebase, and you should check the documentation in each library for
+information about that.
+
+`# Acquire all the core libraries and NetSurf codebase`
+`for REPO in buildsystem libwapcaplet libparserutils libcss libdom libhubbub libnsgif libnsbmp libsvgtiny librosprite libnsfb netsurf; do \`
+`   git clone `[`git://git.netsurf-browser.org/`](git://git.netsurf-browser.org/)`${REPO}.git ; \`
+`done`
+
+### Compiling the codebase
+
+Assuming you have done the above and checked out all of the code, the
+following is the process of getting it all built. The assumption is
+being made that you're on a GTK development system on Linux. Different
+environments may require slightly different instructions. Refer to the
+documentation in the codebase for more help.
+
+If you wish to run the tests for each of the libraries, then refer to
+that library's documentation. Some of the libraries require additional
+test harnesses to be installed.
+
+`# Install the shared build system`
+`make -C buildsystem install`
+`# Build the core libraries in turn (order matters due to dependencies)`
+`make -C libwapcaplet install`
+`make -C libparserutils install`
+`make -C libcss install`
+`make -C libhubbub install`
+`make -C libdom install`
+`# Build the core image decoders`
+`make -C libnsbmp install`
+`make -C libnsgif install`
+`# Build the optional decoders`
+`make -C librosprite install`
+`make -C libsvgtiny install`
+`# Build NetSurf`
+`cd netsurf`
+`make`
+`# Try running NetSurf (GTK) from the build tree`
+`./test-nsgtk`
+
+Configuring `git` for pushing changes
+=====================================
+
+If you have push rights to the NetSurf repository, you need to ensure
+you're pushing to the `ssh://` url rather than the `git://` one.
+
+The easiest way to do this is to run `git config --global -e` and ensure
+that a section is inserted like the one below.
+
+`[url "`[`ssh://nsgit@git.netsurf-browser.org/`](ssh://nsgit@git.netsurf-browser.org/)`"]`
+`    pushInsteadOf = `[`git://git.netsurf-browser.org/`](git://git.netsurf-browser.org/)
+
+This will cause `git` to automatically convert any `git://` url to the
+NetSurf codebase to the corresponding `ssh://` one when pushing. Pulling
+changes still happens over the more efficient and lighter weight
+`git://` protocol. You can verify that this change is working correctly
+by running `git remote -v` in any of your NetSurf code trees. It should
+show something like the following.
+
+`origin `[`git://git.netsurf-browser.org/netsurf.git`](git://git.netsurf-browser.org/netsurf.git)` (fetch)`
+`origin `[`ssh://nsgit@netsurf-browser.org/netsurf.git`](ssh://nsgit@netsurf-browser.org/netsurf.git)` (push)`
+
+Rules on branches
+-----------------
+
+The `git` server (a [Gitano](http://www.gitano.org.uk/) instance on
+[Pepperfish](http://www.pepperfish.net/)) has varying rules regarding
+where you are allowed to push in terms of branch names. Usually core
+developers may push to the `master` ref (equivalent of the trunk in
+subversion) and anyone else must push to a ref named after their
+username.
+
+All developers are encouraged to work in branches anyway, merging to
+`master` only when changes are ready for others to use. See the
+[[Git Cheat Sheet|documentation/gitcheatsheet]] for more help.
+
diff --git a/documentation/gitcheatsheet.mdwn b/documentation/gitcheatsheet.mdwn
new file mode 100644
index 0000000..4a0e462
--- /dev/null
+++ b/documentation/gitcheatsheet.mdwn
@@ -0,0 +1,278 @@
+[[!meta title="Documentation/GitCheatSheet"]]
+[[!meta author="Chris"]]
+[[!meta date="2016-04-28T18:32:38Z"]]
+
+
+[[!toc]]
+
+Git cheat sheet
+===============
+
+This document is here to help NetSurf developers who are more used to
+non-distributed revision control systems, or to DVCSs which are not
+`git`. It also contains a few helpful hints for people used to `git` so
+it's worth a skim even to those who think they know it all already.
+
+`Git` is one of the least obvious, least intuitive distributed revision
+control systems out there. However it is also very powerful and very
+fast. `Git` appears to have won the DVCS race for the most part, and as
+such, NetSurf uses it.
+
+Identify yourself
+=================
+
+Every commit you make with `git` contains an identity. (Actually you can
+differentiate between the identity of the author of a patch and the
+person committing it to the repository if you want.) As such, you must
+teach `git` who you are.
+
+`git config --global user.name "My Name"`
+`git config --global user.email whoever@domain.name`
+
+Note that if you don't specify `--global` the name/email address will
+only be local to the `git` tree you are inside when you run the command.
+
+The first time you make a commit, if you have not configured your
+identity, `git` will give you a reminder.
+
+Useful bits and bobs
+====================
+
+It's well worth running:
+
+`git config --global push.default current`
+
+Since it tells git to only push the branch you're on.
+
+Repositories, Trees and Branches
+================================
+
+Each `git` repository is a project. As such, NetSurf has many
+repositories. NetSurf's repositories reside on the NetSurf
+[Gitano](http://www.gitano.org.uk/) instance. We will refer to this as
+the *server* from now on.
+
+You acquire a copy of a repository by asking `git` to *clone* it.
+
+`git clone `[`git://git.netsurf-browser.org/buildsystem.git`](git://git.netsurf-browser.org/buildsystem.git)
+
+By default, `git` will create a directory named after the repository and
+clone all the branches in that repository into it.
+
+When you have a local clone of a repository, we refer to that as a
+*tree*. `Git` may also refer to it as a *working tree* and it is where
+changes are made and commits are done.
+
+Each repository may have many branches. `Git` keeps them tucked away,
+showing you only one at a time in your tree. You can list your local
+branches with:
+
+`git branch`
+
+By default, a fresh clone will only contain one branch called `master`
+which is the equivalent of Subversion's *trunk*.
+
+You can switch between local branches with:
+
+`git checkout branchname`
+
+Different bits of `git` documentation may also refer to *refs*. In `git`
+branches, tags, etc are all represented by their commits. To give those
+commits useful-to-a-human names, `git` has the concept of a *ref* which
+is simply a name given to a commit. Refs in the namespace `refs/heads/`
+are referred to as branches.
+
+Revisions and commits
+=====================
+
+There are no traditional revision numbers in `git`. Instead each commit
+is given a unique identifier. It is a long (40 character) hexadecimal
+string but it is also commonly shortened to its first 7 characters. For
+example, at the time of writing, the tip of the `master` branch in the
+`NetSurf` repository was `00f76b5`.
+
+Remotes
+=======
+
+Because your `git` tree is also a full local copy of the repository,
+`git` keeps track of the server's copy of the repository in a data
+structure called a *remote*. The default name for a remote is `origin`
+and you will see that crop up in various places as we continue.
+
+You can update your local view of the server with the command:
+
+`git remote update`
+
+Or, assuming you're on `master` you may find *pull* to be of more use:
+
+`git pull`
+
+If you *pull* then `git` first updates its view of the remote, and then
+attempts to merge in changes from the remote into your local branch. If
+you've not made changes locally then this will be done by
+*fast-forwarding* you to the server's revision.
+
+You can see the branches available on any remotes you have registered in
+your tree with:
+
+`git branch -r`
+
+Making a branch to work on
+==========================
+
+We recommend that everyone work on branches, merging to `master` only
+when work is ready for others. In the past we've all worked on `trunk`
+because it was such a pain in Subversion to merge work. However one of
+`git`'s strengths is its merge functionality so this habit should end.
+
+Before making a new branch, it's customary to ensure that you've got
+everything up-to-date from the server:
+
+`git remote update`
+
+Then you can create a new branch, from the server's idea of `master`
+with:
+
+`git checkout -b username/branch origin/master`
+
+You should put your own username in for *username* (note it should be
+the username which the server has for you. You can find that out by
+running `ssh nsgit@netsurf-browser.org whoami`).
+
+For the branch name, give it something reasonably descriptive but not
+too long. For example `fandango-experiment` is good, where
+`experiment-with-new-layout-engine-idea` is probably too long.
+
+The `origin/master` is where you tell `git` that you want to track the
+`master` branch of the `origin` remote. This not only gives you a
+starting point for your branch, but also informs `git` where to get
+changes from if you run `git pull` while you have that branch checked
+out.
+
+To then inform the server of your new branch, run:
+
+`git push origin username/branch`
+
+When you wish to inform the server of new commits on your branch, you
+can subsequently just run:
+
+`git push`
+
+Deleting a branch
+=================
+
+To delete a branch from the server when it is no longer required:
+
+`git push origin :username/branch`
+
+Making changes and committing them
+==================================
+
+You can make any amount of local changes before you commit, although we
+recommend each commit be a reasonable self-contained "patch". Obviously
+it is better to commit early and often; and `git` does contain a variety
+of tools for helping you to turn a long line of small commits into a
+neater set of commits ready for merging. We're not too bothered about
+that with NetSurf for now; but if you want further reading on the
+subject, go and search the web for *git rebase*.
+
+You can ask `git` about your working tree any time you like with:
+
+`git status`
+
+You can see changes in your working tree which you've not told `git`
+about yet, with:
+
+`git diff`
+
+When you have edited the code and you are ready to commit, you should
+run:
+
+`git add filename another/filename etc/etc/etc`
+
+You can run `git add` as many times as you like. Each time you do,
+you're saying to `git` *I want you to remember this file just like it is
+right now*.
+
+If you need to remove files then run:
+
+`git rm filename`
+
+You can see the diff which `git` has prepared for committing, with
+
+`git diff --cached`
+
+Once you're happy you've told git about any edited, new or deleted
+files, you can run:
+
+`git commit`
+
+This will pop up an editor, telling you what will be committed and
+encouraging you to write a change comment. The first line of the change
+comment should be short (60 or so chars or less) and pithy. It will be
+shown on the IRC channel as the commit message and also forms what `git`
+refers to as the *short log message*. The rest of the message (ideally
+separated from the first line by a blank) should explain what you did
+and why. Normal good commit message etiquette applies here.
+
+You can see the log with:
+
+`git log`
+
+Don't forget to `git push` your commits to the server if you want anyone
+else to see them.
+
+Merging branches
+================
+
+Since we're encouraging work on branches, we also need to know how to
+merge those into the `master` branch. In order to keep things neat and
+tidy, we ask that branches be merged in the following way:
+
+`# Switch to the master branch`
+`git checkout master`
+`# Ensure we're up-to-date relative to the server`
+`git pull`
+`# Merge the local branch in`
+`git merge --no-commit --no-ff username/branch`
+`# Review the changes here (git diff --cached)`
+`# Commit the changes`
+`git commit`
+
+Note that the commit will default to a message about the merge. That is
+sufficient, although obviously any more useful message would be
+appreciated. If the branch is not a local one, but one retrieved from
+the server, then simply insert `origin/` in front of the branch name (so
+it becomes `origin/username/branch`) to tell `git` the location of the
+branch.
+
+Once the commit is done on `master` you can `git push` it to the server.
+
+The options to `git merge` are important. The `--no-commit` causes `git`
+to leave the tree at the point that it has done the merge but hasn't
+committed it to the branch. By default, `git` will commit merges which
+had no conflicts. Since our code base is complex this is not always
+sufficient, hence the review step above. The `--no-ff` causes `git` to
+prepare a merge commit. Without it, if the `master` has not moved on
+from where the branch was created, `git` will instead simply shunt the
+commits onto the `master` branch. While not a bad thing in and of
+itself, this would mean that when you did `git push` the `CIA.vc` bot
+would announce every single commit from the branch.
+
+Merging changes from a 3rd party's repo
+=======================================
+
+To merge from the "foo" branch of Somebody's github clone of the NetSurf
+repo we can do this:
+
+`git remote add somebody `[`git://github.com/Somebody/netsurf`](git://github.com/Somebody/netsurf)
+`git remote update somebody`
+`git merge --no-ff --no-commit somebody/foo`
+`git diff --cached`
+
+Check that the diff shows what we want to merge. If so, commit it.
+
+If you don't want to keep the remote around:
+
+`git remote rm somebody`
+
diff --git a/documentation/gtk_interface.mdwn b/documentation/gtk_interface.mdwn
new file mode 100644
index 0000000..f480a52
--- /dev/null
+++ b/documentation/gtk_interface.mdwn
@@ -0,0 +1,36 @@
+[[!meta title="Documentation/GTK Interface"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2010-04-07T17:05:44Z"]]
+
+
+[[!toc]] This page describes the
+GTK interface, which lives in the **gtk** directory. This interface is
+used on Linux, BSD, and can be used on other platforms which have a port
+of GTK.
+
+Windows and Scaffolding
+-----------------------
+
+A "scaffolding" is a top-level main window, which contains a toolbar,
+menu bar, and one or more tabs containing web pages. Each tab
+corresponds to a gui\_window (and each frame if frames are present).
+
+All the UI designs for the main window are in netsurf.glade.
+**wndBrowser** is a scaffolding. It contains a VBox containing a
+MenuBar, Toolbar, Toolbar for search (normally hidden), and Notebook.
+
+The **tabContents** GtkTable (in tabContentsWindow) is used for each
+tab. It contains a table with two rows and two columns, which contain
+(line 1) a Layout, VScrollbar, (line 2) HPaned, and Statusbar (used for
+resizing only). The HPaned contains the actual status bar (as a Label),
+and a HScrollbar.
+
+Tab creation is implemented in gui\_create\_browser\_window() in
+gtk/gtk\_window.c. The scrollbars are linked to the layout here.
+
+Frames are implemented as a ScrolledWindow containing a Layout, which is
+then placed on the parent's Layout. This is also in
+gui\_create\_browser\_window().
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/documentation/layout.mdwn b/documentation/layout.mdwn
new file mode 100644
index 0000000..414253f
--- /dev/null
+++ b/documentation/layout.mdwn
@@ -0,0 +1,70 @@
+[[!meta title="Documentation/Layout"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-11-26T22:20:06Z"]]
+
+
+[[!toc]] The modules in the render
+directory process and layout HTML pages.
+
+Overview
+--------
+
+This is the process to render an HTML document:
+
+First the HTML is parsed to a tree of xmlNodes using the HTML parser in
+libxml. This happens simultaneously with the fetch
+[html\_process\_data()].
+
+Any stylesheets which the document depends on are fetched and parsed.
+
+The tree is converted to a 'box tree' by xml\_to\_box(). The box tree
+contains a node for each block, inline element, table, etc. The aim of
+this stage is to determine the 'display' or 'float' CSS property of each
+element, and create the corresponding node in the box tree. At this
+stage the style for each element is also calculated (from CSS rules and
+element attributes). The tree is normalised so that each node only has
+children of permitted types (eg. TABLE\_CELLs must be within
+TABLE\_ROWs) by adding missing boxes.
+
+The box tree is passed to the layout engine [layout\_document()], which
+finds the space required by each element and assigns coordinates to the
+boxes, based on the style of each element and the available width. This
+includes formatting inline elements into lines, laying out tables, and
+positioning floats. The layout engine can be invoked again on a already
+laid out box tree to reformat it to a new width. Coordinates in the box
+tree are relative to the position of the parent node.
+
+The box tree can then be rendered using each node's coordinates.
+
+Lists
+-----
+
+Lists are one or more elements with 'display: list-item' (which is set
+for 'li' by the default CSS). A list-item is constructed as a BLOCK box
+and a box for the marker attached at block-\>list\_marker. The marker
+contains the bullet, number, or similar, depending on the
+list-style-type.
+
+Layout of the block is as normal. A pass of layout after main layout
+places list marker boxes to the left of their block (see
+layout\_lists()).
+
+Absolute positioning
+--------------------
+
+Absolutely positioned boxes are constructed in the box tree in the same
+place as if they were not absolutely positioned. Inline boxes are
+created as INLINE\_BLOCK, tables as TABLE, and other boxes as BLOCK (see
+box\_solve\_display()).
+
+During layout, absolutely positioned boxes in block context (BLOCK or
+TABLE) are given a position in layout\_block\_context(), but treated as
+having no height. In inline context (INLINE\_BLOCK), they are given a
+position in layout\_line(), but treated as having no width or height.
+This is done to determine the static position.
+
+An additional pass after main layout positions and layouts all
+absolutely positioned boxes (see layout\_position\_absolute()).
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/documentation/memory.mdwn b/documentation/memory.mdwn
new file mode 100644
index 0000000..f595e08
--- /dev/null
+++ b/documentation/memory.mdwn
@@ -0,0 +1,26 @@
+[[!meta title="Documentation/Memory"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2010-03-01T02:56:01Z"]]
+
+
+[[!toc]] This section describes
+memory management. See Error handling for how memory exhaustion is
+handled.
+
+Finding leaks on RISC OS
+------------------------
+
+Memory allocation can be traced and leaks can be found using dmalloc.
+
+Install dmalloc from the riscos.info autobuilder. Set the environment
+variable TLINK\_MEMCHECK=dmalloc and re-link !RunImage.
+
+On RISC OS,
+
+ *Set DMALLOC_OPTIONS debug=0x2,log=dmalloc_log
+
+set the working directory to a RAM disc, and run NetSurf. When it quits,
+dmalloc\_log will contain a list of unfreed blocks.
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/documentation/modular_coding_style.mdwn b/documentation/modular_coding_style.mdwn
new file mode 100644
index 0000000..da07a8a
--- /dev/null
+++ b/documentation/modular_coding_style.mdwn
@@ -0,0 +1,39 @@
+[[!meta title="Documentation/Modular Coding Style"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-11-26T22:20:15Z"]]
+
+
+[[!toc]]
+
+Modules
+-------
+
+NetSurf's source is organised in modules. A module usually consists of a
+.c and .h file. For example the html module is in html.c and html.h.
+
+All functions (including static functions) in a module should start
+<module>\_, for example html\_create(), html\_process\_data(), etc. This
+makes functions easy to find and names unique through the source, which
+is helpful for backtraces, documentation, etc.
+
+Global variables in a module (including static) should also start
+<module>\_.
+
+Static functions should all be declared at the top.
+
+Put functions in a logical order, for example any init function first,
+then functions it calls, then the next externally available function,
+functions it calls, etc.
+
+Coding Style
+------------
+
+We use K&R (2nd edition ANSI C) style, tabs for indent, 80 characters
+wide, lower\_case\_with\_underscores.
+
+See the [Style
+Guide](http://www.netsurf-browser.org/developers/StyleGuide.pdf) for
+further information and examples.
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/documentation/overview.mdwn b/documentation/overview.mdwn
new file mode 100644
index 0000000..b742296
--- /dev/null
+++ b/documentation/overview.mdwn
@@ -0,0 +1,9 @@
+[[!meta title="Documentation/Overview"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2010-03-01T02:41:51Z"]]
+
+
+[[!toc]]
+
+1. REDIRECT [[Documentation/Directory Structure|documentation/directory_structure]]
+
diff --git a/documentation/printing.mdwn b/documentation/printing.mdwn
new file mode 100644
index 0000000..a7f9ee2
--- /dev/null
+++ b/documentation/printing.mdwn
@@ -0,0 +1,65 @@
+[[!meta title="Documentation/Printing"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2010-03-01T02:56:52Z"]]
+
+
+[[!toc]] This document is supposed
+to be a short guide of adding paged output to NetSurf. Currently the two
+pieces of code using the print implementation are PDF export and GTK
+printing.
+
+printer.h
+---------
+
+The first thing the new paged output has to do is implementing the
+printer interface located in printer.h. It consists of four elements:
+
+- plotter. This are the plotters which will be used while redrawing
+ the content.
+- print\_begin. This function is called right after the set up and
+ should manage all the remaining user-specific initialisation stuff.
+- print\_next\_page. This function is called before the actual
+ printing of each page allowing to prepare the content to be printed.
+- print\_end. This function is called right before the printing
+ routines clean after themselves and should be used for saving the
+ output to a file, freeing previously allocated memory, relesing
+ document handles etc.
+
+print.h
+-------
+
+The provided print interface consists of a set of functions which can be
+used seperately and one integrating them all making the print a matter
+of one call. If it is enough you can just call print\_basic\_run and
+wait for it to return. However, for the case you can't accompish the
+printing task this way the print interface gives you the possiblity of
+calling the print steps individually.
+
+Only if you are using print\_basic\_run you can omit specifying the
+print settings. If this is the case the default ones will be used.
+
+As you will notice the functions correspond to those you had to
+implement in the printer. The reason for this is adding some flexibility
+to the system which occured necessary i.e in the GTK print
+implementation.
+
+- print\_set\_up. This sets the printing system up and calls
+ print\_begin
+- print\_draw\_next\_page. Here after calling print\_next\_page one
+ full page of the dimensions given in the print settings is plotted
+- print\_cleanup. This function is responsible for freeing all used
+ resources right after calling print\_end
+
+Settings
+--------
+
+This is where the besic information about the print job is held. You can
+use one of the predifined sets(DEFAULT and OPTIONS) or add your own. In
+order to do that you have to follow this steps:
+
+- add your entry to the print\_configuration enum
+- add handling of it to the switch in print\_make\_settings
+- add the entry name to this document
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/documentation/references.mdwn b/documentation/references.mdwn
new file mode 100644
index 0000000..ddbfe1e
--- /dev/null
+++ b/documentation/references.mdwn
@@ -0,0 +1,37 @@
+[[!meta title="Documentation/References"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2010-03-01T02:57:22Z"]]
+
+
+[[!toc]]
+
+Web Specifications
+------------------
+
+|---|---|
+|HTML|- [W3C HTML 4.01](http://www.w3.org/TR/html401/)
+- [W3C Mark up](http://www.w3.org/MarkUp/)|
+|XHTML 1.0|- [W3C XHTML 1.0](http://www.w3.org/TR/xhtml1/)|
+|CSS|- [W3C CSS 2.1](http://www.w3.org/TR/CSS21/)|
+|HTTP/1.1|- <http://www.w3.org/Protocols/rfc2616/rfc2616.html>
+- <http://purl.org/NET/http-errata>
+- <http://www.w3.org/Protocols/>|
+|HTTP Authentication|- <http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2617.html>|
+|PNG|- <http://www.w3.org/Graphics/PNG/>|
+|URI|- <http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2396.html>
+- <http://www.w3.org/Addressing/>|
+|Cookies|- <http://wp.netscape.com/newsref/std/cookie_spec.html>
+- <http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2109.html>|
+
+RISC OS
+-------
+
+|---|---|
+|Plugin|- <http://www.ecs.soton.ac.uk/~jmb202/riscos/acorn/funcspec.html>
+- <http://www.ecs.soton.ac.uk/~jmb202/riscos/acorn/browse-plugins.html>|
+|URI|- <http://www.ecs.soton.ac.uk/~jmb202/riscos/acorn/uri.html>|
+|URL|- <http://www.vigay.com/inet/inet_url.html>|
+|Nested WIMP|- <http://www.ecs.soton.ac.uk/~jmb202/riscos/acorn/nested.html>|
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/documentation/treeview.mdwn b/documentation/treeview.mdwn
new file mode 100644
index 0000000..3f6ecc9
--- /dev/null
+++ b/documentation/treeview.mdwn
@@ -0,0 +1,88 @@
+[[!meta title="Documentation/Treeview"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2010-03-01T02:57:03Z"]]
+
+
+[[!toc]] Using the treeview gadget
+(together with core hotlist/history/cookies/sslcert)
+
+Providing front end specific bits
+---------------------------------
+
+Most of the treeview logic is located in core code but there still are
+some functions that need implementing on the front end side. These
+include:
+
+- Functions marked as front end specific ones and listed at the end of
+
+` tree_url_node.h.`
+
+- Functions in treeview\_table located in tree.h
+
+Additionally the option\_tree\_icons\_dir option should be set. It
+should be pointing at the directory containing the frontend specific
+icon set for the treeview.
+
+During GUI initialisation the following functions should be called:
+
+- cookies\_initialise
+- history\_global\_initialise
+- hotlist\_initialise
+- sslcert\_init
+
+On GUI closure:
+
+- cookies\_cleanup
+- history\_global\_cleanup
+- hotlist\_cleanup
+- no function for sslcert here!
+
+The sslcert tree is created and deleted each time the dialog gets
+invoked. This is done with sslcert\_create\_tree and sslcert\_cleanup.
+Make sure that closing the window with any other method will also
+perform the cleanup.
+
+The remaining functions in the header files of
+hotlist/history/cookies/sslcert have to be connected to the front end
+specific buttons and menu or tool bars.
+
+The front end is responsible for creating the windows and toolbars as
+well as empty core trees passed to the cookies/history/hotlist/sslcert
+initialisation functions. Use the \*\_get\_tree\_flags functions to
+obtain the flags with which the particular tree should be created.
+
+Using the treeview
+------------------
+
+### Creating and modifying the tree structure
+
+- Create an empty tree with tree\_create.
+- Create the necessary folder/leave nodes.
+- Fill the leave nodes with tree\_create\_node\_element and assign
+ content to the elements with tree\_update\_node\_element.
+- Use tree\_link\_node to connect the created nodes in the required
+ structure.
+- With tree\_set\_redraw set the redraw flag on the tree to true, any
+ further changes will result in tree redraws. The flag can be
+ set/unset multiple times.
+- Call tree\_draw to draw the tree for the first time.
+
+### Client -\> Tree communication
+
+To make the tree respond to mouse action, all such has to be passed to
+tree\_mouse\_action and tree\_drag\_end. The mouse coordinates have to
+be given with respect to the tree origin.
+
+### Tree -\> Client communication
+
+Use tree\_set\_node\_user\_callback to provide a callback for any node
+related events. At the moment it can be used for(default behavior for a
+not handled event in brackets):
+
+- handling a node launch (no action)
+- custom node element deletion (free text/bitmap)
+- accepting/rejecting edited text (any text accepted)
+- informing about edit end (no action)
+
+[[!inline raw=yes pages="Documentation"]]
+
diff --git a/frames.mdwn b/frames.mdwn
new file mode 100644
index 0000000..c1b1bc2
--- /dev/null
+++ b/frames.mdwn
@@ -0,0 +1,115 @@
+[[!meta title="Frames"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-11-26T22:20:19Z"]]
+
+
+[[!toc]] HTML5 Spec:
+
+- [4.8.4 The iframe
+ element](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#the-iframe-element)
+- [11.5 Frames and
+ framesets](http://www.whatwg.org/specs/web-apps/current-work/multipage/rendering.html#frames-and-framesets)
+- [12.3.3
+ Frames](http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#frames)
+
+This is just a quick draft of a proposal for changing how frames are
+handled in NetSurf. Updates, changes, comments, etc are welcome.
+
+Current frames implementation
+-----------------------------
+
+See the [[frames documentation|documentation/frames]].
+
+### Problems
+
+- Complication of front end / core interface
+- Only RO implementation works
+- Not possible on some platforms
+- Front ends poke around inside several browser\_windows per window
+ (or tab)
+- Can be several gui\_windows per window (or tab)
+
+New frames implementation
+-------------------------
+
+In the following, "*canvas*" refers to the front end's "surface" onto
+which it plots whatever the core tells it to. There would only be one
+per window (or tab).
+
+The front end only creates one gui\_window per window (or tab). It never
+needs to know about browser\_window objects, which will be internal to
+the core. The front end tells the core the size of the viewport. The
+front end never knows whether the viewport contains a simple page or a
+frameset, it just passes mouse actions in and plots into the canvas as
+the core instructs it.
+
+For iframes, the core just renders the HTML content in the area of the
+page that the iframe occupies during HTML redraw. If scrollbars are
+present they are handled by the core scrollbar widget, and html\_redraw
+calls for them to be redrawn. Clicks and mouse movement over iframes are
+passed on through to the content in question. IIRC we "drill down" into
+iframes already, so apart form getting the scroll offsets this may
+already be implemented.
+
+For framesets, the canvas area we render into does not exceed the size
+of the viewable area in the window. So canvas size is equal to viewport
+size, and the front end's surface would be unscrollable. This means for
+large fixed-size frames in a small window, part of the frameset would
+get cropped. html\_redraw would be updated to handle framesets. The
+canvas would be split up into rectangles with different contents in each
+rectangular area, according to the frameset. If the frame is scrollable
+and has scrollbars, scrollbars will be rendered for it. The core mouse
+tracking and clicking handling would be updated to handle framesets. It
+also needs to handle actions on the framesets themselves, e.g. frame
+resizing.
+
+For regular pages (and possibly root framesets containing one frame and
+no nested framesets), the rendered canvas size is defined by layout in
+the normal way. So canvas size may exceed front end viewport size,
+making the front end's surface scrollable.
+
+### Evaluation
+
+#### Advantages
+
+- Much easier to develop a NetSurf front end
+- Simplify existing front ends
+- Fixes frames in all front ends without any work from front end
+ maintainers
+- All frames stuff in the core, so if somone fixes or improves it,
+ it's improved on all platforms
+- Fixes thumbnailing
+
+#### Disadvantages
+
+- Don't get native scrollbars or surfaces for individual frames
+
+Mitigation - core scrollbar widget could optionally be overridden by
+front ends for native looking scrollbars
+
+### Changes required
+
+- html\_redraw() changed to handle frameset & iframe internally
+- Mouse tracking and click handling updated to handle framesets
+- Need to pass scrollwheel events to the core. If whatever the core
+ has under the pointer can't be scrolled (further in that direction),
+ the core tells the front end that it couldn't scroll anything and
+ the front end can scroll the main viewport.
+
+Thumbnailing should "just work".
+
+Scrollbars
+----------
+
+Possibility of front ends overriding core scrollbar widgets, for native
+look.
+
+- Need to tell core the scollbar widths for layout
+- Override scrollbar redraw
+- Handle scrollbar clicks and core-generated scrollable area movements
+
+Other considerations
+--------------------
+
+- Frames history - Whole different kettle of ball games.
+
diff --git a/gsoc.mdwn b/gsoc.mdwn
new file mode 100644
index 0000000..f90458b
--- /dev/null
+++ b/gsoc.mdwn
@@ -0,0 +1,18 @@
+[[!meta title="GSoC"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2010-04-11T10:08:22Z"]]
+
+
+[[!toc]] NetSurf is participating
+in Google Summer of Code 2009.
+
+- [[GSoC Student Guidelines|gsoc/student_guidelines]]
+- [GSoC Ideas
+ page](http://www.netsurf-browser.org/developers/gsoc/2009ideas)
+
+The project mentors are:
+
+- John-Mark Bell (jmb)
+- Rob Kendrick (rjek)
+- Michael Drake (tlsa)
+
diff --git a/gsoc/application.mdwn b/gsoc/application.mdwn
new file mode 100644
index 0000000..f66ab8b
--- /dev/null
+++ b/gsoc/application.mdwn
@@ -0,0 +1,151 @@
+[[!meta title="GSoC/Application"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2014-02-12T18:44:36Z"]]
+
+
+[[!toc]]
+
+About Our Organization
+----------------------
+
+### Organisation Name
+
+NetSurf
+
+### Organisation Homepage
+
+<http://www.netsurf-browser.org/>
+
+### About the NetSurf Organisation
+
+We are the developers of NetSurf, a fast and small open source browser
+written in C with its own layout engine. As well as producing NetSurf we
+have created various other libraries which other software can use. These
+libraries include libHubbub (an HTML5 parsing library), libCSS (a CSS
+parsing and selection engine), and libDOM (a Document Object Model
+implementation). All our libraries are written in C, and are written
+with a focus on low memory usage, high performance and robust stability.
+More about the memebers of the team may be found at
+<http://www.netsurf-browser.org/about/team>
+
+### NetSurf Orgnisation's reason for applying to GSoC 2014
+
+We have specific ideas for new development that will be useful for our
+project and for other projects that rely on our libraries. We're
+applying to GSoC for a couple of reasons: first, because we don't have
+time to do all the work we wish to do on the project, and second because
+there is useful work that a student with no prior knowlage of NetSurf
+could realisitcally do over the summer. We hope to gain a new developer
+and new and improved code.
+
+### Previous GSoC Participation GSoC
+
+We applied to participate in GSoC in 2008 and 2009, and both
+applications were accepted.
+
+In GSoC 2008 we mentored 4 students, all of whom completed their
+projects to a satisfactory standard.
+
+In GSoC 2009 we mentored 3 students, all of whom completed their
+projects to a satisfactory standard.
+
+This is our first application to GSoC since 2009.
+
+### Project licenses
+
+GPL2 for NetSurf itself and MIT for the libraries (libHubbub, libDOM,
+libCSS, and others).
+
+### NetSurf Organisation's Ideas Page
+
+<http://wiki.netsurf-browser.org/GSoC_2014>
+
+### Development mailing list
+
+netsurf-dev@netsurf-browser.org
+
+<http://vlists.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-dev-netsurf-browser.org>
+
+### IRC channel
+
+\#netsurf on FreeNode
+
+### Organization application template
+
+None.
+
+### Our backup organization administrator
+
+<span style="color:red;">TODO</span>
+
+About Our Mentors
+-----------------
+
+### Our mentor selection criteria
+
+We have a relatively small number of core developers, all of whom have a
+reasonably good knowledge of the codebase. Lack of knowledge about how
+something works is addressed through regular communication. Therefore,
+our main criterion for being a mentor was an expressed willingness to
+perform the role.
+
+We have five core developers who are all willing to help a student find
+their feet and get the best out of their GSoC experience.
+
+### Our Mentor listing
+
+<span style="color: red;">TBC</span>
+
+- John-Mark Bell
+- Michael Drake
+- Rob Kendrick
+- Vincent Sanders
+- Daniel Silverstone
+
+About Our Participation in the Program
+--------------------------------------
+
+### Our plan for dealing with disappearing students
+
+We'll encourage students to check their work into version control
+regularly for testing so that at least their work won't be lost. However
+we'll try to avoid this problem by constant communication,
+encouragement, and help.
+
+### Our plan for dealing with disappearing mentors
+
+The offical mentor(s) will be backed up by the other project developers,
+who are happy to help and mentor too.
+
+### Steps we will take to encourage students to interact with our project's community before, during and after the program
+
+The home of our development community is the \#netsurf IRC channel,
+which always has some of the developers and daily discussion of the
+browser. We will encourage students to join this channel and the
+development mailing list so they are best able to interact with us.
+
+### What we will do to ensure that your accepted students stick with the project after GSoC concludes
+
+We will endeavour to ensure that they feel they are making a useful
+contribution to the project and that their work is valued. We'll also
+try to make the project enjoyable and give regular feedback on their
+ideas and work.
+
+<span style="color:red;">TODO</span>
+------------------------------------
+
+- Are you a new organization who has a Googler or other organization
+ to vouch for you? If so, please list their name(s) here.
+- Are you an established or larger organization who would like to
+ vouch for a new organization applying this year? If so, please list
+ their name(s) here.
+- The email addresses associated with the Google Account information
+ provided during the proposal process will be used as the primary
+ mode of contact by Google throughout the program, e.g. the email
+ address which we will use to subscribe you to the Google Summer of
+ Code mentors/admins-only mailing list.
+
+Last point means we need google accounts for all mentors/admins.
+
+--tlsa
+
diff --git a/gsoc/information.mdwn b/gsoc/information.mdwn
new file mode 100644
index 0000000..58a2398
--- /dev/null
+++ b/gsoc/information.mdwn
@@ -0,0 +1,9 @@
+[[!meta title="GSoC/Information"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2009-07-08T17:00:22Z"]]
+
+
+[[!toc]]
+
+1. REDIRECT [[GSoC/|gsoc/]]
+
diff --git a/gsoc/requirements.mdwn b/gsoc/requirements.mdwn
new file mode 100644
index 0000000..4d4dfc7
--- /dev/null
+++ b/gsoc/requirements.mdwn
@@ -0,0 +1,85 @@
+[[!meta title="GSoC/Requirements"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2009-05-27T01:14:50Z"]]
+
+
+[[!toc]]
+
+Basic requirements for GSoC students
+------------------------------------
+
+Students are expected to work a "standard" work week. Anything above
+that is fine too, but we expect a commitment similar to normal
+employment. After all, Google are paying for your time.
+
+Expectations for communications
+-------------------------------
+
+The NetSurf team use IRC, so you will be expected to be on \#netsurf on
+Freenode and communicate there.
+
+Each week, (or more often if suitable) you are expected to send a report
+to your mentor indicating what you have achieved, what you intend to
+achieve over the coming week, and anything which is blocking you from
+proceeding. Your mentor will then post to the netsurf-dev mailing list
+providing a redux of this information suitable for others.
+
+If you have any issues with anyone else, you are expected to take it up
+with your mentor, or if the issue is with your mentor, with one of the
+other mentors in the project. The mentors are: John-Mark Bell (jmb),
+Michael Drake (tlsa), Rob Kendrick (rjek) and Daniel Silverstone
+(kinnison).
+
+Who to talk to
+--------------
+
+Your mentor is your first point of call for anything directly related to
+the running of GSoC. They are the person responsible for your midterm
+and final assessment and you should be using them for this.
+
+For queries about your actual project work, you are encouraged to ask
+for advice or help on the IRC channel or mailing list. Generally the IRC
+channel is most suitable for but for involved questions or issues that
+require a lot of planning, use the netsurf-dev mailing list. This allows
+the entire NetSurf team to help and advise you.
+
+Sometimes we may ask you to work something out for yourself, not out of
+spite or laziness, but to encourage you to learn more for yourself. GSoC
+is not just a chance to make money, but a chance for you to learn new
+skills and to interact with other ways of developing software.
+
+How to work
+-----------
+
+In terms of your work environment, we recommend that you have a well-lit
+comfortable place to work, and that you isolate it from your normal home
+computing environment in the sense that if you normally have hundreds of
+IRC channels open, browse tens of websites etc, you try not to during
+your "work day" -- we're not saying you can't enjoy yourself, just that
+the fewer distractions, the easier you will find it to begin with.
+
+We recommend that you don't have the television or a talk-radio station
+on while working. Music however is fine and often encouraged.
+
+Repository layout
+-----------------
+
+You will be given a branch space on our Subversion repository. It will
+be in /branches/<yourname> and you will have total control over that
+part of the repository. You are encouraged to make feature branches and
+to request that your mentor review and merge them regularly. Ideally you
+will make a branch, implement one feature (or one packet of work towards
+a feature) and get it reviewed and merged. Then make a new branch and
+work on the next bit.
+
+This sounds a little long-winded, but it means that we don't get huge
+merge jobs at the end of GSoC, but still fulfils the requirements that
+we have to provide to Google your work so that they can see that you
+didn't cheat them out of their money.
+
+You are encouraged to commit early and often to your branch. Changes you
+make will be sent to the public commits list, so be sensible in your
+commit logs. Regular smaller commits will allow the team to review your
+code in-flight and suggest improvements or ideas which might mean you
+waste less time writing something which ultimately isn't suitable.
+
diff --git a/gsoc/student_guidelines.mdwn b/gsoc/student_guidelines.mdwn
new file mode 100644
index 0000000..30912da
--- /dev/null
+++ b/gsoc/student_guidelines.mdwn
@@ -0,0 +1,66 @@
+[[!meta title="GSoC/Student Guidelines"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2009-05-27T01:13:40Z"]]
+
+
+[[!toc]] This page details some of
+the things students thinking of applying to the NetSurf Project during
+the Google Summer of Code 2009 should know, do, and keep in mind.
+
+Read the section at the top of our ideas page
+---------------------------------------------
+
+It has all sorts of details and advice for students interested in
+working with NetSurf for Google Summer of Code.
+
+Build NetSurf and play with it for a while
+------------------------------------------
+
+Building NetSurf should be quite easy. You should get the source with
+Subversion, as described [on the developer
+pages](http://www.netsurf-browser.org/documentation/develop#Subversion).
+Don't download a tarball from the websvn interface: it's broken. If you
+have any trouble building it, ask on \#netsurf. The only common gotcha
+is obtaining the lemon parser generator, it only appears to be Debian
+and Ubuntu who package it separately. Fedora, specifically, builds it
+during the creation of the SQLite packages, but then throws it away!
+Fortunately, it's very trivial to build yourself: just ask Google for
+"lemon parser generator".
+
+Explore the NetSurf website
+---------------------------
+
+There's loads of background information, documentation, and other juicy
+tidbits on our main website. Explore it thoroughly. Find it at
+[www.netsurf-browser.org](http://www.netsurf-browser.org/).
+
+We have a commitment to support RISC OS
+---------------------------------------
+
+You've most likely not heard of RISC OS. It's possible by the end of
+your work with us you'll wish you never had. We have a history of
+supporting RISC OS (it was our first platform) and we have a commitment
+to continue doing so. Anything you write that's platform agnostic should
+work well on RISC OS. See Caveat RISC OS for a list of gotchas.
+
+Read what documentation exists
+------------------------------
+
+There isn't currently much documentation for NetSurf's source code, but
+it's all well worth reading. Start with the documents in Subversion.
+
+Remember, we're British
+-----------------------
+
+Well, in the most part, anyway. We consider tea, beer and curry all more
+important than NetSurf. We have a seemingly unnatural fascination with
+the weather. Don't be surprised by this. Also, our source code has an
+(unwritten, mostly) rule that things should be spelt in British English.
+So colour rather than color, etc.
+
+Please don't cut corners in your communications
+-----------------------------------------------
+
+Contractions like **u** for **you** in emails and IRC conversation make
+us cringe. Please avoid!
+
diff --git a/gsoc_2014.mdwn b/gsoc_2014.mdwn
new file mode 100644
index 0000000..f4adc2d
--- /dev/null
+++ b/gsoc_2014.mdwn
@@ -0,0 +1,9 @@
+[[!meta title="GSoC 2014"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2014-02-14T15:04:04Z"]]
+
+
+[[!toc]]
+
+1. REDIRECT [[GSoC 2014 Ideas|gsoc_2014_ideas]]
+
diff --git a/gsoc_2014_ideas.mdwn b/gsoc_2014_ideas.mdwn
new file mode 100644
index 0000000..d2c0e67
--- /dev/null
+++ b/gsoc_2014_ideas.mdwn
@@ -0,0 +1,124 @@
+[[!meta title="GSoC 2014 Ideas"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2014-02-14T15:04:04Z"]]
+
+
+[[!toc]] This is the
+[NetSurf](http://www.netsurf-browser.org/) project's ideas page for
+Google Summer of Code 2014.
+
+This page lists our project ideas for **[Google Summer of Code
+2014](http://code.google.com/soc/)**.
+
+General Information
+-------------------
+
+### Before applying for a project
+
+- Join our IRC channel `#netsurf` on [Freenode](http://freenode.net/)
+ and introduce yourself. Also, subscribe to the [developer mailing
+ list](http://www.netsurf-browser.org/lists/netsurf-dev).
+- Get up to speed with
+ [Git](http://wiki.netsurf-browser.org/Documentation/GettingCoding),
+ as we use this for source control, and get the NetSurf [source
+ code](http://www.netsurf-browser.org/documentation/develop#SourceControl).
+- [Build
+ NetSurf](http://www.netsurf-browser.org/documentation/develop#Compiling)
+ and enjoy using it. (Ask if you need help.)
+- Get familiarised with the source code – read the [source
+ code](http://source.netsurf-browser.org/).
+- Consider submitting a patch to fix an issue on our [bug
+ tracker](http://bugs.netsurf-browser.org/)
+
+### When applying for a project
+
+- Tell us about yourself, your experience, and why you want to work
+ with us.
+- Describe the project you want to do, and how you plan to go about
+ doing it. **Do not simply copy the project description from the
+ ideas page.**
+- Create a set of project milestones (ranging from a couple to maximum
+ 10) with expected completion dates. This will be useful for you as
+ guidance and for us to set our expectations right.
+- Describe how you will test your contributions.
+- Include your IRC nick in your application if you've spoken with us
+ on `#netsurf`, so that we recognise you. **We strongly recommend
+ that you communicate with us before submitting an application.**
+- We expect GSoC to be mostly equivalent to a full-time job.
+ Therefore, please tell us if you have any other demands on your
+ time.
+
+### During the project
+
+- Most of NetSurf team communication happens via \#netsurf IRC during
+ evenings and nights
+ ([CET](http://en.wikipedia.org/wiki/Central_European_Time)). We
+ expect you to join in on a regular basis for help, discussions and
+ project updates. Note that you're not restricted to speaking to your
+ assigned mentor; the whole development team are willing to help
+ wherever they can.
+- Keep NetSurf's [project
+ goals](http://www.netsurf-browser.org/about/#ProjectGoals) in mind,
+ especially the first point.
+
+There is some more information in the [GSoC
+section](http://wiki.netsurf-browser.org/google-summer-of-code) of our
+wiki. Note particularly the [student
+guidelines](http://wiki.netsurf-browser.org/gsoc-student-guidelines).
+
+Please [get in touch](http://www.netsurf-browser.org/contact/) if our
+project idea appeals to you or if you have your own idea for either
+[NetSurf](http://www.netsurf-browser.org/) or one of NetSurf's
+[sub-projects](http://www.netsurf-browser.org/projects/). Come and chat
+to the developers in the NetSurf IRC channel or post to the developer
+mailing list.
+
+Project: Update Core Web Technology Libraries
+---------------------------------------------
+
+This is a project to improve and add features to the [NetSurf
+project](http://www.netsurf-browser.org/)'s core web-technology
+libraries. These libraries are MIT licenced and are available to, and
+used by, other projects. The libraries in question are:
+
+- [LibHubbub](http://www.netsurf-browser.org/projects/hubbub/) - HTML5
+ Parsing library
+- [LibCSS](http://www.netsurf-browser.org/projects/libcss/) - CSS
+ Parser and Selection Engine
+- [LibDOM](http://www.netsurf-browser.org/projects/libdom/) - Document
+ Object Model library
+
+### Project Outline
+
+- Phase 1 (Easy)
+ 1. Implement reamining LibDOM html element specialisations.
+ **Existing code:**
+ [libdom/src/html](http://git.netsurf-browser.org/libdom.git/tree/src/html)
+ Some, like html\_button\_element.c have implementations, while
+ most like html\_anchor\_element.c do not.
+ **Specification:** [Level 2 Document Object Model
+ HTML](http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/idl-definitions.html)
+- Phase 2 (One of the following)
+ 1. Bring Hubbub up to latest HTML5 spec. This involves comparing
+ the current implementation with the specification and updating
+ our implemenation where appropriate.
+ **Existing code:**
+ [libhubbub/src](http://git.netsurf-browser.org/libhubbub.git/tree/)
+ **Specification:** [HTML5
+ Parsing](http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html)
+
+ 2. Add CSS3 properties to LibCSS.
+ **Existing code:**
+ [libcss/src](http://git.netsurf-browser.org/libcss.git/tree/src)
+ **Specification:** [CSS
+ Specs](http://www.w3.org/Style/CSS/specs.en.html)
+
+The decision on Phase 2 will be made by the student and mentors,
+depending on the interests of the student, ability shown in Phase 1, and
+time remaining. It is not anticipated that there will be time for a
+student to do both items of Phase 2, however the work is there if a
+gifted student makes good progress.
+
+**Skills required:** Experience of the C programming language
+**Skills desirable:** HTML, DOM, CSS
+
diff --git a/index.mdwn b/index.mdwn
new file mode 100644
index 0000000..63c1771
--- /dev/null
+++ b/index.mdwn
@@ -0,0 +1,71 @@
+[[!meta title="Main Page"]]
+[[!meta author="Chris"]]
+[[!meta date="2016-09-10T17:42:15Z"]]
+
+
+Welcome to the NetSurf development wiki!
+
+This is a MediaWiki and the
+[[NetSurf_Development_Wiki:Formatting|netsurf_development_wiki/formatting]] page shows the markup that
+can be used.
+
+Code Documentation
+------------------
+
+[[!inline raw=yes pages="Documentation"]]
+
+Development planning
+--------------------
+
+- [[NetSurf Development Plan|development_plan]] — contains planning
+ for the next major release.
+- [[Todo Lists|todo]] — contains various
+ planning documents
+- [[LibDOM|libdom]] — status of LibDOM
+ project
+- [[LibCSS|test/libcss/nstests]] — status of tests
+- [[NetSurf using core buildsystem|netsurf_corebuild]] - proposal for source
+ restructure and use of core buildsystem
+
+### historical
+
+- [[Disc Caching and History|disc_caching_and_history]] — proposal for new
+ functionality
+- [[Frames|frames]] — proposal for new
+ implementation
+- [[LibHubbub|libhubbub]] - status of bugs
+
+Release planning
+----------------
+
+The [[Release Process|release_process]] details what needs to
+be done for a release.
+
+[[Unreleased|netsurf_3.6]] — Organisation of next
+release.
+
+[[Releases|released_versions]]
+
+Google Summer of Code
+---------------------
+
+- [[Google Summer of Code Information|gsoc]]
+- [[GSoC Student Guidelines|gsoc/student_guidelines]] — contains helpful
+ information for students interested in working on NetSurf over the
+ Google Summer of Code 2009. Specially, how to get on our good side!
+- [[GSoC Requirements|gsoc/requirements]]
+
+Other Resources
+---------------
+
+- [[NetSurf Society|society/]] — Information about
+ the society.
+- [NetSurf Web Site](http://www.netsurf-browser.org/) — contains
+ user-facing and high-level development information.
+- [Source code viewer](http://source.netsurf-browser.org/) — is a web
+ interface for our source repository.
+- [[The CI system setup|continuous_integration]] — Information for
+ dealing with the CI system.
+- [[The Mantis issue tracker|bug_tracker]] — Information for
+ using the NetSurf bug tracker.
+
diff --git a/layout.mdwn b/layout.mdwn
new file mode 100644
index 0000000..ba97b22
--- /dev/null
+++ b/layout.mdwn
@@ -0,0 +1,34 @@
+[[!meta title="Layout"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2010-04-17T21:17:08Z"]]
+
+
+[[!toc]] This page is for planning
+the new layout engine [[scheduled for NetSurf 4.0|development_plan]].
+
+### Overview
+
+At the moment NetSurf can only run layout on the whole box tree. This
+happens every time the window width is changed, to let NetSurf reflow
+the content. There are some optimisations where the layout code knows if
+bits of the layout are fixed-width and won't be affected by a reflow.
+
+Currently we don't handle partial layouts of sections of the box tree.
+For example, if a scroll:auto; is laid out to available width, and the
+contained content exceeds a specified height, a scrollbar needs to be
+inserted. This should cause the descendants to the scroll:auto; to be
+laid out to available width - scrollbar width.
+
+Things that require the layout engine to be able to run on parts of an
+already-laid-out page are:
+
+- New image fetched and it has width/height not specified in HTML or
+ CSS
+- Overflow scrollbar insertion affects available width
+- Frame scrollbar insertion affects available width
+- Dynamic CSS pseudo classes
+- JavaScript changing stuff or adding stuff
+
+Working out which bits of the page are affected by any given change may
+not be easy.
+
diff --git a/libcss_style_sharing.mdwn b/libcss_style_sharing.mdwn
new file mode 100644
index 0000000..1c8a635
--- /dev/null
+++ b/libcss_style_sharing.mdwn
@@ -0,0 +1,48 @@
+[[!meta title="LibCSS Style Sharing"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2014-01-03T15:21:20Z"]]
+
+
+[[!toc]] At the moment NetSurf does
+not share computed styles. Every element on every page has its own
+unique computed style allocated. Computed styles are quite large.
+Consider the following page:
+
+- <http://git.netsurf-browser.org/netsurf.git/tree/render/layout.c>
+
+It has over twenty thousand element nodes each with its own computed
+style. But there are less than 40 unique computed styles on the page.
+This is a massive waste of memory.
+
+Computed Style Sharing
+----------------------
+
+If different elements can reference the same computed styles, we can
+save a lot of memory.
+
+- Computed styles will become reference counted.
+- There are two ways to go about sharing computed styles:
+ 1. Memoising calls to css\_get\_style()
+ - We'll use selection calbacks to find if node has previous
+ sibling with same element name, classes, etc. If so the
+ style for node can be an extra reference to the computed
+ style of the previous sibling.
+ - Presentational hint gathering for nodes needs to change such
+ that presentational hints for two nodes can be compared.
+ - Only shares styles between siblings. Could be extended to
+ share between cousins, etc.
+ - As well as saving memory, this will make selection faster.
+ - It will be a big saving in cases where styles can be
+ shared, by bypassing the need to iterate over the
+ applicable selector chains.
+ - In cases where the styles can't be shared, it will have
+ a relatively small cost.
+
+ 2. Interning computed styles
+ - Will have a performance cost.
+ - Much greater scope for sharing computed styles than the
+ above.
+ - Can even share computed styles between different pages.
+ (NetSurf will be unique in doing that.)
+ - Fully compatible with the above, so we can do both.
+
diff --git a/libdom.mdwn b/libdom.mdwn
new file mode 100644
index 0000000..2aa05df
--- /dev/null
+++ b/libdom.mdwn
@@ -0,0 +1,22 @@
+[[!meta title="LibDOM"]]
+[[!meta author="Parwana"]]
+[[!meta date="2014-03-12T13:43:04Z"]]
+
+
+[[!toc]]
+
+- [LibDOM homepage](http://www.netsurf-browser.org/projects/libdom/)
+
+Standard Support Status
+-----------------------
+
+- [[Core Support Status|libdom/core_support_status]]
+- [[Events Support Status|libdom/events_support_status]]
+
+Design/TODO
+-----------
+
+- [[MutationEvent generation|libdom/the_mutationevent_generation]]
+- [[Minimal subset|libdom/minimalsubset]]
+- [[Sequence planning for LibDOM specialisations|sequence_planning_for_libdom_specialisations]]
+
diff --git a/libdom/core_support_status.mdwn b/libdom/core_support_status.mdwn
new file mode 100644
index 0000000..428b761
--- /dev/null
+++ b/libdom/core_support_status.mdwn
@@ -0,0 +1,254 @@
+[[!meta title="LibDOM/Core Support Status"]]
+[[!meta author="Struggleyb"]]
+[[!meta date="2009-08-14T09:09:29Z"]]
+
+
+[[!toc]]
+
+DOM Level 1
+-----------
+
+The DOMTS test result for this level are:
+
+ Total: 527
+ Passed: 421
+ Failed: 106
+ Conversion Error: 2
+ Compile Error: 19
+ Run Error: 52
+ Not Support: 33
+
+The errors mostly root from our XML parser, libxml's SAX parsing ability
+is not very well for entity and namespace. The errors will be fixed
+after we change a XML parser.
+
+
+ DocumentFragment: All
+
+ Document:
+ docType: Yes
+ implementation: Yes
+ documentElement: Yes
+ createDocument: Yes
+ createDocumentFragment: Yes
+ createTextNode: Yes
+ createComment: Yes
+ createCdataSection: Yes
+ createProcessingInstruction: Yes
+ createAttribute: Yes
+ createEntityReference: Yes
+ getElementsByTagName: Yes
+
+ Node:
+ nodeName: Yes
+ nodeValue: Yes
+ nodeType: Yes
+ parentNode: Yes
+ childNodes: Yes
+ firstChild: Yes
+ lastChild: Yes
+ previousSibling: Yes
+ nextSibling: Yes
+ attributes: Yes
+ inserBefore: Yes
+ replaceChild: Yes
+ removeChild: Yes
+ appendChild: Yes
+ hasChildNodes: Yes
+ cloneNode: Yes
+
+ NodeList:
+ item: Yes
+ length: Yes
+
+ NamedNodeMap:
+ getNamedItem: Yes
+ setNamedItem: Yes
+ removeNamedItem: Yes
+ item: Yes
+ length: Yes
+
+ CharacterData:
+ data: Yes
+ length: Yes
+ substringData: Yes
+ appendData: Yes
+ insertData: Yes
+ deleteData: Yes
+ replaceData: Yes
+
+ Attr:
+ name: Yes
+ specified: Yes
+ value: Yes
+
+ Element:
+ tagName: Yes
+ getAttribute: Yes
+ setAttribute: Yes
+ removeAttribute: Yes
+ getAttributeNode: Yes
+ setAttributeNode: Yes
+ removeAttributeNode: Yes
+ getElementsByTagName: Yes
+ normalize: No
+
+ Text:
+ splitText: Yes
+
+ Comment: All
+
+ CDATASection: All
+
+ DocumentType:
+ name: Yes
+ entities: No
+ notations: No
+
+ Notatoin: No Interface
+
+ Entity: No Interface
+
+ EntityReference: All
+
+ ProcessingInstruction: All
+
+DOM Level 2
+-----------
+
+The DOMTS test result for this level are:
+
+ Total: 282
+ Passed: 171
+ Failed: 111
+ Conversion Error: 5
+ Compile Error: 14
+ Run Error: 90
+ Not Support: 18
+
+The errors mostly root from our XML parser, libxml's SAX parsing ability
+is not very well for entity and namespace. The errors will be fixed
+after we change a XML parser.
+
+
+ DOMImplementation:
+ hasFeature: Yes
+ createDocumentType: Yes
+ createDocument: Yes
+
+ Document:
+ importNode: Yes
+ createElementNS: Yes
+ createAttributeNS: Yes
+ getElementsByTagNameNS: Yes
+ getElementById: Yes
+
+ Node:
+ normalize: No
+ isSupported: Yes
+ namespaceURI: No
+ prefix: No
+ localName: Yes
+ hasAttributes: Yes
+
+ NamedNodeMap:
+ getNamedItemNS: Yes
+ setNamedItemNS: Yes
+ removeNamedItemNS: Yes
+
+ Attr:
+ ownerElement: Yes
+
+ Element:
+ getAttributeNS: Yes
+ setAttributeNS: Yes
+ removeAttributeNS: Yes
+ getAttributeNodeNS: Yes
+ setAttributeNodeNS: Yes
+ getElementsByTagNameNS: Yes
+ hasAttribute: Yes
+ hasAttributeNS: Yes
+
+ DocumentType:
+ publicId: Yes
+ systemId: Yes
+ internalSubset: No
+
+DOM Level 3
+-----------
+
+The DOMTS test result for this level are:
+
+ Total: 722
+ Passed: 82
+ Failed: 640
+ Conversion Error: 135
+ Compile Error: 313
+ Run Error: 92
+ Not Support: 100
+
+We did not support many features in level 3 now. After we change our XML
+parser, we should support now.
+
+
+ DOMStringList: No Interface
+
+ NameList: No Interface
+
+ DOMImplementationList: All
+
+ DOMImplementationSource: All
+
+ DOMImplementation:
+ hasFeature: No
+
+ Document:
+ inputEncoding: No
+ xmlEncoding: No
+ xmlStandalone: No
+ xmlVersion: No
+ strictErrorChecking: No
+ documentURI: Yes
+ adoptNode: Yes
+ domConfig: No
+ normalizeDocument: No
+ renameNode: No
+
+ Node:
+ compareDocumentPosition: No
+ textContent: Yes
+ isSameNode: Yes
+ lookupPrefix: No
+ isDefaultNamespace: No
+ lookupNamespaceURI: No
+ isEqualNode: Yes
+ getFeature: Yes
+ setUserData: Yes
+ getUserData: Yes
+
+ Attr:
+ schemaTypeInfo: No
+ isId: Yes
+
+ Element:
+ schemaTypeInfo: No
+ setIdAttribute: Yes
+ setIdAttributeNS: Yes
+ setIdAttributeNode: Yes
+
+ Text:
+ isElementContentWhitespace: No
+ wholeText: No
+ replaceWholeText: No
+
+ TypeInfo: No
+
+ UserDataHandler: All
+
+ DOMError: No Interface
+
+ DOMErrorHandler: No Interface
+
+ DOMLocator: No Interface
+
+ DOMConfiguration: No Interface
diff --git a/libdom/events_support_status.mdwn b/libdom/events_support_status.mdwn
new file mode 100644
index 0000000..4f92122
--- /dev/null
+++ b/libdom/events_support_status.mdwn
@@ -0,0 +1,115 @@
+[[!meta title="LibDOM/Events Support Status"]]
+[[!meta author="Struggleyb"]]
+[[!meta date="2009-08-14T09:08:39Z"]]
+
+
+[[!toc]]
+
+Level 1
+-------
+
+ Level 1 has No Events model defined at all. ^_^
+
+Level 2
+-------
+
+The DOMTS test result for this level are:
+
+ Total: 26
+ Passed: 19
+ Failed: 7
+ Conversion Error: 5
+ Compile Error: 1
+ Run Error: 1
+ Not Support: 0
+
+The errors mostly root from our conversion script, there are many new
+XML elements need to be converted before all the testcase's XML file can
+be converted successfully. But there are only 6 test cases failed, I
+don't think it worth the work to write a more complex conversion script
+to just deal with 6 trivial test cases. So, just leave it as this.
+
+
+ EventTarget:
+ addEventListener: Yes
+ removeEventListener: Yes
+ dispatchEvent: Yes
+
+ EventListener: All
+
+ Event:
+ type: Yes
+ target: Yes
+ currentTarget: Yes
+ eventPhase: Yes
+ bubbles: Yes
+ cancelable: Yes
+ timeStamp: Yes
+ stopPropagation: Yes
+ preventDefault: Yes
+ initEvent: Yes
+
+ EventException: All
+
+ DocumentEvent:
+ createEvent: Yes
+
+ UIEvent:
+ view: Yes(But no AbstractView support!)
+ detail: Yes
+ initUIEvent: Yes
+
+ MouseEvent: All
+
+ MutationEvent: All
+
+Level 3
+-------
+
+The DOMTS test result for this level are:
+
+ Total: 1
+ Passed: 0
+ Failed: 1
+ Conversion Error: 1
+ Compile Error: 0
+ Run Error: 0
+ Not Support: 0
+
+The errors mostly root from our conversion script, there are many new
+XML elements need to be converted before all the testcase's XML file can
+be converted successfully. But there are only 1 test case failed, I
+don't think it worth the work to write a more complex conversion script
+to just deal with 6 trivial test cases. So, just leave it as this.
+
+
+ Event:
+ namespaceURI: No
+ stopImmediatePropagation: Yes
+ defaultPrevented: Yes
+ initEventNS: Yes
+
+ CustomEvent: All
+
+ EventTarget:
+ addEventListenerNS: No
+ removeEventListenerNS: No
+
+ DocumentEvent:
+ canDispatch: No
+
+ UIEvent: All
+
+ TextEvent: All
+
+ KeyboardEvent: All
+
+ MouseEvent: All
+
+ MouseMultiWheelEvent: All
+
+ MouseWheelEvent: All
+
+ MutationEvent: All
+
+ MutationNameEvent: All
diff --git a/libdom/minimalsubset.mdwn b/libdom/minimalsubset.mdwn
new file mode 100644
index 0000000..808a5f3
--- /dev/null
+++ b/libdom/minimalsubset.mdwn
@@ -0,0 +1,99 @@
+[[!meta title="LibDOM/MinimalSubset"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2012-03-31T09:51:42Z"]]
+
+
+[[!toc]]
+
+Overview
+--------
+
+This page enumerates the minimal subset required before it's worth
+integrating LibDOM with NetSurf's current engine:
+
+- Core (Document, Element, Attribute, etc)
+- EventTarget
+- HTMLDocument, HTMLElement
+
+With the above interfaces, we can create an HTMLDocument instance per
+page and create a tree of HTMLElement instances for the content.
+Specialised HTMLElement subclasses can be added as required.
+
+Current Status
+--------------
+
+We now have all the above interfaces implemented (to some level of
+completeness). The example dom-structure-dump code is now capable of
+building an HTMLDocument using HTMLElement nodes and not leaking dynamic
+resources.
+
+Before integration can proceed, the following (at least) needs doing:
+
+- <s>We need to invent an API to permit comparison of classes to
+ satisfy LibCSS' has\_class selection callback's needs.</s>
+ - <s>Implement this API</s>.
+
+Once the above things are complete, integration may proceed as follows:
+
+- <s>Remove the parser binding infrastructure from NetSurf's HTML
+ content handler and replace it with instantiation of LibDOM.</s>
+- <s>Port the box tree constructor to the LibDOM API</s>
+- <s>Fix up anything else that expects a libxml tree (save complete is
+ a likely candidate)</s>
+- Construct form gadgets during box tree construction & register them
+ with the relevant DOM node
+
+In order to not have memory consumption issues and performance
+regressions, we also need to to:
+
+- <s>Replace the hash table of EventListeners on an EventTarget with a
+ linked list, or similar -- the current implementation is both a
+ memory hog and broken.</s>
+- <s>Replace the hash tables for Attributes attached to Element nodes
+ with linked lists, or similar. Again, this is currently wasting
+ memory for no benefit.</s>
+- The Hubbub parser binding needs bringing into sync with the feature
+ set of the parser binding used in NetSurf. Feature parity must be
+ ensured to avoid regressions. Specifically:
+ - <s>There needs to be a way to set the quirks mode of a document,
+ and retrieve it (i.e. specialised API on HTMLDocument)</s>
+ - Form association needs implementing (i.e. specialised API on
+ HTMLFormElement)
+ - Fix the mess that is/implement HTMLCollection,
+ HTMLOptionsCollection, HTMLFormElement, HTMLInputElement,
+ HTMLSelectElement, HTMLOptionElement, HTMLTextareaElement
+ (May get away with just HTMLCollection and HTMLFormElement
+ initially)
+ - HTMLCollection can \*not\* assume that the collection
+ contents all live beneath a fixed root node
+ (particularly for form inputs)
+ - Register form control elements with their form
+ - Work out when to deregister them again
+ - <s>Class/id attribute optimisations need retaining (see
+ below)</s>
+- <s>HTMLElement needs to gain optimisations for class attributes
+ (i.e. pre-parse the value string into individual class identifiers).
+ See NetSurf's existing Hubbub binding for an approximation of what's
+ needed -- HTMLElement.setAttr(NS) is probably where this needs to
+ live (or possibly implement it in Element.setAttr(NS) or
+ Attr.setValue if we want the same behaviour for XML documents). </s>
+
+The above work can be done in parallel with the integration work but
+must be completed before a release can occur.
+
+To tidy things up before a libdom release, we need to do the following:
+
+- Get speed back to pre-libdom.
+- Sort out DOM events.
+- Cleanup idea:
+ - Every point in netsurf which uses libdom should ensure any time
+ it passes a pointer to a dom\_node pointer, it makes it NULL
+ first.
+ - Then every API in libdom which takes a pointer to a dom\_node
+ pointer in order to return a dom\_node pointer, it asserts that
+ the pointer points to a NULL.
+ - Then once we're sure that no user is asserting we alter that
+ assert to an "if not NULL, unref and set to NULL"
+ - Then we can simplify callers, often into for() loops rather than
+ complex while loops with unreffings.
+
diff --git a/libdom/the_mutationevent_generation.mdwn b/libdom/the_mutationevent_generation.mdwn
new file mode 100644
index 0000000..ae00db3
--- /dev/null
+++ b/libdom/the_mutationevent_generation.mdwn
@@ -0,0 +1,96 @@
+[[!meta title="LibDOM/The MutationEvent generation"]]
+[[!meta author="Struggleyb"]]
+[[!meta date="2009-08-09T10:20:48Z"]]
+
+
+[[!toc]]
+
+Events with Methods Generate them
+---------------------------------
+
+
+ DOMSubtreeModified:
+
+
+ DOMNodeRemovedFromDocument:
+ Node.replaceChild
+ Node.removeChild
+ Element.removeAttribute
+ Element.setAttributeNode
+ Element.removeAttributeNode
+ Element.removeAttributeNS
+ Element.setAttributeNodeNS
+
+ DOMNodeInsertedIntoDocument:
+ Node.insertBefore
+ Node.replaceChild
+ Node.appendChild
+ Element.setAttribute
+ Element.setAttributeNode
+ Element.setAttributeNS
+ Element.setAttributeNodeNS
+
+ DOMNodeInserted:
+ Node.insertBefore
+ Node.replaceChild
+ Node.appendChild
+ Element.setAttribute
+ Element.setAttributeNode
+ Element.setAttributeNS
+ Element.setAttributeNodeNS
+
+ DOMNodeRemoved:
+ Node.replaceChild
+ Node.removeChild
+ Element.removeAttribute
+ Element.setAttributeNode
+ Element.removeAttributeNode
+ Element.removeAttributeNS
+ Element.setAttributeNodeNS
+
+ DOMAttrModified:
+ Element.setAttribute
+ Element.removeAttribute
+ Element.setAttributeNode
+ Element.removeAttributeNode
+ Element.setAttributeNS
+ Element.removeAttributeNS
+ Element.setAttributeNodeNS
+
+ DOMCharacterDataModified:
+ Node.nodeValue
+ CharacterData.data
+ CharacterData.appendData
+ CharacterData.deleteData
+ CharacterData.insertData
+ CharacterData.replaceData
+ ProcessingInstruction.data
+
+#### Some Event Generation Order consideration
+
+As above, some changes of DOM caused by certain API can emit multiple
+Events. In some situation, the DOM spec define the order of the events.
+For example, when an Attr is removed from an element, the implementation
+should send the following events as the following order:
+
+ DOMNodeRemoved
+ DOMAttrModified
+ DOMSubtreeModified
+
+But in other situation, the events order are not specified. For example,
+when an Attr is added to an element, the implement should may send:
+
+ DOMNodeInserted
+ DOMAttrModified
+ DOMSubtreeModified
+
+or
+
+ DOMAttrModified
+ DOMNodeInserted
+ DOMSubtreeModified
+
+The point here is, the DOMAttrModified and DOMNodeInserted can be
+dispatched in any order, but the DOMSubtreeModified event should always
+the last event after bunch of events.
+
diff --git a/libdom_core_support_status.mdwn b/libdom_core_support_status.mdwn
new file mode 100644
index 0000000..2b0dc5b
--- /dev/null
+++ b/libdom_core_support_status.mdwn
@@ -0,0 +1,9 @@
+[[!meta title="LibDOM Core Support Status"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2009-08-07T11:48:15Z"]]
+
+
+[[!toc]]
+
+1. REDIRECT [[LibDOM/Core Support Status|libdom/core_support_status]]
+
diff --git a/libdom_events_support_status.mdwn b/libdom_events_support_status.mdwn
new file mode 100644
index 0000000..fa5e5a0
--- /dev/null
+++ b/libdom_events_support_status.mdwn
@@ -0,0 +1,9 @@
+[[!meta title="LibDOM Events Support Status"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2009-08-07T11:48:51Z"]]
+
+
+[[!toc]]
+
+1. REDIRECT [[LibDOM/Events Support Status|libdom/events_support_status]]
+
diff --git a/libhubbub.mdwn b/libhubbub.mdwn
new file mode 100644
index 0000000..739072c
--- /dev/null
+++ b/libhubbub.mdwn
@@ -0,0 +1,59 @@
+[[!meta title="LibHubbub"]]
+[[!meta author="Parwana"]]
+[[!meta date="2014-07-21T14:30:43Z"]]
+
+
+[[!toc]] Following are the places
+where Libhubbub still lacks, although it is now reliable at most places.
+
+1\) Element stack size inflates on repeated pushing, without reducing its
+size during pop. The proposed solution is to reduce size by 1/2 once the
+used proportion falls to below 1/3. A simillar increase to twice it's
+size once it's full. An approval from core developers is neccessary
+before trying to implement this.
+
+2\) The tokeniser has become very messy & unreadable because of
+introduction of script related states. The proposed solution is to have
+standalone handlers for each state, But this may mean a significant
+increase in code size and redundant code, giving a blow to code
+reusability.
+
+3\) The library has been significantly slowed down because it is now
+required to store tag Attributes. I have currently stored it on the
+context details. But repeated use of strndup to copy attribute strings
+during stack push as well as during formatting list push, has severely
+slowed down things. However, it works reliably.
+
+4\) Assumption: The client currently doesn't support creation of template
+elements. Libhubbub can now properly handle template tags, assuming
+template to be equivalent to any other tag. When template creation
+support is provided, the only thing to be done would be to incorporate
+it into the insert\_element method of the treebuilder.
+
+5\) Handling script tags in SVG mode requires the client to support it
+too. The specs are a bit hazy and any input on it would be appreciated:
+www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html\#parsing-main-inforeign
+\<-look under the script end tag .
+
+6\) I couldn't guess how to find out whether the document is an
+iframe-source document. If any inputs can be provided, it would be
+helpful enough. :)
+
+7\) The charset detection mechanism previously prescaned the doc upto 512
+bytes to find the meta tag. This has been increased it to 1024 bytes,
+and this requires approval of the core developers. Also, currently, no
+algorithms have been implemented to auto-detect document encoding. If
+appropriate sources are provided, I will try implementing those in
+Hubbub.
+
+8\) XML violations are a special set of rules to make make the API safe
+for the xml pipeline. And Hubbub currently doesn't support it. If the
+core developers see this to be neccessary at all, I will try
+implementing it. Ref:
+<http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#coercing-an-html-dom-into-an-infoset>
+
+9\) Some errors out of my knowledge may have crept into the library.
+After all human is all but err :-P
+
+Rupinder Singh Khokhar
+
diff --git a/module/index.mdwn b/module/index.mdwn
new file mode 100644
index 0000000..63a668a
--- /dev/null
+++ b/module/index.mdwn
@@ -0,0 +1,20 @@
+[[!meta title="Module:Index"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-01-09T22:43:50Z"]]
+
+
+[[!toc]]
+
+|colspan=3 style="background: gray; color: white" | NetSurf Code Modules|
+|-----------------------------------------------------------------------|
+|Module|Prefix|Purpose|
+|[[Module:utils/container|module/utils/container]]|container|File format for themes|
+|[[Module:utils/errors|module/utils/errors]]|nserror|Common error codes|
+|[[Module:utils/filename|module/utils/filename]]|filename|Allocation of unique filenames|
+|[[Module:utils/findresource|module/utils/findresource]]|*various*|Finds resource files in a list of locations|
+|[[Module:utils/hashtable|module/utils/hashtable]]|hash|Write-once string to string hash tables|
+|[[Module:utils/http|module/utils/http]]|http|HTTP header parsing|
+|[[Module:utils/locale|module/utils/locale]]|ls|Locale-specific variants of ctype.h functions|
+
+[[!tag module]]
+
diff --git a/module/utils/container.mdwn b/module/utils/container.mdwn
new file mode 100644
index 0000000..5025c2b
--- /dev/null
+++ b/module/utils/container.mdwn
@@ -0,0 +1,38 @@
+[[!meta title="Module:utils/container"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-01-09T22:28:35Z"]]
+
+
+[[!toc]] File format for NetSurf
+themes.
+
+: ''Note: possibly incomplete; no themes currently exist.
+
+Prefix
+------
+
+`container_`
+
+Depends on
+----------
+
+- [[Module:utils/log|module/utils/log]]
+- [[Module:utils/messages|module/utils/messages]]
+- [[Module:utils/utils|module/utils/utils]]
+
+Description
+-----------
+
+This module implements a simple file format which contains a series of
+files (i.e. named chunks of data).
+
+Files
+-----
+
+utils/container.h
+: Interface
+utils/container.c
+: Implementation
+
+[[!inline raw=yes pages="Module:Index"]]
+
diff --git a/module/utils/errors.mdwn b/module/utils/errors.mdwn
new file mode 100644
index 0000000..e2b5237
--- /dev/null
+++ b/module/utils/errors.mdwn
@@ -0,0 +1,38 @@
+[[!meta title="Module:utils/errors"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-01-09T22:36:17Z"]]
+
+
+[[!toc]] Common error (and OK)
+return codes.
+
+Prefix
+------
+
+`nserror`
+`NSERROR_`
+
+Depends on
+----------
+
+None.
+
+Description
+-----------
+
+This module defines standard return codes used throughout NetSurf. It
+defines the enum **nserror**.
+
+**NSERROR\_OK** indicates that a function was successful. Other values
+indicate an error as described in utils/error.h.
+
+Files
+-----
+
+utils/error.h
+: Interface
+
+There is no associated .c file.
+
+[[!inline raw=yes pages="Module:Index"]]
+
diff --git a/module/utils/filename.mdwn b/module/utils/filename.mdwn
new file mode 100644
index 0000000..6c97e46
--- /dev/null
+++ b/module/utils/filename.mdwn
@@ -0,0 +1,38 @@
+[[!meta title="Module:utils/filename"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-01-09T22:36:41Z"]]
+
+
+[[!toc]] Central method of
+obtaining unique filenames.
+
+Prefix
+------
+
+`filename_`
+
+Depends on
+----------
+
+- [[Module:utils/log|module/utils/log]]
+- [[Module:utils/utils|module/utils/utils]]
+
+Description
+-----------
+
+This module allocates unique filenames in a tree in NetSurf's cache
+directory. Files are arranged in a tree 4 levels deep with up to 64
+files per lowest level directory.
+
+Performance appears to be O(number of files).
+
+Files
+-----
+
+utils/filename.h
+: Interface
+utils/filename.c
+: Implementation
+
+[[!inline raw=yes pages="Module:Index"]]
+
diff --git a/module/utils/findresource.mdwn b/module/utils/findresource.mdwn
new file mode 100644
index 0000000..437367c
--- /dev/null
+++ b/module/utils/findresource.mdwn
@@ -0,0 +1,35 @@
+[[!meta title="Module:utils/findresource"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-01-09T22:37:11Z"]]
+
+
+[[!toc]] Finds resource files in a
+list of locations.
+
+Prefix
+------
+
+Does not conform to convention; see header.
+
+Depends on
+----------
+
+None.
+
+Description
+-----------
+
+This module supplies functions to find files in a list of directories.
+This is used to load resource files, for example looking in the home
+directory first, and then other standard locations.
+
+Files
+-----
+
+utils/findresources.h
+: Interface
+utils/findresources.c
+: Implementation
+
+[[!inline raw=yes pages="Module:Index"]]
+
diff --git a/module/utils/hashtable.mdwn b/module/utils/hashtable.mdwn
new file mode 100644
index 0000000..94b59f9
--- /dev/null
+++ b/module/utils/hashtable.mdwn
@@ -0,0 +1,38 @@
+[[!meta title="Module:utils/hashtable"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-01-09T22:37:26Z"]]
+
+
+[[!toc]] Write-once string to
+string hash tables.
+
+Prefix
+------
+
+`hash_`
+
+Depends on
+----------
+
+- [[Module:utils/log|module/utils/log]]
+
+Description
+-----------
+
+This module implements mappings from string to string using a hash
+table. Pairs can not be removed once added.
+
+The tables have a fixed number of buckets specified on creation, but
+don't grow beyond that. Entries are chained in a linked list in each
+bucket.
+
+Files
+-----
+
+utils/hashtable.h
+: Interface
+utils/hashtable.c
+: Implementation
+
+[[!inline raw=yes pages="Module:Index"]]
+
diff --git a/module/utils/http.mdwn b/module/utils/http.mdwn
new file mode 100644
index 0000000..16b8cbc
--- /dev/null
+++ b/module/utils/http.mdwn
@@ -0,0 +1,34 @@
+[[!meta title="Module:utils/http"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-01-09T22:37:40Z"]]
+
+
+[[!toc]] HTTP header parsing
+functions.
+
+Prefix
+------
+
+`http_`
+
+Depends on
+----------
+
+- [[Module:utils/errors|module/utils/errors]]
+
+Description
+-----------
+
+This module contains functions to assist with parsing certain types of
+HTTP headers.
+
+Files
+-----
+
+utils/http.h
+: Interface
+utils/http.c
+: Implementation
+
+[[!inline raw=yes pages="Module:Index"]]
+
diff --git a/module/utils/locale.mdwn b/module/utils/locale.mdwn
new file mode 100644
index 0000000..4faa680
--- /dev/null
+++ b/module/utils/locale.mdwn
@@ -0,0 +1,38 @@
+[[!meta title="Module:utils/locale"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-01-09T22:42:48Z"]]
+
+
+[[!toc]] Locale-specific variants
+of ctype.h functions.
+
+Prefix
+------
+
+`ls_`
+
+Depends on
+----------
+
+None.
+
+Description
+-----------
+
+This module supplies versions of the character classification functions
+in <ctype.h> that respect the current locale.
+
+NetSurf has a setlocale(LC\_ALL, "C") call in initialization for
+consistent and predictable behaviour. These functions however use the
+environment's locale.
+
+Files
+-----
+
+utils/locale.h
+: Interface
+utils/locale.c
+: Implementation
+
+[[!inline raw=yes pages="Module:Index"]]
+
diff --git a/netsurf_2.5.mdwn b/netsurf_2.5.mdwn
new file mode 100644
index 0000000..a72ae8c
--- /dev/null
+++ b/netsurf_2.5.mdwn
@@ -0,0 +1,28 @@
+[[!meta title="NetSurf 2.5"]]
+[[!meta author="Jmb"]]
+[[!meta date="2010-04-19T20:56:42Z"]]
+
+
+[[!toc]] This is a list of things
+that need to be done before NetSurf 2.5 can be released.
+
+Code
+----
+
+### Potential crashers
+
+### Other
+
+- GTK: Local history window redraw is broken in areas you have to
+ scroll to see
+
+Admin
+-----
+
+- Target frontends for release (RISC OS, GTK and Amiga OS 4.0)
+- [Changelog](http://www.netsurf-browser.org/temp/ChangeLog)
+- Testing
+- [Preparing release
+ branch](http://source.netsurf-browser.org/branches/release/netsurf/2/ReleaseAdmin)
+- ISO Image for burning to CDs?
+
diff --git a/netsurf_2.6.mdwn b/netsurf_2.6.mdwn
new file mode 100644
index 0000000..55b53f4
--- /dev/null
+++ b/netsurf_2.6.mdwn
@@ -0,0 +1,50 @@
+[[!meta title="NetSurf 2.6"]]
+[[!meta author="Reverse101"]]
+[[!meta date="2011-10-31T23:41:23Z"]]
+
+
+[[!toc]] This is a list of things
+that still need to be fixed before NetSurf 2.6 can be released.
+
+Code
+----
+
+### Potential crashers
+
+- ?
+
+### Memory usage
+
+- ?
+
+### Other
+
+- GTK: URL bar and search bar border messed up with Ubuntu theme
+
+### WONTFIX in 2.6
+
+- SSL / https breakage has been reported. (RISC OS on Beagleboard
+ only)
+
+Admin
+-----
+
+[reverse phone lookup](http://reversephonelookuppages.com/) [reverse
+cell phone
+lookup](http://www.prlog.org/11684341-reverse-cell-phone-lookup-number.html)
+[phone number
+lookup](http://www.prlog.org/11289974-phone-number-lookup-verizon-phone-number-reverse-lookup-to-get-information-you-need-quickly.html)
+[<http://ezinearticles.com/?Unpublished-Phone-Number-Lookup>---Find-Out-the-Identity-of-Your-Wifes-Lover&id=4664636
+phone number lookup] [reverse cell phone
+lookup](http://www.reversecellphonelookup.me/) [reverse phone
+lookup](http://www.linkedin.com/in/reversephonelookup1) [reverse phone
+lookup](http://www.reversephonelookuped.com/) [reverse phone
+lookup](http://www.reversephonelookupz.com/) [phone number
+lookup](http://www.articlesbase.com/information-technology-articles/reverse-cell-phone-number-lookup-how-to-choose-the-best-phone-number-lookup-service-3869930.html)
+
+- Target frontends for release (RISC OS, GTK and Amiga OS 4.0)
+- [Changelog](http://www.netsurf-browser.org/temp/ChangeLog)
+- Testing
+- [Preparing release
+ branch](http://source.netsurf-browser.org/branches/release/netsurf/2/ReleaseAdmin)
+
diff --git a/netsurf_2.7.mdwn b/netsurf_2.7.mdwn
new file mode 100644
index 0000000..52cabdf
--- /dev/null
+++ b/netsurf_2.7.mdwn
@@ -0,0 +1,71 @@
+[[!meta title="NetSurf 2.7"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2011-03-13T09:59:48Z"]]
+
+
+[[!toc]] This is a list of things
+that still need to be fixed before NetSurf 2.7 can be released.
+
+Code
+----
+
+### Potential crashers
+
+- ?
+
+### Memory usage
+
+- ?
+
+### Other
+
+- Install targets have bitrotted
+- Debian/Ubuntu packages
+
+### WONTFIX in 2.7
+
+- GTK: URL bar and search bar border messed up with Ubuntu 10.04 theme
+ -- Rounded corners are clipped. Probably the lib sexey thing is
+ broken.
+- framebuffer: leaks font stuff (Well, leaks in that it doesn't free
+ them on exit)
+- RISC OS: SSL / https breakage has been reported. (on Beagleboard
+ only)
+- core: cURL handles are huge, can we reduce our defaults or are we at
+ the minimum limit of acceptability?
+- core: Frames
+
+Admin
+-----
+
+### Timeline
+
+- Sat/Sun 12th/13th March developer weekend
+- Sunday 27th March SVN branch made
+- Sunday 10th April CD iso ready
+- Saturday 16th April Wakefield
+
+### Target frontends for release
+
+- RISC OS
+- GTK
+- Amiga OS 4.0
+- Cocoa
+- Windows - Currently set for tech. preview only
+
+### Misc
+
+- [Changelog](http://www.netsurf-browser.org/temp/ChangeLog)
+- Testing
+- [Preparing release
+ branch](http://source.netsurf-browser.org/branches/release/netsurf/2/ReleaseAdmin)
+
+Website
+-------
+
+- For each front end, screenshots (1024x768 window size prefered) of
+ the following:
+ 1. <http://www.netsurf-browser.org/>
+ 2. <http://en.wikipedia.org/wiki/Main_Page>
+ 3. <http://www.bbc.co.uk/>
+
diff --git a/netsurf_2.8.mdwn b/netsurf_2.8.mdwn
new file mode 100644
index 0000000..847028c
--- /dev/null
+++ b/netsurf_2.8.mdwn
@@ -0,0 +1,70 @@
+[[!meta title="NetSurf 2.8"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2011-09-18T12:12:56Z"]]
+
+
+[[!toc]] This is a list of things
+that still need to be fixed before NetSurf 2.8 can be released.
+
+Code
+----
+
+### Potential crashers
+
+- <s>Floating point exception on quit when no images have been
+ displayed. Divide by zero in image\_cache\_fini()</s> - Fixed in
+ revision 12794
+
+### Memory usage
+
+- ?
+
+### Other
+
+- <s>RISC OS: LWC strings remaining on exit</s> - fixed in r12805
+- <s>Amiga: resize frames redraw is broken</s> - fixed in r12802
+- Have any install targets broken? Missing resources? Trying to copy
+ things that have gone?
+- Debian/Ubuntu packages
+
+### WONTFIX in 2.8
+
+- GTK: URL bar and search bar border messed up with Ubuntu 10.04 theme
+ -- Rounded corners are clipped. Probably the lib sexey thing is
+ broken.
+- framebuffer: leaks font stuff (Well, leaks in that it doesn't free
+ them on exit)
+- core: cURL handles are huge, can we reduce our defaults or are we at
+ the minimum limit of acceptability?
+- New warnings since 2.7 in core (gcc version 3.4.6 (RISC OS GCCSDK
+ 3.4.6 Release 2)):
+
+<!-- -->
+
+ image/png.c: In function `png_cache_convert':
+ image/png.c:430: warning: variable 'bitmap' might be clobbered by `longjmp' or `vfork'
+ image/png.c:433: warning: variable 'row_pointers' might be clobbered by `longjmp' or `vfork'
+
+Admin
+-----
+
+### Timeline
+
+- Branch some time around 17th September 2011
+
+### Target frontends for release
+
+- RISC OS
+- GTK
+- Amiga OS 4.0
+- Cocoa
+- Windows - Currently set for tech. preview only
+- Atari?
+
+### Misc
+
+- [Changelog](http://www.netsurf-browser.org/temp/ChangeLog)
+- Testing
+- [Preparing release
+ branch](http://source.netsurf-browser.org/branches/release/netsurf/2/ReleaseAdmin)
+
diff --git a/netsurf_2.9.mdwn b/netsurf_2.9.mdwn
new file mode 100644
index 0000000..96642f5
--- /dev/null
+++ b/netsurf_2.9.mdwn
@@ -0,0 +1,83 @@
+[[!meta title="NetSurf 2.9"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2012-04-26T13:28:42Z"]]
+
+
+[[!toc]] This is a list of things
+that still need to be fixed before NetSurf 2.9 can be released.
+
+Code
+----
+
+### Potential crashers
+
+- ?
+
+### Memory usage
+
+- ?
+
+### Other
+
+- <s>GTK: Changing between tabs does not update the favicon to match
+ the current tab's page.</s> r13460
+- Framebuffer: Linux surface support.
+- Have any install targets broken? Missing resources? Trying to copy
+ things that have gone?
+- Debian/Ubuntu packages
+
+### WONTFIX in 2.9
+
+- Framebuffer: leaks font stuff (Well, leaks in that it doesn't free
+ them on exit)
+- Core: cURL handles are huge, can we reduce our defaults or are we at
+ the minimum limit of acceptability?
+- New warnings since 2.7 in core (gcc version 3.4.6 (RISC OS GCCSDK
+ 3.4.6 Release 2)):
+
+<!-- -->
+
+ image/png.c: In function `png_cache_convert':
+ image/png.c:430: warning: variable 'bitmap' might be clobbered by `longjmp' or `vfork'
+ image/png.c:433: warning: variable 'row_pointers' might be clobbered by `longjmp' or `vfork'
+
+Admin
+-----
+
+### Timeline
+
+- Branch some time in Jan 2012
+
+### Target frontends for release
+
+- RISC OS
+- GTK
+- Amiga OS 4.0
+- Cocoa
+- Atari
+- ?
+
+### Misc
+
+- [Changelog](http://www.netsurf-browser.org/temp/ChangeLog)
+- Testing
+- [Preparing release
+ branch](http://source.netsurf-browser.org/branches/release/netsurf/2/ReleaseAdmin)
+- Run the autobuilder. For example, with user:netsurf on
+ semichrome.net:
+
+<!-- -->
+
+ $ svn export svn://svn.netsurf-browser.org/trunk/netsurfbuild netsurfbuild-v2.9
+ $ cd netsurfbuild-v2.9
+ $ svn co svn://svn.netsurf-browser.org/tags/hubbub/<version> hubbub
+ $ svn co svn://svn.netsurf-browser.org/tags/libcss/<version> libcss
+ $ svn co svn://svn.netsurf-browser.org/tags/libnsbmp/<version> libnsbmp
+ $ svn co svn://svn.netsurf-browser.org/tags/libnsgif/<version> libnsgif
+ $ svn co svn://svn.netsurf-browser.org/tags/libparserutils/<version> libparserutils
+ $ svn co svn://svn.netsurf-browser.org/tags/libsvgtiny/<version> libsvgtiny
+ $ svn co svn://svn.netsurf-browser.org/tags/libwapcaplet/<version> libwapcaplet
+ $ svn co svn://svn.netsurf-browser.org/tags/netsurf/<version> netsurf
+ $ svn co svn://svn.netsurf-browser.org/trunk/netsurfweb
+ $ mkdir -p downloads/releases/
+ $ ./autobuild.pl --release="2.9"
diff --git a/netsurf_3.0.mdwn b/netsurf_3.0.mdwn
new file mode 100644
index 0000000..f5d52ba
--- /dev/null
+++ b/netsurf_3.0.mdwn
@@ -0,0 +1,88 @@
+[[!meta title="NetSurf 3.0"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2013-04-08T14:35:32Z"]]
+
+
+[[!toc]] This is a list of things
+that still need to be fixed before NetSurf 3.0 can be released.
+
+Code
+----
+
+### Potential crashers
+
+- ?
+
+### Memory usage
+
+- ?
+
+### Other
+
+- Buildsystem: Generate messages as part of build.
+- <s>Core: LibDOM: DOM events are a big performance regression.</s>
+- <s>Core: Remove last dependencies on LibXML.</s>
+- <s>Core: LibSVGTiny: Use LibDOM instead of LibXML.</s>
+- <s>GTK: Scrollwheel not working.</s>
+- <s>Buildsystem: We've all developed separate bash scripts to
+ automate library fetch/update/build. Get this unified and into
+ version control.</s>
+- <s>Documentation: Explain JS builds, their status, and what (not) to
+ expect.</s>
+
+### WONTFIX in 3.0
+
+- Core: Fix forms to use libdom properly. -- Postpone to 3.1.
+- Core: Fix entities getting separate BOX\_TEXT in box construction.
+ -- Postpone to 3.1.
+- Core: Use new treeview. -- Postpone to 3.1.
+- Framebuffer: Linux surface support. -- Postpone to 3.1.
+- New logo? -- Postpone to 3.1.
+
+Admin
+-----
+
+- <strong>Can we automate production of releases?</strong>
+- Have any install targets broken? Missing resources? Trying to copy
+ things that have gone?
+- Debian/Ubuntu packages
+
+### Timeline
+
+- Branch in Apr 2013
+
+### Target frontends for release
+
+- RISC OS
+- GTK
+- Amiga OS 4.0
+- Cocoa
+- Atari
+- ?
+
+### Misc
+
+- For releases, turn Logging off in RISC OS front end. In
+ !NetSurf.!Run: Set NetSurf\$Logging 0
+- [Changelog](http://www.netsurf-browser.org/temp/ChangeLog)
+- Testing
+- [Preparing release
+ branch](http://source.netsurf-browser.org/branches/release/netsurf/2/ReleaseAdmin)
+- <strong>Old and out of date:</strong> Run the autobuilder. For
+ example, with user:netsurf on semichrome.net:
+
+<!-- -->
+
+ $ svn export svn://svn.netsurf-browser.org/trunk/netsurfbuild netsurfbuild-v2.9
+ $ cd netsurfbuild-v2.9
+ $ svn co svn://svn.netsurf-browser.org/tags/hubbub/<version> hubbub
+ $ svn co svn://svn.netsurf-browser.org/tags/libcss/<version> libcss
+ $ svn co svn://svn.netsurf-browser.org/tags/libnsbmp/<version> libnsbmp
+ $ svn co svn://svn.netsurf-browser.org/tags/libnsgif/<version> libnsgif
+ $ svn co svn://svn.netsurf-browser.org/tags/libparserutils/<version> libparserutils
+ $ svn co svn://svn.netsurf-browser.org/tags/libsvgtiny/<version> libsvgtiny
+ $ svn co svn://svn.netsurf-browser.org/tags/libwapcaplet/<version> libwapcaplet
+ $ svn co svn://svn.netsurf-browser.org/tags/netsurf/<version> netsurf
+ $ svn co svn://svn.netsurf-browser.org/trunk/netsurfweb
+ $ mkdir -p downloads/releases/
+ $ ./autobuild.pl --release="2.9"
diff --git a/netsurf_3.1.mdwn b/netsurf_3.1.mdwn
new file mode 100644
index 0000000..25a949d
--- /dev/null
+++ b/netsurf_3.1.mdwn
@@ -0,0 +1,127 @@
+[[!meta title="NetSurf 3.1"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2013-06-09T08:41:26Z"]]
+
+
+[[!toc]] This is a list of things
+that still need to be done for the NetSurf 3.1 release.
+
+Admin
+-----
+
+- <strong>Improve automatic production of releases</strong>
+- Have any install targets broken? Missing resources? Trying to copy
+ things that have gone?
+- For releases, turn Logging off in RISC OS front end. In
+ !NetSurf.!Run: Set NetSurf\$Logging 0
+- Update and correct
+ [Changelog](http://www.netsurf-browser.org/temp/ChangeLog)
+- Testing
+- [[Release_Process|release_process]]
+- Debian/Ubuntu packages
+
+### Timeline
+
+- Branch in July 2013
+
+### Target frontends for release
+
+- RISC OS
+- GTK
+- Amiga OS 4.0
+- Cocoa
+- Atari
+- Windows
+
+### Misc
+
+- ?
+
+Code
+----
+
+### Potential crashers
+
+- ?
+
+### Memory usage
+
+- ?
+
+### Feature
+
+- One bitmap image content type, instead of one for each of JPEG, GIF,
+ etc. Make image format handlers into simple data converters for the
+ image content type.
+- Implement cloning of HTML contents (required for printing)
+- Keep source data in chunks; currently about a third of the heap is
+ wastage. Not possible until image handlers can stream.
+- Support for APNGs?
+- Use an XML parser for XHTML?
+- Rewrite URL database
+- Advert blocking needs overhaul
+ - current source of adblock css is long gone (nov 2004)
+ - the original idea source for css based blocking is
+ <http://www.floppymoose.com/userContent.css> but thats
+ inadequate for our purposes
+ - another source used in our current css was last updated 2008
+ <http://www.gozer.org/mozilla/ad_blocking/css/ad_blocking.css>
+ - an adblock plus source which might be worth adding instead of
+ doing it by css
+ <https://easylist-downloads.adblockplus.org/easylist.txt> where
+ <http://adblockplus.org/en/filters> is the file format. We might
+ be able to convert from the adblock format to css?
+
+### Other
+
+- Core: Fix forms to use libdom properly.
+- Core: Fix entities getting separate BOX\_TEXT in box construction.
+- Core: Use new treeview.
+- New logo?
+- Tidy up printing system
+- Drop \_GNU\_SOURCE on the floor
+
+#### RISC OS
+
+- riscos: Choices/options review and implement missing ones in UI
+- ?
+
+#### GTK
+
+- Use freetype directly, as pango makes us far slower for the sake of
+ functionality we don't use
+- Get rid of libsexy
+
+#### Framebuffer
+
+- Framebuffer: Linux surface and input support.
+- Support for mouse drags
+- Support for page scaling (needs work on plotters)
+- Caret rendering
+- Tabs
+
+#### Windows
+
+- Fix scrolling
+- windows: Choices/options review and implement missing ones in UI
+
+#### Amiga
+
+- amiga: Choices/options review and implement missing ones in UI
+- ?
+
+#### cocoa
+
+- cocoa: Choices/options review and implement missing ones in UI
+- ?
+
+#### Atari
+
+- atari: Choices/options review and implement missing ones in UI
+- ?
+
+WONTFIX
+-------
+
+Code entries explicitly omitted from this release
+
diff --git a/netsurf_3.2.mdwn b/netsurf_3.2.mdwn
new file mode 100644
index 0000000..295e3f9
--- /dev/null
+++ b/netsurf_3.2.mdwn
@@ -0,0 +1,31 @@
+[[!meta title="NetSurf 3.2"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2014-04-26T15:00:59Z"]]
+
+
+[[!toc]] This page lists the main
+goals for post NetSurf 3.1 development.
+
+Important / Urgent
+------------------
+
+### Core
+
+- Remove utils/container.{c|h}
+- [[LibCSS style sharing|libcss_style_sharing]]
+- Make NetSurf use core buildsystem
+- Make core buildsystem support tripples
+
+### GTK
+
+- Remove themes code
+
+### Framebuffer
+
+- Get linux framebuffer surface working
+
+Less Important / Less Urgent
+----------------------------
+
+- ?
+
diff --git a/netsurf_3.3.mdwn b/netsurf_3.3.mdwn
new file mode 100644
index 0000000..d49fac9
--- /dev/null
+++ b/netsurf_3.3.mdwn
@@ -0,0 +1,34 @@
+[[!meta title="NetSurf 3.3"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2015-03-08T11:57:14Z"]]
+
+
+[[!toc]] This page lists the main
+goals for post NetSurf 3.2 development.
+
+Important / Urgent
+------------------
+
+### Core
+
+- Remove utils/container.{c|h}
+- [[LibCSS style sharing|libcss_style_sharing]]
+- Make NetSurf use core buildsystem
+- fix css media queries
+
+### GTK
+
+- Remove themes code
+
+### Framebuffer
+
+- Get linux framebuffer surface working
+
+Less Important / Less Urgent
+----------------------------
+
+### Javascript
+
+- nsgenbind DOM constructors
+- Make a decision on ducktape
+
diff --git a/netsurf_3.4.mdwn b/netsurf_3.4.mdwn
new file mode 100644
index 0000000..bf07594
--- /dev/null
+++ b/netsurf_3.4.mdwn
@@ -0,0 +1,34 @@
+[[!meta title="NetSurf 3.4"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2016-02-09T11:08:51Z"]]
+
+
+[[!toc]] This page lists the main
+goals for post NetSurf 3.3 development.
+
+Important / Urgent
+------------------
+
+### Core
+
+- <s>Remove utils/container.{c|h}</s>
+- [[LibCSS style sharing|libcss_style_sharing]]
+- Make NetSurf use core buildsystem
+- [[fix css media queries|css_media_queries]]
+
+### GTK
+
+- Remove themes code
+
+### Framebuffer
+
+- Get linux framebuffer surface working
+
+Less Important / Less Urgent
+----------------------------
+
+### Javascript
+
+- nsgenbind DOM constructors
+- <s>Make a decision on duktape</s>
+
diff --git a/netsurf_3.5.mdwn b/netsurf_3.5.mdwn
new file mode 100644
index 0000000..4f80e33
--- /dev/null
+++ b/netsurf_3.5.mdwn
@@ -0,0 +1,88 @@
+[[!meta title="NetSurf 3.5"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2016-03-22T21:58:40Z"]]
+
+
+[[!toc]] This page lists the main
+goals for NetSurf 3.5.
+
+Important
+---------
+
+ensure no library updates please, this is a fixup release because 3.4 is
+a bit of a lemon
+
+Core
+----
+
+- <s>it's probably worth checking if the root certificates need an
+ update</s>
+- check library is noisy if missing
+- need to fix build without libutf8proc
+- fix build without libcurl (for local only and non standard http
+ fetchers)
+
+Docs
+----
+
+- need to go on a docs rampage as everything is a bit out of date or
+ missing references
+
+Frontends
+---------
+
+### GTK
+
+- <s>themes integration causes segfault at start with installed
+ versions due to resource changes</s>
+ - gutted GTK application themes, now rely on GTK theming --vince
+- openBSD report issues with tests?
+
+### RISC OS
+
+- <s>system etc. merges have bad dates - master branch has a script to
+ fix this on install - verify results are ok</s>
+ - Done: I asked Dave Higton to verify this, and all was well.
+ --tlsa
+- bundled resource updates
+- any critical bugs?
+
+### Amiga
+
+- <s>3.4 shipped broken</s>
+ - needs pile of fixes already applied to HEAD
+- <s>New compiler, needs testing and checking new binaries are
+ correct</s>
+ - have all the libraries been re-built with the new toolchain?
+ - Yes. --tlsa
+ - chrisy assures us it is all good --vince
+- <s>should we be doing something with os3 release yet?</s>
+ - probably not, it's still beta quality
+
+### haiku
+
+- need to sort out binary stripping.
+
+### windows
+
+- <s>nasty crashes on redraw due to unexpected core locking</s>
+- <s>the Windows version has never worked on Windows 10 . nasty issues
+ in font splitting
+ <http://bugs.netsurf-browser.org/mantis/view.php?id=2445> </s>
+ - This front end has never been a release candidate. I suggest we
+ don't expend effort on this for 3.5 unless a Windows maintainer
+ steps up. --tlsa
+ - mostly work again so possible preview release candidate
+
+### cocoa
+
+- completely non functional - crashes badly
+
+### framebuffer
+
+- Linux framebuffer surface input still broken
+
+### atari
+
+- no feedback on if either version build properly on CI
+
diff --git a/netsurf_3.6.mdwn b/netsurf_3.6.mdwn
new file mode 100644
index 0000000..a60256b
--- /dev/null
+++ b/netsurf_3.6.mdwn
@@ -0,0 +1,67 @@
+[[!meta title="NetSurf 3.6"]]
+[[!meta author="Chris"]]
+[[!meta date="2016-10-25T17:21:43Z"]]
+
+
+[[!toc]] This page lists the main
+goals for NetSurf 3.6.
+
+Important
+---------
+
+Core
+----
+
+- <s>it's probably worth checking if the root certificates need an
+ update</s>
+- <s>check library is noisy if missing</s>
+- need to fix build without libutf8proc
+- <s>fix build without libcurl (for local only and non standard http
+ fetchers)</s>
+
+Docs
+----
+
+- need to go on a docs rampage as everything is a bit out of date or
+ missing references
+
+Frontends
+---------
+
+### GTK
+
+- <s>SSL cert window is broken again</s>
+
+### RISC OS
+
+- SSL cert window broken
+
+### Amiga
+
+- should we be doing something with os3 release yet?
+ - maybe enable CI builds now JS is working?
+- <s>I might have an issue with NetSurf freezing which I need to
+ confirm/fix before release (bug 2478)</s>
+
+### haiku
+
+- need to sort out binary stripping.
+ - (building with NETSURF\_STRIP\_BINARY=YES seems to work, what's
+ wrong??)
+
+### windows
+
+- mostly work again so possible preview release candidate
+
+### cocoa
+
+- completely non functional - crashes badly
+
+### framebuffer
+
+- Linux framebuffer surface input still broken
+
+### atari
+
+- no feedback on if either version build properly on CI
+
diff --git a/netsurf_corebuild.mdwn b/netsurf_corebuild.mdwn
new file mode 100644
index 0000000..e1a8f5e
--- /dev/null
+++ b/netsurf_corebuild.mdwn
@@ -0,0 +1,148 @@
+[[!meta title="NetSurf Corebuild"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2016-06-11T11:09:28Z"]]
+
+
+[[!toc]] NetSurf itself does not
+use the core build system that all libraries and tools do which must be
+fixed.
+
+Additionally the current source layout is in need of improvement and is
+best done alongside the move to core buildsystem
+
+current layout June 2016
+
+` + netsurf`
+`   + resources`
+`   + test`
+`   + Docs`
+`   + desktop`
+`   + render`
+`   + utils`
+`   | + http`
+`   + include`
+`   | + netsurf`
+`   + content`
+`   | + fetchers`
+`   | + handlers`
+`   |   + image`
+`   |   + css`
+`   |   + javascript`
+`   |     + duktape`
+`   |     + none`
+`   |     + WebIDL`
+`   + frontends`
+`     + amiga`
+`     + atari`
+`     + beos`
+`     + cocoa`
+`     + framebuffer`
+`     + gtk`
+`     + monkey`
+`     + riscos`
+`     + windows`
+
+current target
+
+` + netsurf`
+`   + resources`
+`   + url`
+`   + utils`
+`   + test`
+`   + docs`
+`   + include`
+`   | + netsurf`
+`   + content`
+`   | + cache`
+`   | + fetchers`
+`   | + handlers`
+`   |   + css`
+`   |   + image`
+`   |   + html`
+`   |   + javascript`
+`   |   + text`
+`   + ui`
+`   | + browser`
+`   | + widgets`
+`   |   + textarea`
+`   |   + treeview`
+`   + frontends`
+`     + amiga`
+`     + atari`
+`     + beos`
+`     + cocoa`
+`     + framebuffer`
+`     + gtk`
+`     + monkey`
+`     + riscos`
+`     + windows`
+`   `
+
+tlsa's proposal:
+
+` + netsurf`
+`   + test`
+`   + docs`
+`   + utils`
+`   + core`
+`   | + include`
+`   | + content`
+`   | | + cache`
+`   | | + fetch`
+`   | | + handlers`
+`   | |   + css`
+`   | |   + image`
+`   | |   | + bmp`
+`   | |   | + jpeg`
+`   | |   | + gif`
+`   | |   | + png`
+`   | |   | + svg`
+`   | |   + html`
+`   | |   + javascript`
+`   | |   + text`
+`   | + ui`
+`   | | + browser`
+`   | | + widgets`
+`   | |   + textarea`
+`   | |   + treeview`
+`   | + resources`
+`   | + url`
+`   | + utils`
+`   + frontends`
+`     + amiga`
+`     + atari`
+`     + beos`
+`     + cocoa`
+`     + framebuffer`
+`     + gtk`
+`     + monkey`
+`     + riscos`
+`     + windows`
+
+Previous attempt:
+
+` + netsurf`
+`   + core`
+`   | + api`
+`   | + browser`
+`   | + content`
+`   | + css`
+`   | + html`
+`   | + image`
+`   | + javascript`
+`   | + resource`
+`   | + widgets`
+`   + frontends`
+`   | + amiga`
+`   | + atari`
+`   | + beos`
+`   | + cocoa`
+`   | + framebuffer`
+`   | + gtk`
+`   | + monkey`
+`   | + riscos`
+`   | + windows`
+`   + utils`
+`   + test`
+`   + docs`
+
diff --git a/release_admin.mdwn b/release_admin.mdwn
new file mode 100644
index 0000000..953430a
--- /dev/null
+++ b/release_admin.mdwn
@@ -0,0 +1,69 @@
+[[!meta title="Release Admin"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2010-04-19T18:32:10Z"]]
+
+
+[[!toc]]
+
+NetSurf
+-------
+
+A new NetSurf release is created as follows
+
+### Ready the release branch
+
+Readying the release branch depends on the type of release.
+
+#### Major releases
+
+If it is a major new release with loads of new features, branch from
+`trunk/netsurf` into `branches/netsurf/[version number]`.
+
+Commit the branch.
+
+#### Bug fix releases
+
+If it is a bug fix release, merge the revisions that are to be included
+from trunk into an existing release branch. Fix up any failed merges,
+and remove from Makefile.sources any references to source files that are
+on trunk and are not in the release branch.
+
+Commit the branch.
+
+### Release miscellanea
+
+- Prepend this release's changes to ChangeLog
+- Bump version number in desktop/version.c
+- Update Docs/BUILDING-\* docs to link to appropriate library tags,
+ rather than trunk versions
+
+Commit these changes.
+
+### Create release tag
+
+Tag the branch for the appropriate version.
+
+### Autobuilder
+
+Update the autobuilder's release tree to the latest autobuilder sources.
+Run the autobuilder to produce the release archives.
+(`./autobuild.pl --release=[release version`) This will also:
+
+- Upload the source and binary archives to /downloads/releases
+- Upload new ChangeLog to /downloads/releases/ChangeLog.txt
+
+### Web site
+
+Update version numbers all over the site. Update feature list on
+homepage. Add release to project history on about page. Update download
+pages to point at new releases.
+
+### Announce release
+
+Announce in the appropriate places.
+
+Libraries
+---------
+
+??
+
diff --git a/release_process.mdwn b/release_process.mdwn
new file mode 100644
index 0000000..9243a7c
--- /dev/null
+++ b/release_process.mdwn
@@ -0,0 +1,273 @@
+[[!meta title="Release Process"]]
+[[!meta author="DanielSilverstone"]]
+[[!meta date="2016-11-19T12:05:07Z"]]
+
+
+[[!toc]]
+
+Releasing a new version of NetSurf and libraries
+------------------------------------------------
+
+firstly the libraries and tool sources should be created (only if they
+need an update)
+
+Order to release components in (if they require releasing)
+
+buildsystem is first and has an extra step
+
+Then libraries using the core buildsystem
+
+- libwapcaplet
+- libparserutils
+- libcss
+- libhubbub
+- libdom
+- libnsbmp
+- libnsgif
+- librosprite
+- libnsfb
+- libsvgtiny
+- nsgenbind
+- libutf8proc
+- libnsutils
+- libnspsl
+- libpencil
+- librufl
+
+NetSurf itself is last
+
+Release of the buildsystem
+--------------------------
+
+The buildsystem follows exactly the same process as below except there
+is an additional step
+
+Because this is the buildsystem and provides the makefiles for all the
+other source builds you must go to the CI server and ensure the
+source-buildsystem job has successfully run and produced output in
+<http://ci.netsurf-browser.org/builds/sources/>
+
+Release for projects using buildsystem
+--------------------------------------
+
+We perform all releases from git simply by pushing a
+release/<version number> tag
+
+Before creating the tag you should do some basic checks
+
+check the COMPONENT\_VERSION in the root Makefile matches the version
+number you are releasing, if not change it and commit it so it does.
+
+Any files that should not be put in the distribution archive must be
+placed in the .gitattributes file, as a minimum it should contain
+attributes for the .gitignore and gitattributes files e.g.
+
+`.gitignore export-ignore`
+`.gitattributes export-ignore`
+
+in your clone do
+
+`git branch -vv`
+
+ensure the top commit looks right and is what you want to tag, for extra
+paranoia check the .git/config to ensure the origin is the correct
+server. You do **not** have to tag from master, for example if this is a
+maintenance release of an old edition and you are tagging from a branch
+etc. just **ensure** you are where you want the release to be.
+
+Create the tag with
+
+`git tag -s -m 'Official Release' release/`<version number>
+
+Ensure the version number in the tag matches the component version.
+
+Now run
+
+`make dist`
+
+if you get
+
+Makefile:45: \*\*\* Component Version "1.0" and GIT tag version "1.1" do
+not match. Stop.
+
+you did not get the tag and version numbers lined up, go back, remove
+your local tag with
+
+`git tag -d release/`<bad version>
+
+and try again
+
+when you get a buildsystem-1.0.tar.gz (with appropriate version number)
+well done
+
+Check the contents of the tar are what you intended to release and
+adjust if not (obviously you will need to remove your local tag and
+start over with fresh commits.
+
+Next do a dry run push
+
+`git push -n --tags`
+
+ensure this shown the correct repo and the release tag something like
+
+`[gitano] Welcome to the NetSurf Gitano instance.`
+`To `[`ssh://nsgit@git.netsurf-browser.org/buildsystem.git`](ssh://nsgit@git.netsurf-browser.org/buildsystem.git)
+` * [new tag]         release/1.0 -> release/1.0`
+
+If that verifies as correct
+
+`git push --tags`
+`git push`
+
+and the release tag is pushed, too late now so be careful and check!
+
+Releasing NetSurf
+-----------------
+
+ensure you are at the commit from which you want to create the release
+
+`git branch -vv`
+
+Remember that if you are releasing X.Y then amiga calls that X.Y+1 so
+don't be confused and do update amiga stuff.
+
+check the resources for the frontends you are releasing are up to date
+
+- copyright years
+- amiga/pkg/netsurf.readme and amiga/pkg/netsurf\_os3.readme
+- windows/res/installer.nsi
+
+create a branch release/<version number> and switch to it
+
+`git branch release/3.1`
+`git checkout release/3.1`
+
+update desktop/version.c to something like
+
+`#include "testament.h"`
+
+`const char * const netsurf_version = "3.6 (25th April 2016)";`
+`const int netsurf_version_major = 3;`
+`const int netsurf_version_minor = 6;`
+
+update amiga/version.c along the same lines
+
+once you are sure everything is correct, committed push it to the repo
+
+`git push origin release/3.1`
+
+finally tag the branch for release
+
+`git tag -s -m 'Official Release' release/`<version number>
+
+Next do a dry run push
+
+`git push -n --tags`
+
+ensure this shown the correct repo and the release tag something like
+
+`[gitano] Welcome to the NetSurf Gitano instance.`
+`To `[`ssh://nsgit@git.netsurf-browser.org/buildsystem.git`](ssh://nsgit@git.netsurf-browser.org/buildsystem.git)
+` * [new tag]         release/3.1 -> release/3.1`
+
+If that verifies as correct
+
+`git push --tags`
+
+and the release tag is pushed, too late now so be careful and check!
+
+Next the branch must be merged back to master.
+
+`git checkout master`
+`git merge -s ours heads/release/3.1`
+
+Then edit desktop/version.c ready for the next release cycle
+
+`git add desktop/version.c`
+`git commit -m 'update version info for next development cycle'`
+
+finally push master
+
+`git push origin master`
+
+Please do ensure you \*thoroughly\* check your work at each step as
+mistakes are hard to fix once pushed.
+
+Releasing the all source
+------------------------
+
+clone the all repo
+
+`git clone `[`ssh://nsgit@git.netsurf-browser.org/netsurf-all.git`](ssh://nsgit@git.netsurf-browser.org/netsurf-all.git)
+
+ensure ther submodules are initialised
+
+`git submodule init`
+
+output will be something like
+
+`Submodule 'buildsystem' () registered for path 'buildsystem'`
+`Submodule 'libcss' () registered for path 'libcss'`
+`Submodule 'libdom' () registered for path 'libdom'`
+`Submodule 'libhubbub' () registered for path 'libhubbub'`
+`Submodule 'libnsbmp' () registered for path 'libnsbmp'`
+`Submodule 'libnsfb' () registered for path 'libnsfb'`
+`Submodule 'libnsgif' () registered for path 'libnsgif'`
+`Submodule 'libparserutils' () registered for path 'libparserutils'`
+`Submodule 'libpencil' () registered for path 'libpencil'`
+`Submodule 'librosprite' () registered for path 'librosprite'`
+`Submodule 'librufl' () registered for path 'librufl'`
+`Submodule 'libsvgtiny' () registered for path 'libsvgtiny'`
+`Submodule 'libwapcaplet' () registered for path 'libwapcaplet'`
+`Submodule 'netsurf' () registered for path 'netsurf'`
+`Submodule 'nsgenbind' () registered for path 'nsgenbind'`
+
+ensure the submodules are updated
+
+`git submodule update`
+
+for each submodule listed above the correct revision must be set. A
+utility target is provided in the makefile
+
+`make release-checkout`
+
+This obtains the most recent release tag for each submodule and checks
+it out, equivalent to:
+
+`cd buildsystem`
+`git checkout origin/HEAD`
+`git checkout $(git describe --abbrev=0 --match="release/*" )`
+`cd ..`
+
+once each submodule has been updated in the top level netsurf-all
+directory. The modified submodules should then be added ready for commit
+
+`git add buildsystem libcss libdom libhubbub libnsbmp libnsfb libnsgif libparserutils librosprite libsvgtiny libwapcaplet netsurf nsgenbind`
+`git commit -m 'Update for 3.1 release'`
+
+finally tag the branch for release
+
+`git tag -s -m 'Official Release' release/`<version number>
+
+Next do a dry run push
+
+`git push -n --tags`
+
+ensure this shown the correct repo and the release tag something like
+
+`[gitano] Welcome to the NetSurf Gitano instance.`
+`To `[`ssh://nsgit@git.netsurf-browser.org/buildsystem.git`](ssh://nsgit@git.netsurf-browser.org/buildsystem.git)
+` * [new tag]         release/3.1 -> release/3.1`
+
+If that verifies as correct
+
+`git push --tags`
+
+and the release tag is pushed, too late now so be careful and check!
+
+Bugtracker
+----------
+
+The netsurf release version must be marked as released in mantis and the
+next development version added if its not already present
+
diff --git a/released_versions.mdwn b/released_versions.mdwn
new file mode 100644
index 0000000..30e554e
--- /dev/null
+++ b/released_versions.mdwn
@@ -0,0 +1,20 @@
+[[!meta title="Released Versions"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2016-04-29T10:18:46Z"]]
+
+
+[[!toc]] Release planning pages
+
+- [[NetSurf 3.6|netsurf_3.6]]
+- [[NetSurf 3.5|netsurf_3.5]]
+- [[NetSurf 3.4|netsurf_3.4]]
+- [[NetSurf 3.3|netsurf_3.3]]
+- [[NetSurf 3.2|netsurf_3.2]]
+- [[NetSurf 3.1|netsurf_3.1]]
+- [[NetSurf 3.0|netsurf_3.0]]
+- [[NetSurf 2.9|netsurf_2.9]]
+- [[NetSurf 2.8|netsurf_2.8]]
+- [[NetSurf 2.7|netsurf_2.7]]
+- [[NetSurf 2.6|netsurf_2.6]]
+- [[NetSurf 2.5|netsurf_2.5]]
+
diff --git a/sequence_planning_for_libdom_specialisations.mdwn b/sequence_planning_for_libdom_specialisations.mdwn
new file mode 100644
index 0000000..23faf58
--- /dev/null
+++ b/sequence_planning_for_libdom_specialisations.mdwn
@@ -0,0 +1,348 @@
+[[!meta title="Sequence planning for LibDOM specialisations"]]
+[[!meta author="Parwana"]]
+[[!meta date="2014-05-18T10:57:02Z"]]
+
+
+[[!toc]] The following development
+sequence will avoid any dependency conflicts in implementing them:
+
+` interface HTMLBaseFontElement : HTMLElement {`
+`            attribute DOMString       color;`
+`            attribute DOMString       face;`
+`   // Modified in DOM Level 2:`
+`            attribute long            size;`
+` };`
+
+` interface HTMLAnchorElement : HTMLElement {`
+`            attribute DOMString       accessKey;`
+`            attribute DOMString       charset;`
+`            attribute DOMString       coords;`
+`            attribute DOMString       href;`
+`            attribute DOMString       hreflang;`
+`            attribute DOMString       name;`
+`            attribute DOMString       rel;`
+`            attribute DOMString       rev;`
+`            attribute DOMString       shape;`
+`            attribute long            tabIndex;`
+`            attribute DOMString       target;`
+`            attribute DOMString       type;`
+`   void               blur();`
+`   void               focus();`
+` };`
+
+` interface HTMLImageElement : HTMLElement {`
+`            attribute DOMString       name;`
+`            attribute DOMString       align;`
+`            attribute DOMString       alt;`
+`            attribute DOMString       border;`
+`   // Modified in DOM Level 2:`
+`            attribute long            height;`
+`   // Modified in DOM Level 2:`
+`            attribute long            hspace;`
+`            attribute boolean         isMap;`
+`            attribute DOMString       longDesc;`
+`            attribute DOMString       src;`
+`            attribute DOMString       useMap;`
+`   // Modified in DOM Level 2:`
+`            attribute long            vspace;`
+`   // Modified in DOM Level 2:`
+`            attribute long            width;`
+` };`
+
+` interface HTMLObjectElement : HTMLElement {`
+`   readonly attribute HTMLFormElement form;`
+`            attribute DOMString       code;`
+`            attribute DOMString       align;`
+`            attribute DOMString       archive;`
+`            attribute DOMString       border;`
+`            attribute DOMString       codeBase;`
+`            attribute DOMString       codeType;`
+`            attribute DOMString       data;`
+`            attribute boolean         declare;`
+`            attribute DOMString       height;`
+`            attribute long            hspace;`
+`            attribute DOMString       name;`
+`            attribute DOMString       standby;`
+`            attribute long            tabIndex;`
+`            attribute DOMString       type;`
+`            attribute DOMString       useMap;`
+`            attribute long            vspace;`
+`            attribute DOMString       width;`
+`   // Introduced in DOM Level 2:`
+`   readonly attribute Document        contentDocument;`
+` };`
+
+` interface HTMLParamElement : HTMLElement {`
+`            attribute DOMString       name;`
+`            attribute DOMString       type;`
+`            attribute DOMString       value;`
+`            attribute DOMString       valueType;`
+` };`
+
+` interface HTMLAppletElement : HTMLElement {`
+`            attribute DOMString       align;`
+`            attribute DOMString       alt;`
+`            attribute DOMString       archive;`
+`            attribute DOMString       code;`
+`            attribute DOMString       codeBase;`
+`            attribute DOMString       height;`
+`   // Modified in DOM Level 2:`
+`            attribute long            hspace;`
+`            attribute DOMString       name;`
+`   // Modified in DOM Level 2:`
+`            attribute DOMString       object;`
+`   // Modified in DOM Level 2:`
+`            attribute long            vspace;`
+`            attribute DOMString       width;`
+` };`
+
+` interface HTMLMapElement : HTMLElement {`
+`   readonly attribute HTMLCollection  areas;`
+`            attribute DOMString       name;`
+` };`
+
+` interface HTMLAreaElement : HTMLElement {`
+`            attribute DOMString       accessKey;`
+`            attribute DOMString       alt;`
+`            attribute DOMString       coords;`
+`            attribute DOMString       href;`
+`            attribute boolean         noHref;`
+`            attribute DOMString       shape;`
+`            attribute long            tabIndex;`
+`            attribute DOMString       target;`
+` };`
+
+` interface HTMLScriptElement : HTMLElement {`
+`            attribute DOMString       text;`
+`            attribute DOMString       htmlFor;`
+`            attribute DOMString       event;`
+`            attribute DOMString       charset;`
+`            attribute boolean         defer;`
+`            attribute DOMString       src;`
+`            attribute DOMString       type;`
+` };`
+
+` interface HTMLTableCaptionElement : HTMLElement {`
+`            attribute DOMString       align;`
+` };`
+
+interface HTMLTableColElement : HTMLElement {
+
+`            attribute DOMString       align;`
+`            attribute DOMString       ch;`
+`            attribute DOMString       chOff;`
+`            attribute long            span;`
+`            attribute DOMString       vAlign;`
+`            attribute DOMString       width;`
+` };`
+` interface HTMLTableCellElement : HTMLElement {`
+`   readonly attribute long            cellIndex;`
+`            attribute DOMString       abbr;`
+`            attribute DOMString       align;`
+`            attribute DOMString       axis;`
+`            attribute DOMString       bgColor;`
+`            attribute DOMString       ch;`
+`            attribute DOMString       chOff;`
+`            attribute long            colSpan;`
+`            attribute DOMString       headers;`
+`            attribute DOMString       height;`
+`            attribute boolean         noWrap;`
+`            attribute long            rowSpan;`
+`            attribute DOMString       scope;`
+`            attribute DOMString       vAlign;`
+`            attribute DOMString       width;`
+` };`
+
+` interface HTMLTableRowElement : HTMLElement {`
+`   // Modified in DOM Level 2:`
+`   readonly attribute long            rowIndex;`
+`   // Modified in DOM Level 2:`
+`   readonly attribute long            sectionRowIndex;`
+`   // Modified in DOM Level 2:`
+`   readonly attribute HTMLCollection  cells;`
+`            attribute DOMString       align;`
+`            attribute DOMString       bgColor;`
+`            attribute DOMString       ch;`
+`            attribute DOMString       chOff;`
+`            attribute DOMString       vAlign;`
+`   // Modified in DOM Level 2:`
+`   HTMLElement        insertCell(in long index)`
+`                                       raises(dom::DOMException);`
+`   // Modified in DOM Level 2:`
+`   void               deleteCell(in long index)`
+`                                       raises(dom::DOMException);`
+` };`
+`interface HTMLTableSectionElement : HTMLElement {`
+`            attribute DOMString       align;`
+`            attribute DOMString       ch;`
+`            attribute DOMString       chOff;`
+`            attribute DOMString       vAlign;`
+`   readonly attribute HTMLCollection  rows;`
+`   // Modified in DOM Level 2:`
+`   HTMLElement        insertRow(in long index)`
+`                                       raises(dom::DOMException);`
+`   // Modified in DOM Level 2:`
+`   void               deleteRow(in long index)`
+`                                       raises(dom::DOMException);`
+` };`
+` interface HTMLTableElement : HTMLElement {`
+`   // Modified in DOM Level 2:`
+`            attribute HTMLTableCaptionElement caption;`
+`                                       // raises(dom::DOMException) on setting`
+
+`   // Modified in DOM Level 2:`
+`            attribute HTMLTableSectionElement tHead;`
+`                                       // raises(dom::DOMException) on setting`
+
+`   // Modified in DOM Level 2:`
+`            attribute HTMLTableSectionElement tFoot;`
+`                                       // raises(dom::DOMException) on setting`
+
+`   readonly attribute HTMLCollection  rows;`
+`   readonly attribute HTMLCollection  tBodies;`
+`            attribute DOMString       align;`
+`            attribute DOMString       bgColor;`
+`            attribute DOMString       border;`
+`            attribute DOMString       cellPadding;`
+`            attribute DOMString       cellSpacing;`
+`            attribute DOMString       frame;`
+`            attribute DOMString       rules;`
+`            attribute DOMString       summary;`
+`            attribute DOMString       width;`
+`   HTMLElement        createTHead();`
+`   void               deleteTHead();`
+`   HTMLElement        createTFoot();`
+`   void               deleteTFoot();`
+`   HTMLElement        createCaption();`
+`   void               deleteCaption();`
+`   // Modified in DOM Level 2:`
+`   HTMLElement        insertRow(in long index)`
+`                                       raises(dom::DOMException);`
+`   // Modified in DOM Level 2:`
+`   void               deleteRow(in long index)`
+`                                       raises(dom::DOMException);`
+` };`
+
+` interface HTMLFrameSetElement : HTMLElement {`
+`            attribute DOMString       cols;`
+`            attribute DOMString       rows;`
+` };`
+
+` interface HTMLFrameElement : HTMLElement {`
+`            attribute DOMString       frameBorder;`
+`            attribute DOMString       longDesc;`
+`            attribute DOMString       marginHeight;`
+`            attribute DOMString       marginWidth;`
+`            attribute DOMString       name;`
+`            attribute boolean         noResize;`
+`            attribute DOMString       scrolling;`
+`            attribute DOMString       src;`
+`   // Introduced in DOM Level 2:`
+`   readonly attribute Document        contentDocument;`
+` };`
+
+` interface HTMLIFrameElement : HTMLElement {`
+`            attribute DOMString       align;`
+`            attribute DOMString       frameBorder;`
+`            attribute DOMString       height;`
+`            attribute DOMString       longDesc;`
+`            attribute DOMString       marginHeight;`
+`            attribute DOMString       marginWidth;`
+`            attribute DOMString       name;`
+`            attribute DOMString       scrolling;`
+`            attribute DOMString       src;`
+`            attribute DOMString       width;`
+`   // Introduced in DOM Level 2:`
+`   readonly attribute Document        contentDocument;`
+` };`
+
+};
+
+Done: interface HTMLDListElement : HTMLElement {
+
+`            attribute boolean         compact;`
+` };`
+
+` interface HTMLDirectoryElement : HTMLElement {`
+`            attribute boolean         compact;`
+` };`
+
+` interface HTMLMenuElement : HTMLElement {`
+`            attribute boolean         compact;`
+` };`
+
+` interface HTMLFieldSetElement : HTMLElement {`
+`   readonly attribute HTMLFormElement form;`
+` };`
+` interface HTMLDivElement : HTMLElement {`
+`            attribute DOMString       align;`
+` };`
+
+` interface HTMLParagraphElement : HTMLElement {`
+`            attribute DOMString       align;`
+` };`
+
+` interface HTMLHeadingElement : HTMLElement {`
+`            attribute DOMString       align;`
+` };`
+
+` interface HTMLQuoteElement : HTMLElement {`
+`            attribute DOMString       cite;`
+` };`
+
+` interface HTMLPreElement : HTMLElement {`
+`            attribute long            width;`
+` };`
+
+` interface HTMLBRElement : HTMLElement {`
+`            attribute DOMString       clear;`
+` };`
+
+` interface HTMLLabelElement : HTMLElement {`
+`   readonly attribute HTMLFormElement form;`
+`            attribute DOMString       accessKey;`
+`            attribute DOMString       htmlFor;`
+` };`
+
+` interface HTMLLegendElement : HTMLElement {`
+`   readonly attribute HTMLFormElement form;`
+`            attribute DOMString       accessKey;`
+`            attribute DOMString       align;`
+` };`
+
+` interface HTMLUListElement : HTMLElement {`
+`            attribute boolean         compact;`
+`            attribute DOMString       type;`
+` };`
+
+` interface HTMLOListElement : HTMLElement {`
+`            attribute boolean         compact;`
+`            attribute long            start;`
+`            attribute DOMString       type;`
+` };`
+
+` interface HTMLLIElement : HTMLElement {`
+`            attribute DOMString       type;`
+`            attribute long            value;`
+` };`
+
+interface HTMLFontElement : HTMLElement {
+
+`            attribute DOMString       color;`
+`            attribute DOMString       face;`
+`            attribute DOMString       size;`
+` };`
+
+` interface HTMLHRElement : HTMLElement {`
+` //In reiview`
+`            attribute DOMString       align;`
+`            attribute boolean         noShade;`
+`            attribute DOMString       size;`
+`            attribute DOMString       width;`
+` };`
+
+` interface HTMLModElement : HTMLElement {`
+`            attribute DOMString       cite;`
+`            attribute DOMString       dateTime;`
+` };`
+
diff --git a/society.mdwn b/society.mdwn
new file mode 100644
index 0000000..2b5a201
--- /dev/null
+++ b/society.mdwn
@@ -0,0 +1,9 @@
+[[!meta title="Society"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2009-07-08T16:58:15Z"]]
+
+
+[[!toc]]
+
+1. REDIRECT [[Society/|society/]]
+
diff --git a/society/constitution.mdwn b/society/constitution.mdwn
new file mode 100644
index 0000000..b3fa836
--- /dev/null
+++ b/society/constitution.mdwn
@@ -0,0 +1,117 @@
+[[!meta title="Society/Constitution"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2009-07-08T14:55:53Z"]]
+
+
+[[!toc]] This is the constitution
+of the NetSurf Society.
+
+1. This document details the constitution of the the NetSurf Project
+ Society, hereinafter referred to as "the Society".
+2. Membership of the Society is non-transferable and is open to any
+ person who fulfils any of the following:
+ 1. The person is an active developer of any of the NetSurf
+ Project's programmes or libraries or documentation or websites
+ thereof. Such a person is defined by their having commit access
+ to the NetSurf Project's central revision control system and
+ having made a non-trivial commit within the past 12 months.
+ 2. The person is an active developer as defined in A but, instead
+ of having commit access to the NetSurf Project's central
+ revision control system, their non-trivial updates, patches,
+ modifications or new content is sponsored by an extant Member of
+ the Society such that it is committed to the NetSurf Project's
+ central revision control system on their behalf.
+
+3. Membership is free of charge, no subscription payments will be due.
+4. The Committee comprises three roles: Chair, Secretary and Treasurer.
+5. Membership applications and resignations must be made in writing
+ (email or by post) or in person to the current holder of the
+ Secretary role.
+6. The Secretary will accept and approve any such application providing
+ the applicant fulfils any of the subclauses of 2. Resignation of
+ membership is subject to no conditions for normal Members, and is
+ predicated on a replacement having been elected for Committee
+ Members.
+7. Membership is automatically terminated if any of the following are
+ determined to be true:
+ 1. The Member dies
+ 2. The Member ceases to fulfil any of the requirements as laid out
+ in the subclauses of 2.
+
+8. The Society's objects (the Objects) are:
+ 1. To promote the use of, and advance the development of the
+ NetSurf Web Browser
+ 2. To promote the use of, and advance the development of the
+ NetSurf Project's other applications and libraries.
+
+9. All income and property of the Society shall be applied towards
+ furthering the Objects.
+10. The Society will hold an annual general meeting (AGM) each year. At
+ least 11 months and no more than 15 months may elapse between
+ successive AGMs.
+11. Any single member of the Committee, or 3 Members of the Society
+ acting in concert may call an EGM at any time by requesting it of
+ the Secretary in writing or in person.
+12. No less than two weeks will elapse between the calling of a meeting
+ (either AGM or EGM) and the meeting taking place.
+13. Meetings may occur physically or in the IRC channel \#netsurf on the
+ Freenode IRC network.
+14. The Committee is elected at the AGM and the Committee Members serve
+ the period starting immediately after the end of the AGM at which
+ they were elected and ending at the end of the subsequent AGM.
+15. Nominations for Committee roles and any motions to be considered at
+ an AGM or EGM will be announced to the Members no more than one week
+ and no less than four days before the meeting.
+16. Motions and nominations for Committee members must be submitted to
+ the Secretary after the announcement of the AGM (or an EGM called
+ for the purpose of electing a new Committee member) and must arrive
+ no less than one week before the meeting so that they can be
+ included in the announcement detailed in 15. A candidate for a
+ Committee role may withdraw themselves from consideration at any
+ time up to the point at which the vote is called at the meeting.
+ Should a given committee role not have any nominations by this time,
+ or should all nominees withdraw before the vote, the incumbent is
+ considered to be automatically re-nominated.
+17. All Members of the Society have one vote.
+18. Votes may only be cast by the Member unless previously delegated in
+ writing to the Secretary.
+19. Votes may be cast ahead of the meeting by providing a written
+ account of the vote the Member wishes to cast to the Secretary no
+ less than 24 hours ahead of the meeting.
+20. A meeting is considered quorate if at least one Committee member is
+ present and at least three other Members are present or have
+ registered absent votes for all motions and nominations being
+ considered.
+21. Should a Committee member wish to resign, an EGM shall be called to
+ elect a different Member to that role. The Member wishing to resign
+ the role shall serve until such a meeting can take place. The newly
+ elected Member will serve until the end of the subsequent AGM.
+22. Should membership of the Society fall below five Members, or should
+ it prove not possible to elect a Committee, then an EGM will be
+ called to attempt to resolve the situation. Should the EGM end
+ without membership increasing to at least five or without an elected
+ Committee, then the Society will be dissolved.
+23. Should a motion at an EGM or AGM be to dissolve the Society, then a
+ two-thirds majority including at least one Committee Member will be
+ required for the motion to pass.
+24. Should the society be dissolved, the following must be fulfilled:
+ 1. A resolution detailing the procedure for disposing of any assets
+ belonging to the Society must be passed by a two-thirds majority
+ of the remaining Members of the Society
+ 2. The most recently elected Committee will then execute the
+ resolution as passed.
+
+25. No Member may simultaneously occupy more than one role on the
+ Committee.
+26. Signatories on any bank accounts held in the name of the Society
+ shall be the members of the Committee.
+27. Should the membership of the Committee change, it shall be the task
+ of the Secretary (both old and new if changing) to ensure that the
+ Bank remain informed of the permitted signatories and to ensure that
+ any required paperwork is executed to that effect.
+28. All votes are non-secret and all Members will be notified of the
+ results of motions and nominations by the Secretary after any
+ general meeting.
+29. This Constitution may be amended by a motion passed by simple
+ majority at any quorate general meeting.
+
diff --git a/society/members.mdwn b/society/members.mdwn
new file mode 100644
index 0000000..3de7500
--- /dev/null
+++ b/society/members.mdwn
@@ -0,0 +1,31 @@
+[[!meta title="Society/Members"]]
+[[!meta author="DanielSilverstone"]]
+[[!meta date="2013-07-20T09:58:57Z"]]
+
+
+[[!toc]] Currently the Committee
+is:
+
+- Michael Drake, Chair
+- John-Mark Bell, Treasurer
+- Daniel Silverstone, Secretary
+
+Current non-committee membership is:
+
+- Rob Kendrick
+- Chris Young
+- Vincent Sanders
+- François Revol
+- Steve Fryatt
+
+The society is therefore quorate.
+
+The following are eligible to join:
+
+- Ole Loots
+- Vivek Dasmohapatra
+- Anthony J. Bentley
+- Adrien Destugues
+- Craig Barnes
+- John Tytgat
+
diff --git a/spec/htm5_alignment.mdwn b/spec/htm5_alignment.mdwn
new file mode 100644
index 0000000..8804f73
--- /dev/null
+++ b/spec/htm5_alignment.mdwn
@@ -0,0 +1,9 @@
+[[!meta title="Spec/HTM5 Alignment"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2009-08-21T16:48:16Z"]]
+
+
+[[!toc]]
+
+1. REDIRECT [[Spec/HTML5 Alignment|spec/html5_alignment]]
+
diff --git a/spec/html5_alignment.mdwn b/spec/html5_alignment.mdwn
new file mode 100644
index 0000000..a04da50
--- /dev/null
+++ b/spec/html5_alignment.mdwn
@@ -0,0 +1,59 @@
+[[!meta title="Spec/HTML5 Alignment"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-11-26T22:20:33Z"]]
+
+
+[[!toc]] The way HTML's align
+attribute interacts with CSS properties is only really explained in the
+HTML5 spec. However, the explanation there is quite opaque. Here there
+is a clearer version with more explanation.
+
+Spec
+----
+
+ | When a user agent is to align descendants of a node, the user
+ | agent is expected to align only those descendants that have both
+ | their 'margin-left' and 'margin-right' properties computing to a
+ | value other than 'auto', that are over-constrained and that have
+ | one of those two margins with a used value forced to a greater
+ | value, and that do not themselves have an applicable align
+ | attribute.
+ -- HTML5 10.2.4 original
+
+Simplified:
+
+ | When a user agent is to align descendants of a node, the user agent
+ | is expected to align only those descendants that:
+ |
+ | 1 have both their 'margin-left' and 'margin-right' properties
+ | computing to a value other than 'auto',
+ |
+ | 2 are over-constrained, and that have a left or right margin with
+ | a used value forced to a greater value, and
+ |
+ | 3 do not themselves have an applicable align attribute.
+
+ -- tlsa's interpretation
+
+I have separated the sentence where I think the criteria are and made it
+more clear.
+
+Further explanation
+-------------------
+
+### Criterion 1 detail:
+
+A box that doesn't have either left, right, or both left & right margins
+set to 'auto', to align the box "the CSS way".
+
+### Criterion 2 example:
+
+ #example2 { width:200px;
+ margin-left: 0;
+ margin-right: 0; }
+
+ <div style="width:800px;">
+ <div id="example2">
+ This div meets criterion 2
+ </div>
+ </div>
diff --git a/test/libcss/nstests.mdwn b/test/libcss/nstests.mdwn
new file mode 100644
index 0000000..c0fe52a
--- /dev/null
+++ b/test/libcss/nstests.mdwn
@@ -0,0 +1,187 @@
+[[!meta title="Test/LibCSS/NStests"]]
+[[!meta author="Jmb"]]
+[[!meta date="2009-07-16T14:01:30Z"]]
+
+
+[[!toc]] Testing the NetSurf port
+to LibCSS for regressions against the netsurftest/works test suite.
+
+ 3d-border-colour.html ---------------------------------------------- OK
+ absolute-container-assertion.html ---------------------------------- OK
+ absolute.html ------------------------------------------------------ OK
+ absolute-padding.html ---------------------------------------------- OK
+ absolute-position-first-child-of-containing-block.html ------------- OK
+ absolute-position-table.html --------------------------------------- OK
+ amazon-2.html ------------------------------------------------------ OK
+ amazon.html -------------------------------------------------------- OK
+ anim-display-none.html --------------------------------------------- OK
+ animgif.html ------------------------------------------------------- OK
+ animgifobj.html ---------------------------------------------------- OK
+ artworks-transparency.html ----------------------------------------- OK
+ background-edge.html ----------------------------------------------- OK
+ background-image-failure2.html ------------------------------------- OK
+ background-image-failure3.html ------------------------------------- OK
+ background-image-failure.html -------------------------------------- OK
+ background-on-TEXT.html -------------------------------------------- OK
+ background-position-repeat.html ------------------------------------ OK
+ background-redraw-bug.html ----------------------------------------- OK
+ block-formatting-context-top-margin.html --------------------------- OK
+ body-margin-padding-bgimage-test.html ------------------------------ OK
+ border-background.html --------------------------------------------- OK
+ borders.html ------------------------------------------------------- OK
+ box-at-point-test.html --------------------------------------------- OK
+ br.html ------------------------------------------------------------ OK
+ bunnies.html ------------------------------------------------------- OK
+ button-height.html ------------------------------------------------- OK
+ button-width.html -------------------------------------------------- OK
+ cellpadding-csspadding.html ---------------------------------------- OK
+ cellpadding.html --------------------------------------------------- OK
+ clear-on-float2.html ----------------------------------------------- OK
+ clear-on-float.html ------------------------------------------------ OK
+ collapse.html ------------------------------------------------------ OK
+ colspan-issue.html ------------------------------------------------- OK
+ containing-block.html ---------------------------------------------- OK
+ csszen1.html ------------------------------------------------------- OK
+ default-page-margin--no-body-margin-test.html ---------------------- OK
+ default-page-margin--no-body-padding-test.html --------------------- OK
+ default-page-margin--no-html-margin-test.html ---------------------- OK
+ default-page-margin--no-html-padding-test.html --------------------- OK
+ default-page-margin--test.html ------------------------------------- OK
+ digglayout.html ---------------------------------------------------- OK
+ div-and-table-width-tests.html ------------------------------------- OK
+ drawfile.html ------------------------------------------------------ OK
+ float-absolute.html ------------------------------------------------ OK
+ float-based-layout.html -------------------------------------------- OK
+ float-clear2.html -------------------------------------------------- OK
+ float-clear3.html -------------------------------------------------- OK
+ float-clear4.html -------------------------------------------------- OK
+ float-clear5.html -------------------------------------------------- OK
+ float-clear6.html -------------------------------------------------- OK
+ float-clear7.html -------------------------------------------------- OK
+ float-clear-block-formatting-context.html -------------------------- OK
+ float-clear-first2.html -------------------------------------------- OK
+ float-clear-first3.html -------------------------------------------- OK
+ float-clear-first.html --------------------------------------------- OK
+ float-clear.html --------------------------------------------------- OK
+ float-clearing.html ------------------------------------------------ OK
+ float-clearing-issue.html ------------------------------------------ OK
+ floated-list-items.html -------------------------------------------- OK
+ float-gaps2.html --------------------------------------------------- OK
+ float-gaps.html ---------------------------------------------------- OK
+ float-layout.html -------------------------------------------------- OK
+ float-li.html ------------------------------------------------------ OK
+ floatmargin.html --------------------------------------------------- OK
+ float-negative-margin.html ----------------------------------------- OK
+ float-nested-table.html -------------------------------------------- OK
+ float-overlap.html ------------------------------------------------- OK
+ floatpadding.html -------------------------------------------------- OK
+ float-positioning.html --------------------------------------------- OK
+ floats-and-position.html ------------------------------------------- OK
+ floats-block-formatting-context2.html ------------------------------ OK
+ floats-block-formatting-context3.html ------------------------------ OK
+ floats-block-formatting-context4.html ------------------------------ OK
+ floats-block-formatting-context5.html ------------------------------ OK
+ floats-block-formatting-context6.html ------------------------------ OK
+ floats-block-formatting-context7.html ------------------------------ OK
+ floats-block-formatting-context.html ------------------------------- OK
+ floats-inside-overflow-scroll.html --------------------------------- OK
+ floats-off-by-one.html --------------------------------------------- OK
+ float-wrap.html ---------------------------------------------------- OK
+ form-elements.html ------------------------------------------------- OK
+ form-element-size.html --------------------------------------------- OK
+ form-hidden-tab-assert.html ---------------------------------------- OK*
+
+No problems with libcss, but this shows how tabbing between forms is
+broken on GTK NS.
+
+ form.html ---------------------------------------------------------- OK
+ form-margins.html -------------------------------------------------- OK
+ form-width.html ---------------------------------------------------- OK
+ fractional-css-unit-test-cm.html ----------------------------------- OK
+ fractional-css-unit-test-em.html ----------------------------------- OK
+ frame1.html -------------------------------------------------------- N/A
+ frame2.html -------------------------------------------------------- N/A
+ frame3.html -------------------------------------------------------- N/A
+ frames2.html ------------------------------------------------------- N/A
+ frames.html -------------------------------------------------------- N/A
+
+Frames are broken on GTK anyway.
+
+ gaps-in-lists.html ------------------------------------------------- OK
+ giftest.html ------------------------------------------------------- OK
+ html-body-margin-padding-test.html --------------------------------- OK
+ html-margin-body-margin-padding-test.html -------------------------- OK
+ html-margin-padding-bgimage-body-margin-padding-bgimage-test.html -- OK
+ html-margin-padding-bgimage-test.html ------------------------------ OK
+ html-margin-padding-body-margin-padding-test.html ------------------ OK
+ html-padding-body-margin-padding-test.html ------------------------- OK
+ image-sizing.html -------------------------------------------------- OK
+ inline-background.html --------------------------------------------- OK
+ inline-background-position.html ------------------------------------ OK
+ inline-block2.html ------------------------------------------------- OK
+ inline-block3.html ------------------------------------------------- OK
+ inline-block6.html ------------------------------------------------- OK
+ inline-block.html -------------------------------------------------- OK
+ inline-block-images.html ------------------------------------------- OK
+ inline-test.html --------------------------------------------------- OK
+ knockout.html ------------------------------------------------------ OK
+ layout_line-floats2.html ------------------------------------------- OK
+ layout_line-floats.html -------------------------------------------- OK
+ link-underlines.html ----------------------------------------------- OK
+ lists.html --------------------------------------------------------- OK
+ margin-background1.html -------------------------------------------- OK
+ margin-background2.html -------------------------------------------- OK
+ margin-background3.html -------------------------------------------- OK
+ margintest.html ---------------------------------------------------- OK
+ metacharset.html --------------------------------------------------- OK
+ min-height-in-float.html ------------------------------------------- OK
+ minmax-height-1.html ----------------------------------------------- OK
+ minmax-height-2.html ----------------------------------------------- OK
+ minmax-height-3.html ----------------------------------------------- OK
+ minmax-height-4.html ----------------------------------------------- OK
+ minmax-height-5.html ----------------------------------------------- OK
+ negative.html ------------------------------------------------------ OK
+ negative-inline-margin.html ---------------------------------------- OK
+ negative-margin-crash.html ----------------------------------------- OK
+ negative-text-indent.html ------------------------------------------ OK
+ netsurf-crash-1a.html ---------------------------------------------- OK
+ netsurf-crash-1b.html ---------------------------------------------- OK
+ netsurf-crash-2.html ----------------------------------------------- OK
+ nocharset.html ----------------------------------------------------- OK
+ nsgtk-redraw.html -------------------------------------------------- OK
+ object-block.html -------------------------------------------------- OK
+ object.html -------------------------------------------------------- OK
+ overflow-auto-height.html ------------------------------------------ OK
+ overflow.html ------------------------------------------------------ OK
+ overflow-scrollbars.html ------------------------------------------- OK
+ percentage-height-2.html ------------------------------------------- OK
+ percentage-height-absolute-position-2.html ------------------------- OK
+ percentage-height-absolute-position.html --------------------------- OK
+ percentage-height-float-2.html ------------------------------------- OK
+ percentage-height-float-3.html ------------------------------------- OK
+ percentage-height-float.html --------------------------------------- OK
+ percentage-height.html --------------------------------------------- OK
+ percentage-height-inline-block-2.html ------------------------------ OK
+ percentage-height-inline-block.html -------------------------------- OK
+ place_float_below.html --------------------------------------------- OK
+ relative.html ------------------------------------------------------ OK
+ relative-position-and-floats.html ---------------------------------- OK
+ relative-position-floats.html -------------------------------------- OK
+ rowspan-overflow.html ---------------------------------------------- OK
+ slashdot-overlap.html ---------------------------------------------- OK
+ static-position.html ----------------------------------------------- OK
+ stripped-down-bbc-test-layout.html --------------------------------- OK
+ table-cell-width-and-height.html ----------------------------------- OK
+ tablecollapse.html ------------------------------------------------- OK
+ table-defaults.html ------------------------------------------------ OK
+ table-form-breakage.html ------------------------------------------- OK
+ tableseparate.html ------------------------------------------------- OK
+ tags-before-body.html ---------------------------------------------- OK
+ targets.html ------------------------------------------------------- N/A
+
+Frames.
+
+ textalign.html ----------------------------------------------------- OK
+ unclickable-link.html ---------------------------------------------- OK
+ w3c-links.html ----------------------------------------------------- OK
+ wiki-test.html ----------------------------------------------------- OK
diff --git a/the_attr_node_todo.mdwn b/the_attr_node_todo.mdwn
new file mode 100644
index 0000000..f90a6c8
--- /dev/null
+++ b/the_attr_node_todo.mdwn
@@ -0,0 +1,11 @@
+[[!meta title="The Attr Node todo"]]
+[[!meta author="Struggleyb"]]
+[[!meta date="2009-08-22T13:35:45Z"]]
+
+
+[[!toc]]
+
+
+ 1. For bool property, we deal it as: if there is a Attr node for it, its value is true, otherwise its value is false;
+ 2. All Attr node's value type are DOMString, there is no other types if the design now is correct;
+ 3. Remove the include/dom/core/attr.h additional attribute's type code when making sure the design is correct.
diff --git a/the_mutationevent_generation.mdwn b/the_mutationevent_generation.mdwn
new file mode 100644
index 0000000..1f88093
--- /dev/null
+++ b/the_mutationevent_generation.mdwn
@@ -0,0 +1,9 @@
+[[!meta title="The MutationEvent generation"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2009-08-07T11:49:22Z"]]
+
+
+[[!toc]]
+
+1. REDIRECT [[LibDOM/The MutationEvent generation|libdom/the_mutationevent_generation]]
+
diff --git a/todo.mdwn b/todo.mdwn
new file mode 100644
index 0000000..f27e98f
--- /dev/null
+++ b/todo.mdwn
@@ -0,0 +1,23 @@
+[[!meta title="Todo"]]
+[[!meta author="Chris"]]
+[[!meta date="2011-03-03T19:05:47Z"]]
+
+
+[[!toc]] Various Todo lists are
+collected here.
+
+Components
+----------
+
+- [[Framebuffer frontend|todo/framebuffer_frontend]]
+- [[GTK Frontend|todo/gtk_frontend]]
+- [[RISC OS Frontend|todo/risc_os_frontend]]
+- [[Win32 Windows frontend|todo/win32]]
+- [[AmigaOS frontend|todo/amigaos_frontend]]
+
+Individuals
+-----------
+
+- [[jmb|todo/jmb]]
+- [[tlsa|todo/tlsa]]
+
diff --git a/todo/amigaos_frontend.mdwn b/todo/amigaos_frontend.mdwn
new file mode 100644
index 0000000..8b0c45e
--- /dev/null
+++ b/todo/amigaos_frontend.mdwn
@@ -0,0 +1,175 @@
+[[!meta title="Todo/AmigaOS frontend"]]
+[[!meta author="Chris"]]
+[[!meta date="2017-01-12T19:51:28Z"]]
+
+
+[[!toc]]
+
+Plotters
+--------
+
+- <s>Speed up plotting on 16-bit screenmodes</s>
+ - Think this is now largely irrelevant as font\_antialiasing:0
+ makes a huge difference. However, would like to add
+ hardware-accelerated anti-aliased text rendering
+ (CompositeTags() does not support ALPHATEMPLATE so this is not
+ possible at present - see also the chris/composite-text branch)
+
+- Direct rendering - problems
+ - inline image placement
+ - grey background for all text
+ - won't work with Cairo renderer
+ - may crash with certain gfx lib operations (AreaFill - need to
+ alloc AreaInfo/TmpRas, check if this is ok to do on window
+ rastports or if one or the other is allocated already)
+ - completely broken with tiled renderer
+ - Will probably only leave this in for debugging purposes, has no
+ real use now.
+
+- Text
+ - Replace ligatures?
+ - Use splay trees for font cache
+
+- Simple Refresh
+ - Dragging blocking windows (eg. About) over the top of a render
+ area does not redraw <i>at all</i>
+ - Favicon and throbbers do not redraw when damaged (the redraw
+ functions just crash when they are initiated from the
+ hook/ami\_handle\_msg)
+ - Change to \*queue\* redraws same as corewindows
+
+- bitmap scaling
+ - not always accurate
+ - switching to triangle mode is more accurate, but causing
+ freezing at least on SAM440 with built-in gfx
+
+User Interface
+--------------
+
+- Shiny new treeview toolbar
+- treeview window redraw needs optimising
+- Drag-related
+ - Support the drag'n'drop of icons from/to OpenAmiga Filer project
+ - Drag to hotlist from WB?
+ - Drag selections within text input fields should do a move rather
+ than a copy (might be core bug?)
+ - Clicks to become drags only after 5px or so movement (done for
+ treeviews)
+ - Text selection should have auto-scroll ability at window's edge
+ - Dragging text to the URL or search bar should immediately enact
+ that option
+- Iconify gadget - for non-WB screens. Add extra AppIcons functions,
+ eg Info, Delete. Dynamic updates?
+- Allow multiple homepages - see
+ <http://bugs.netsurf-browser.org/mantis/view.php?id=2270>
+- Add play/stop buttons in sound DT handler
+- Experiment with label.image in clicktabs (favicon; text in more
+ appropriate charset)
+ - More appropriate charset also useful for hotlist menu, toolbar
+ and history context menu
+- Use menuclass for pull-down menu
+- Fix passing of commandline options to the core (NSOPTS/M)
+- Use new Ringhio progress notifications for downloads (if we can
+ upload the header)
+
+Core windows
+------------
+
+- Share off-screen bitmaps (with browser etc)
+- Allow simple refresh windows
+- Optimise redraw (on scroll)
+- Drag select redraw not working correctly
+- Regression: dragging from global history no longer working
+
+popupmenu deadlock blockers
+---------------------------
+
+These need doing now a bug in popupmenu.library has been fixed.
+
+- Context sensitive help
+ - Add Help key processing in gui\_options.c and anywhere else
+ needed (local history, treeviews, etc)
+ - <s>Fix asynchronous close signal thing now but is fixed in
+ lib</s> - doesn't appear to need any changes, AFAICT I didn't
+ bother working around this bug
+
+Misc
+----
+
+- <s>Switch to malloc/free so OS3 gets full benefit of clib2's slab
+ allocator</s>
+ - <s>should have no impact on OS4 perf, but may be worth
+ abstracting this so we can switch and change easier in future
+ (unless it makes the debug info from clib2 useless... hmm...
+ maybe use \#defines)</s>
+ - when done, enable clib2's debug mem handler: "The settings for
+ the memory debugging layer can be found in the
+ "stdlib\_memory.h" header file, right in the first few lines.
+ Just uncomment the lines for "\_\_MEM\_DEBUG",
+ "\_\_MEM\_DEBUG\_LOG" and "\_\_USE\_MEM\_TREES" as needed."
+ - Enable stats collection so we can tune the slab size - see
+ <https://github.com/adtools/clib2/blob/master/library/include/stdlib.h#L190>
+- <s>Reduce signals usage (if possible)</s> - believe this is no
+ longer an issue
+- Replace ExAll() usage in menu.c with whatever the new OS4 equivalent
+ is
+- Font styles in clipboard (might need new chunk defined)
+- Revamp About requester
+- Add a low memory handler which calls llcache\_clean(true). Need to
+ somehow guard this as it isn't thread-safe (set a "ok to clean",
+ "clean in progress" flag which is set/cleared/blocks the GUI?)
+ - MEM\_TRY\_AGAIN might help, return this until safe to purge, or
+ until purge can happen in main loop
+ - <s>Safe to do this to call \_\_free\_unused\_slabs() on OS3</s>
+- <s>Ditch libauto</s>
+ - Hopefully this fixes starting NetSurf on OS4.0 - program is
+ apparently terminating before it starts running any code. Unable
+ to test, awaiting feedback from the person who reported
+ problems.
+ - See also
+ <http://www.amiga.org/forums/showpost.php?p=773311&postcount=9>
+ - Probably doesn't work on OS4.0, as I saw a note that random()
+ needed a v53 newlib.library when rebuilding the toolchain
+
+OS3 Support
+-----------
+
+Please see <http://www.amiga.org/forums/showthread.php?t=56813> and
+<http://amigaworld.net/modules/newbb/viewtopic.php?topic_id=34237&forum=27>
+for various discussion around this topic, as well as
+<http://www.amiga.org/forums/showthread.php?t=63990> for more recent
+updates.
+
+NetSurf will now build for OS3. For a quick start on building NetSurf
+see [[OS3 build notes|documentation/buildingforamigaos]].
+
+There are some outstanding known issues:
+
+- Fonts
+ - There seems to be a (lack of) spacing problem with some fonts.
+ May need to manually add OT\_SpaceWidth?
+ - Bitmap fonts (with limitations, ie. no UTF-8) support partially
+ working - line break detection is broken and sometimes causes an
+ infinite loop. (is this still the case?)
+ - The font scanner might be broken.
+
+- Plotters/Bitmaps
+ - We are currently ignoring the p96 stuff and treating all screens
+ as palette-mapped. This works but means the faster direct 32-bit
+ bitmap code is not being used when P96 is available. If we take
+ the P96 path, bitmaps work but everything else is rendered
+ unreadable.
+ - PDTM\_SCALE (used when getting palette mapped bitmaps) only
+ works on v45, need to use BitMapScale for OS3.5 compatibility.
+ (this might be fixed since guigfx change?)
+
+- GUI
+ - Tabs working but closing them causes NetSurf to crash.
+ - The status bar is not in the window border (frbuttonclass is
+ irredeemably broken in OS3)
+ - A lot of the GUI hasn't tmk been tested.
+ - The treeview windows eat memory for breakfast (might be better
+ now using corewindows with tiles and simplerefresh option)
+
+- Memory freed twice (recoverable alert 010000009) on exit
+
diff --git a/todo/framebuffer_frontend.mdwn b/todo/framebuffer_frontend.mdwn
new file mode 100644
index 0000000..d4d5554
--- /dev/null
+++ b/todo/framebuffer_frontend.mdwn
@@ -0,0 +1,72 @@
+[[!meta title="Todo/Framebuffer frontend"]]
+[[!meta author="James Bursa"]]
+[[!meta date="2011-11-26T22:20:37Z"]]
+
+
+[[!toc]]
+
+Bugs
+----
+
+General
+-------
+
+- Use pointer hot spot data.
+- Can't press and hold a key to get auto-repeat. e.g. for delete.
+- local history scrolling does not work
+- url text input widget is not great
+- crash with x frontend with some wm
+- animated gif/internal font render funny
+- obscured widget ordering issue
+- Need a text cursor.
+- Use path plotter and LibSVGTiny.
+- Support page scaling.
+
+nsfb wrinkles from RJEK
+
+- URL bar text size seems... overbearing.
+- Home toolbar button?
+- Local history thumbnails are all black
+- On-screen keyboard gets overwritten by content.
(It might be worth
+ rethinking how this works. How about the keyboard taking up the
+ whole screen with its own entry box, and then inserting that text
+ when the user is finished? Android does it this way when screen
+ space is tight, and it would eliminate the problem of having to
+ scroll the content so the text area is visible with the keyboard
+ open.)
+- You can't grab the scroll handle when it's really small (try HTML5.)
+- No dragging support means it isn't as nice to use as it could be on
+ touch screens.
+- Form buttons don't work on the Joggler; strangeness on how the touch
+ screen delivers the events?
+- When configuring the scroll bar size, the arrows become distorted.
+ Perhaps draw them using the drawing commands, rather than using
+ images?
+- At high-resolutions, the OSK's key bevels are so small in comparison
+ to the keys they're essentially invisible.
+- Pressing the arrow keys on the OSK to scroll causes the
+ newly-redrawn document to obliterate the keyboard.
+- When loading a page, the arrow adds an hourglass. If you do not move
+ the mouse after this, the hourglass remains until you do. (Repaint
+ the pointer when the throbber stops?)
+- The stop/refresh buttons don't grey out when unneeded. (ie, the stop
+ button isn't needed when the throbber isn't going, and the refresh
+ button isn't needed when it is. Some browsers combine them to save
+ space, ie the button is a stop button when loading, and a refresh
+ button when not.)
+- No caret drawing.
+- Lots of libnsfb/fbtk debug output; have this runtime selectable?
+- Can FreeType be auto-detected and used if available at build time?
+ Our Makefile.config stuff would still allow this to be turned off
+ should the user want it.
+- Mouse input becomes laggy/follows movement some time after the real
+ movement, when loading occurs. Is there any way to prioritise mouse
+ inputs, or drop pending movement when a new movement event comes in?
+- Aesthetic only: Can we get anti-aliased line drawing on the local
+ history window? :)
+- Go to Wikipedia. Scroll down using the wheel so the logo and
+ logotext in the top left corner is no longer visible. Slowly scroll
+ up only enough to get to the top of the document again. Scroll up
+ once more, and note the logotext change position. (It moves up a
+ couple of pixels.)
+
diff --git a/todo/gtk_frontend.mdwn b/todo/gtk_frontend.mdwn
new file mode 100644
index 0000000..5cd1ee6
--- /dev/null
+++ b/todo/gtk_frontend.mdwn
@@ -0,0 +1,17 @@
+[[!meta title="Todo/GTK frontend"]]
+[[!meta author="Jmb"]]
+[[!meta date="2010-12-05T11:23:44Z"]]
+
+
+[[!toc]]
+
+Code quality/Organisation
+-------------------------
+
+- We should probably test with -DG\_DISABLE\_SINGLE\_INCLUDES
+ -DGTK\_DISABLE\_SINGLE\_INCLUDES to check for GTK 3.0 compatibility
+- Also worth checking with -DPANGO\_DISABLE\_DEPRECATED
+ -DG\_DISABLE\_DEPRECATED -DGDK\_PIXBUF\_DISABLE\_DEPRECATED
+ -DGDK\_DISABLE\_DEPRECATED -DGTK\_DISABLE\_DEPRECATED
+ -DGDK\_MULTIHEAD\_SAFE -DGTK\_MULTIHEAD\_SAFE
+
diff --git a/todo/jmb.mdwn b/todo/jmb.mdwn
new file mode 100644
index 0000000..e06b4f8
--- /dev/null
+++ b/todo/jmb.mdwn
@@ -0,0 +1,49 @@
+[[!meta title="Todo/jmb"]]
+[[!meta author="Jmb"]]
+[[!meta date="2011-02-02T00:29:55Z"]]
+
+
+[[!toc]] John-Mark's todo list.
+
+LibParserUtils
+--------------
+
+- Charset conversion should use Unicode Normalisation Form C
+- Optimisation
+
+Hubbub
+------
+
+- String interning in treebuilder
+- Parse error reporting
+- Extraneous chunk insertion/tokenisation (i.e. script support)
+- Fragment parsing
+- Serialisation
+- Optimisation
+
+LibCSS
+------
+
+- Cascade of aural/page properties
+- Some kind of API to provide access to the @page stuff
+- Parse error reporting
+- Documentation
+- Optimisation
+
+LibDOM
+------
+
+- Rest of DOM
+- Documentation
+- Optimisation
+
+NetSurf
+-------
+
+- Use libcurl 7.19.x's certificate chain inspection API & bin our own
+ OpenSSL stuff (no -- distros aren't packaging sufficiently modern
+ libcurl at present)
+- Add generic key:value pair storage to URLdb
+- Make layout engine completely fixed point, instead of the hideous
+ hybrid it currently is.
+
diff --git a/todo/risc_os_frontend.mdwn b/todo/risc_os_frontend.mdwn
new file mode 100644
index 0000000..acb2ff2
--- /dev/null
+++ b/todo/risc_os_frontend.mdwn
@@ -0,0 +1,61 @@
+[[!meta title="Todo/RISC OS frontend"]]
+[[!meta author="Stevef"]]
+[[!meta date="2011-03-02T23:29:28Z"]]
+
+
+[[!toc]]
+
+Core Treeview
+-------------
+
+Updating the front-end to work with the Core Treeview changes. Largely
+complete, the following items are either low priority (?) or waiting for
+other changes such as the toolbar widget re-implementation.
+
+This work is (at present) in the trunk.
+
+### Outstanding work
+
+- Should the font used in treeviews be configurable?
+
+- Textarea code should call the front end to render the caret. (Like
+ the form code.)
+
+- Hotlist editing dialogues need to be reinstated, or all associated
+ templates and code need to be removed.
+
+- URL Suggest Menu module may require re-implementation as a
+ stand-alone entity which collects URLs entered directly into the
+ address bar and Open URL dialogue, instead of relying on URLdb. Low
+ priority?
+
+Toolbar Update
+--------------
+
+Updating the toolbar implementation to break the component parts into
+stand-alone widgets. This will serve two main purposes: allowing some
+outstanding Core Treeview issues to be closed off cleanly, and allowing
+additional features to be added to the GUI without the risk of breaking
+the existing components.
+
+This work is underway in /branches/stevef/toolbars.
+
+### Niggles
+
+- Toolbar menus shade unsupported widgets, instead of hiding them.
+
+- Check and confirm the correct content types for
+ ro\_gui\_url\_bar\_set\_site\_favicon() to accept from the core.
+
+- URL Completion needs to be migrated from the Window module towards
+ the Toolbar / URL Bar modules.
+
+### Further improvements
+
+- "Unlimited" length URL field in URL Bar Widget.
+
+- Tab Bar Widget.
+
+- URL Suggest module could identify menu availability more
+ efficiently.
+
diff --git a/todo/tlsa.mdwn b/todo/tlsa.mdwn
new file mode 100644
index 0000000..61b94f4
--- /dev/null
+++ b/todo/tlsa.mdwn
@@ -0,0 +1,47 @@
+[[!meta title="Todo/tlsa"]]
+[[!meta author="Tlsa"]]
+[[!meta date="2011-09-07T14:12:14Z"]]
+
+
+[[!toc]] Michael's todo list
+
+NetSurf
+-------
+
+### Render
+
+- Form widget overhaul, treat as replaced elements and use core
+ textarea
+
+### Layout
+
+- If specified table height is greater than used height, share extra
+ height over rows
+- Stacking, z-index
+
+### Core stuff
+
+- Status bar updates
+- Pointer image updates
+- Move input handling to content handlers
+- Debug window
+- Window showing all the errors encountered when loading a page
+
+Web site
+--------
+
+- About team page. Add zamez info, new folk (porters, GSoC folk who
+ stay)
+- Adverts section with banners, buttons and mag. ads.
+
+Releases
+--------
+
+- Update homepage
+- Update download page
+- Update about NS page
+- Update screenshots page
+- Announce on user and dev MLs
+- Announce on csa.a, various RO software DB sites. ANS filebase thing.
+- There are various DBs of Linux software to get NS submitted to
+
diff --git a/todo/win32.mdwn b/todo/win32.mdwn
new file mode 100644
index 0000000..0e3e726
--- /dev/null
+++ b/todo/win32.mdwn
@@ -0,0 +1,28 @@
+[[!meta title="Todo/Win32"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2016-03-22T11:01:47Z"]]
+
+
+[[!toc]]
+
+Issues noted by rjw
+-------------------
+
+- No auto complete
+- Non-standard URL bar
+- Non-standard icon set
+- Throbber looks incorrect
+- Toolbar continues to contract horizontally even when it can't shrink
+ correctly
+- File-\>Save Page As is not greyed out, but entire sub-menu is
+- File-\>Open Location does not work
+- Edit-\>Find does not work
+- No form of selection works for the document
+- View-\>Page Source does not function
+- View-\>Zoom does not display the current zoom level anywhere
+- View-\>Full Screen does not function correctly when returning from
+ full screen mode
+- Local History draws outside the containing window, and has no close
+ icon
+- Tools-\>Downloads does not function
+
diff --git a/virtual_host_server.mdwn b/virtual_host_server.mdwn
new file mode 100644
index 0000000..2b3def8
--- /dev/null
+++ b/virtual_host_server.mdwn
@@ -0,0 +1,56 @@
+[[!meta title="Virtual Host Server"]]
+[[!meta author="Kyllikki"]]
+[[!meta date="2016-01-08T11:57:28Z"]]
+
+
+[[!toc]] The system providing the
+virtual host services for the NetSurf project is currently named
+phoenix.
+
+Access is \*only\* via the NetSurf VPN. For VPN access contact vince
+though you can also use your ssh key access to ci.netsurf-browser.org
+
+phoenix is currently 192.168.211.50 if the DNS is unavailable
+
+Creating a new VPS
+------------------
+
+Become superuser with sudo
+
+### Debian VPS
+
+If you are creating a new Debian box there is a helper script
+(new-wheezy-vps.sh ) which just just need to pass a system name to and
+you will get a 40G disc/ 512MB RAM system.
+
+for example:
+
+`new-wheezy-vps.sh ciworker13`
+
+will create a system named ciworker13 with 40G of disc and 512MB of
+memory with the Debian wheezy boot iso connected to the cdrom drive.
+
+### Other VPS
+
+The manual setup for other systems is:
+
+- create lvm device for the system
+
+`lvcreate --size 40G -n system_name vg`
+
+- if the OS requires a cdrom install media download and place in
+ /var/lib/libvirt/images/
+- use virt install to create the new VM substitutig appropriate values
+ for volume name, memory, boot disc
+
+`virt-install -n ciworker13 -r 512 --disk path=/dev/mapper/vg-ciworker13,bus=virtio \`
+`-c /var/lib/libvirt/images/cd54.iso --accelerate --network=bridge:br0 \`
+`--connect=qemu:///system --vnc --noautoconsole -v`
+
+Admin
+-----
+
+You can either use virsh on phoenix to directly admin consoles or
+alternatively use virt-admin over the VPN which is by far the easier
+option.
+