summaryrefslogtreecommitdiff
path: root/developers/gsoc/2008ideas.html
blob: 839da5629c90c993d7ed4e986e825c2a6dd3c53d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>NetSurf | Google Summer of Code 2008 Ideas</title>
<link rel="stylesheet" title="Standard" type="text/css" href="/netsurf.css">
</head>

<body>
<p class="banner"><a href="/"><img src="/netsurf.png" alt="NetSurf"></a></p>

<div class="navigation">
<div class="navsection">
<ul>
<li><a href="/about/">About NetSurf</a></li>
<li><a href="/downloads/">Downloads</a></li>
<li><a href="/documentation/">Documentation</a></li>
<li><a href="/developers/">Development area</a>
<ul>
<li><a href="/developers/contribute">Contribution</a></li>
<li><a href="/developers/gsoc">GSoC</a></li>
</ul>
</li>
<li><a href="/webmasters/">Webmaster area</a></li>
<li><a href="/contact/">Contact</a></li>
</ul>
</div>

<div class="navsection">
<ul class="languages">
<!--<li><a href="index.de">Deutsch</a></li>-->
<li>English</li>
<!--<li><a href="index.fr">Fran�ais</a></li>-->
<!--<li><a href="index.nl">Nederlands</a></li>-->
</ul>
</div>

<div class="navsection">
<ul class="sitelinks">
<li><a href="http://wiki.netsurf-browser.org/">Development wiki</a></li>
<li><a href="http://source.netsurf-browser.org/">Git repository viewer</a></li>
<li><a href="http://ci.netsurf-browser.org/">Continuous Integration</a></li>
<li><a href="http://bugs.netsurf-browser.org/">Bug report system</a></li>
<li><a href="http://ci.netsurf-browser.org/jenkins/view/Categorized/job/docs-netsurf/doxygen/">Code documentation</a></li>
</ul>
</div>

</div>

<div class="content">

<p class="breadcrumbs"><a href="/">Home</a><a href="/developers/">Developer area</a> � Google Summer of Code</p>

<h1>Google Summer of Code Ideas</h1>

<p>This page lists our project ideas for <strong><a href="http://code.google.com/soc/2008/">Google Summer of Code 2008</a></strong>.</p>

<p>Details of our selected students and their projects can be found on our <a href="/developers/gsoc">GSoC</a> page.</p>

<dl>
<dt>Before applying for a project<dt>
<dd>
<ul>
<li>Join our IRC channel <code>#netsurf</code> on <a href="http://freenode.net/">Freenode</a> and introduce yourself. Also, subscribe to the <a href="http://www.netsurf-browser.org/lists/netsurf-dev">developer mailing list</a>.</li>
<li>Have access to a computer with supported OS (RISC OS, Linux, FreeBSD, etc) or an OS relevant for the project you want to apply for (Windows, Mac OS).</li>
<li>Get up to speed with <a href="http://wiki.netsurf-browser.org/Documentation/GettingCoding">Git</a>, as we use this for source control, and get the NetSurf <a href="http://www.netsurf-browser.org/documentation/develop#SourceControl">source code</a>.</li>
<li><a href="http://www.netsurf-browser.org/documentation/develop#Compiling">Build NetSurf</a> and enjoy using it. (Ask if you need help.)</li>
<li>Get familiarised with the source code &ndash; read the <a href="http://git.netsurf-browser.org/netsurf.git/tree/docs">code documentation</a>.</li>
</ul>
<dd>
<dt>When applying for a project<dt>
<dd>
<ul>
<li>Create a set of project milestones (ranging from a couple to maximum 10). This will be useful for you as guidance and for us to set our expectations right.</li>
<li>Include your IRC nick in your application if you've spoken with us on <code>#netsurf</code>, so that we recognise you.</li>
</ul>
<dd>
<dt>During the project</dt>
<dd>
<ul>
<li>Most of NetSurf team communication happens via #netsurf IRC during evenings and nights (<a href="http://en.wikipedia.org/wiki/Central_European_Time">CET</a>). 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.</li>
<li>When improving NetSurf's layout engine, be able to create <a href="http://source.netsurf-browser.org/trunk/netsurftest/">test cases</a> and verify that existing test cases don't get broken.</li>
<li>Keep NetSurf's <a href="http://www.netsurf-browser.org/about/#ProjectGoals">project goals</a> in mind, especially the first point.</li>
</ul>
</dd>
</dl>

