diff options
104 files changed, 7856 insertions, 0 deletions
@@ -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. + |