<p>Please <a href="/contact/">get in touch</a> if any of these ideas appeal to you or if you have your own idea for either <a href="/">NetSurf</a> or one of NetSurf's <a href="/projects/">sub-projects</a>. Come and chat to the developers in the NetSurf IRC channel or post to the developer mailing list.</p>

<p>All these ideas require knowledge of C, as NetSurf is entirely written in C.</p>

<p>See the <a href="http://sourceforge.net/tracker/?func=browse&amp;group_id=51719&amp;atid=464315">Feature Requests</a> tracker for more ideas.</p>

<h2>New CSS parser and selector engine</h2>
<p>NetSurf's current CSS parser and selector engine has several limitations. The existing code could be improved or rewritten. The limitations include:</p>
<ul>
<li>All rules within <code>@media { ... }</code> blocks are ignored.</li>
<li>Handling of invalid CSS does not follow the specification.</li>
<li>CSS specificity and importance issues</li>
</ul>
<p>Improvements here would improve NetSurf's rendering of many web pages, as well as the infamous <strong>acid2</strong> test.</p>
<div class="details">
<p>In the long-term, NetSurf will be requiring a DOM StyleSheet and CSS binding. The current CSS parser and selection engine aren't really structured in a manner that permits this to happen. Therefore, this project could take one of two forms:</p>
<ul>
 <li>Focus upon and fix the limitations in the current CSS engine</li>
 <li>Develop an entirely new CSS engine to replace the existing one</li>
</ul>
<p>There is an outline description of a <a href="http://git.netsurf-browser.org/netsurf.git/tree/docs/ideas/css-engine.txt">new CSS engine</a>, which may be of interest to those who want to take the second approach to this project. This description is fairly complete from an external API perspective. The implementation details of a new engine are completely negotiable &ndash; we have some idea of what's needed, but the student's input will be highly valued.</p>
<p>Regardless of which approach is taken, we would expect that testing of the code is performed on a regular basis to ensure that things are still working as expected. New testcases should be written to exercise existing bugs and test out new functionality.</p>
</div>
<p><strong>Skills required:</strong> C, CSS, parsing</p>
<p><strong>Difficulty:</strong> Medium</p>
<p><strong>Existing code:</strong> <a href="http://git.netsurf-browser.org/netsurf.git/tree/content/handlers/css">CSS parser and modules</a></p>
<p><strong>References:</strong> <a href="http://www.w3.org/TR/CSS21/">CSS 2.1 specification</a> <a href="http://www.w3.org/TR/DOM-Level-2-Style/">DOM Level 2 Style specification</a></p>

<h2>Native Windows or Mac OS X ports</h2>
<p>NetSurf currently has user-interface layers for the RISC OS Window Manager and for GTK (on Linux, FreeBSD, etc.). The GTK interface works on Windows or Mac OS X, but a native interface for these systems would give a better experience.</p>
<p><strong>Skills required:</strong> C, Windows UI development or Mac OS X UI development</p>
<p><strong>Difficulty:</strong> Medium</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/desktop/gui.h?view=markup">Declarations of functions that each interface must implement</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/riscos/">RISC OS specific code</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/gtk/">GTK specific code</a></p>
<p><strong>References:</strong></p>

<h2>Keyboard navigation</h2>
<p>The browser currently requires a mouse to use. Keyboard shortcuts would move between and activate links, inputs, etc. The document structure is stored in a tree, and algorithms for walking through the tree to find the next link or input would need to be developed. A further improvement would be to take layout position into account and implement moving in 2D.</p>
<p><strong>Skills required:</strong> C, HTML, CSS, usability</p>
<p><strong>Difficulty:</strong> Easy</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/desktop/textinput.c?view=markup">Key press handling</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/render/box.h?view=markup">Box tree structures</a></p>
<p><strong>References:</strong></p>

<h2>Printing improvements</h2>
<p>Printing is currently only available on RISC OS, and the output is difficult for the user to predict. Work could include implementing printing for GTK, print preview, intelligent paging or reformatting, support for print stylesheets, and user control over what parts of the page are printed. This might include writing a portable base and platform-specific layer.</p>
<p><strong>Skills required:</strong> C, CSS, GTK, possibly Cairo, possibly Postscript</p>
<p><strong>Difficulty:</strong> Hard</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/riscos/print.c?view=markup">RISC OS printing implementation</a></p>
<p><strong>References:</strong></p>

<h2>PDF plotter</h2>
<p>NetSurf's graphics output is abstracted through &quot;plotters&quot;, which are a set of functions that render output to some destination. For example, there are plotters for RISC OS window, GTK window, and DrawFile (a vector graphics format) output. Implementing a PDF plotter would turn NetSurf into a general HTML to PDF conversion tool.</p>
<div class="details">
<p>NetSurf already uses several Open Source libraries (cAres &amp; cURL, IJG JPEG, OpenSSL, libXML2, zlib, etc), so it is likely that an existing PDF write-capable library can be found and used in this project. Firstly, research the possible candidate libraries, based on criteria like: supported programming languages, its platform independence, ease of use, licence and any other possible advantages (like support for writing other vector based file formats, etc). Such research will actually mean writing some test/prototype code using those libraries in order to get familiar with their interfaces.</p>
<p>It is unlikely that this project will involve developing a PDF writing library from scratch. We won't rule this out for certain, but would require some convincing arguments from you.</p>
<p>During the evaluation of PDF writing libraries, we expect the student to become familiar with the requirements of the NetSurf plotter interface, figuring out what the issues could be from NetSurf API point view and for the PDF write library candidates. A plan should then be devised to solve these issues.</p>
<p>After hooking the PDF write library into NetSurf and getting some useful PDF files from web pages, it will be time to come up with a strategy to test your code. As we tend to be lazy, at least sometimes, we won't buy the &quot;Save as...&quot; manual save and view in a PDF viewer approach.</p>
<p>It could very well be that this project involves working closely together with people assigned for the &quot;Printing improvements&quot; project.</p>
<p>These project boundaries are not set in stone. We think it is a well defined project but we're happy to hear suggestions from you to enrich the project or redefine certain aspects of it.</p>
</div>
<p><strong>Skills required:</strong> C, graphics, PDF</p>
<p><strong>Difficulty:</strong> Medium</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/desktop/plotters.h?view=markup">Plotter interface</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/riscos/plotters.c?view=markup">RISC OS plotter</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/gtk/gtk_plotters.c?view=markup">GTK plotter</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/riscos/save_draw.c?view=markup">DrawFile plotter</a></p>
<p><strong>References:</strong></p>
<p><strong>Mentor:</strong> John Tytgat</p>

<h2>Page reader</h2>
<p>The web is a vast resource of information and services. Traditional browsers enable its access for people who can see. NetSurf attempts to help partially sighted users with a sophisticated scaling / zoom feature, however it could be improved further with a page reading option. Speech synthesis could be used to render pages as spoken output.</p>
<p>There are already several libraries for speech synthesis. This project would first involve enabling NetSurf to speak the textual content of a page. Further work would improve the usability of the system by consideration for such factors as:</p>
<ul>
<li>Overview mode, which announces the document headings</li>
<li>Section skipping to allow swift to access to the next part of the document</li>
<li>Repetition of the current section or skipping back to previous sections</li>
<li>How to differentiate link text from the rest of the text</li>
<li>How to handle emphasis tags; &lt;em&gt; and &lt;strong&gt;</li>
</ul>
<p><strong>Skills required:</strong> C, accessibility</p>
<p><strong>Difficulty:</strong> Medium &ndash; Hard</p>
<p><strong>Existing code:</strong></p>
<p><strong>References:</strong> <a href="http://espeak.sourceforge.net/">eSpeak text to speech synthesizer</a></p>

<h2>Dynamic pseudo classes</h2>
<p>NetSurf currently has no support for CSS dynamic pseudo classes (e.g. :hover). The work would involve adding support for these classes to the CSS parser and selection engine and modifying the layout engine to handle dynamic style changes.</p>
<p><strong>Skills required:</strong> C, HTML, CSS</p>
<p><strong>Difficulty:</strong> Hard</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/css">CSS parser</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/render">HTML handler and layout engine</a></p>
<p><strong>References:</strong> <a href="http://www.w3.org/TR/CSS21">CSS 2.1 specification</a></p>


<h2>Abstract RISC OS GUI code into a separate library</h2>
<p>NetSurf's RISC OS user interface is rich and powerful. It supports many features such as editable toolbars, dialogue box handling and menu generation. If the interface code was abstracted into a separate library, other RISC OS applications could benefit from the availability of a sophisticated, tried and tested and style guide compliant GUI toolkit.</p>
<p><strong>Skills required:</strong> C, RISC OS WIMP, OSLib</p>
<p><strong>Difficulty:</strong> Medium &ndash; Hard</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/riscos/">RISC OS specific code</a></p>
<p><strong>References:</strong> <a href="http://ro-oslib.sourceforge.net/">OSLib</a></p>

<h2>Extracting the core into a library</h2>
<p>NetSurf is currently conceptually split in two &ndash; the front-end (GUI) and the back-end (core):</p>
<ul>
<li>The GUI is responsible for providing entry points allowing the back end to open and manipulate browser windows, as well as plotting to them.</li>
<li>The core does all fetching, parsing and layout. It also handles user preferences.</li>
</ul>
<p>These two parts are then statically linked together.</p>
<p>Ideally, the back-end part of the browser would be abstracted to a stand-alone library, which a front-end could provide a table of entry points to. This allows for more than one program to use NetSurf's abilities efficiently, as well as giving us a chance to rationalise and tidy up the current rather ad-hoc API.</p>
<p><strong>Skills required:</strong> C</p>
<p><strong>Difficulty:</strong> Medium &ndash; Hard</p>
<p><strong>Existing code:</strong> See &quot;Native Windows or Mac OS X ports&quot; and &quot;PDF plotter&quot;. <a href="http://source.netsurf-browser.org/trunk/netsurf/desktop/options.c?view=markup">Options code in back-end</a></p>
<p><strong>References:</strong></p>

<h2>Improved inline element handling</h2>
<p>NetSurf's handling of inline elements is particularly incomplete. This task would involve improving the way in which these elements are handled. Particular issues include:</p>
<ul>
<li>Borders, margins, and padding</li>
<li>Backgrounds (colour &amp; image) and background image position</li>
<li>CSS white-space support (wrapping)</li>
<li>Unicode line breaking algorithm</li>
</ul>
<p><strong>Skills required:</strong> C, HTML, CSS</p>
<p><strong>Difficulty:</strong> Hard</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/render/layout.c?view=markup">Layout code</a></p>
<p><strong>References:</strong> <a href="http://www.w3.org/TR/CSS21/">CSS 2.1 specification</a></p>

<h2>Improved GTK front end; tabs, downloads, etc</h2>
<p>The GTK port, while capable of navigating the web and displaying web pages, lacks may of the features which would make it suitable for every day browsing. There are lots of features that could be added which would improve the user experience. These include:</p>
<ul>
<li>Tabs</li>
<li>Download implementation</li>
<li>Text selection, with copy &amp; paste</li>
<li>Save / export</li>
</ul>
<p><strong>Skills required:</strong> C, GTK</p>
<p><strong>Difficulty:</strong> Medium</p>
<p><strong>Existing code:</strong> <a href="http://source.netsurf-browser.org/trunk/netsurf/gtk/">GTK specific code</a>, <a href="http://source.netsurf-browser.org/trunk/netsurf/desktop/">Core code for text selection, export, etc</a></p>
<p><strong>References:</strong></p>

<div class="footer">
<p>Copyright 2003 - 2009 The NetSurf Developers</p>
</div>

</div>


<form method="get" action="http://www.google.co.uk/search">
<div class="searchbox">
<input type="hidden" name="q" value="site:netsurf-browser.org">
<input type="text" name="q" maxlength="255"><br>
<input type="submit" value="Search" name="btnG">
</div>
</form>

</body>
</html>