<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://dev.eiffel.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sanakan</id>
		<title>EiffelStudio: an EiffelSoftware project - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://dev.eiffel.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sanakan"/>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/Special:Contributions/Sanakan"/>
		<updated>2026-06-07T20:46:55Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=User:Sanakan&amp;diff=6818</id>
		<title>User:Sanakan</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=User:Sanakan&amp;diff=6818"/>
				<updated>2007-01-17T20:38:15Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| &lt;br /&gt;
| http://misc.sanakan.com/sanakan.png&lt;br /&gt;
| &lt;br /&gt;
| i'm a CS student at eth zurich, currently working on the [[Build_tool]] project, whose goal it is to provide an easy way to compile EiffelStudio.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
in summer 06 i was project leader (aka evil director of human resources) for the [[Folding_support]] project as part of the Software Engineering lecture.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
mail-contact:&amp;lt;br/&amp;gt;sanakan ~A~T~ student ~D~O~T~ ethz ~D~O~T~ ch&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Build_tool&amp;diff=6817</id>
		<title>Build tool</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Build_tool&amp;diff=6817"/>
				<updated>2007-01-17T20:35:41Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: added todo, redefined &amp;quot;steps&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The whole build process of EiffelStudio is rather tedious at the moment. This project aims to simplify this by various means:&lt;br /&gt;
* Setup checker&lt;br /&gt;
* (modular) Build scripts&lt;br /&gt;
* Delivery scripts&lt;br /&gt;
This will lead to a better overall build infrastructure, automated (nightly) builds, and things alike. We work on our own branch of the sourcecode, but will sync it from time to time with SVN HEAD.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
We aim to have a compact build process by using only Eiffel related tools (mainly geant scripts) and thus minimizing the needed (alien) tools to get an EiffelStudio compilation going.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
* produce a one-click-and-go script for easy installation&lt;br /&gt;
* get rid of windows dependency for bash&lt;br /&gt;
* remove script-only tools like finish_freezing, Makefile.sh, etc.&lt;br /&gt;
&lt;br /&gt;
== Done ==&lt;br /&gt;
&lt;br /&gt;
* first draft of geant scripts to build c-libraries&lt;br /&gt;
* first draft of setup-checker tool&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
&lt;br /&gt;
== Todo == &lt;br /&gt;
* makefile/batchfile for getting the installation started (for users unexperienced with gobo/geant)&lt;br /&gt;
* expand setup-checker&lt;br /&gt;
** find more dependencies on windows&lt;br /&gt;
* automatical use of existing gobo-installations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Build_tool&amp;diff=6351</id>
		<title>Build tool</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Build_tool&amp;diff=6351"/>
				<updated>2006-11-22T21:38:57Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: first draft of modular build-tool scripts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The whole build process of EiffelStudio is rather tedious at the moment. This project aims to simplify this by various means:&lt;br /&gt;
* Setup checker&lt;br /&gt;
* (modular) Build scripts&lt;br /&gt;
* Delivery scripts&lt;br /&gt;
This will lead to a better overall build infrastructure, automated (nightly) builds, and things alike. We work on our own branch of the sourcecode, but will sync it from time to time with SVN HEAD.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
We aim to have a compact build process by using only Eiffel related tools (mainly geant scripts) and thus minimizing the needed (alien) tools to get an EiffelStudio compilation going.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* first draft of geant scripts to build c-libraries&lt;br /&gt;
* first draft of setup-checker tool&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
&lt;br /&gt;
== Todo == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Build_tool&amp;diff=6234</id>
		<title>Build tool</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Build_tool&amp;diff=6234"/>
				<updated>2006-11-17T21:36:34Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: initial wiki page for build tool project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The whole build process of EiffelStudio is rather tedious at the moment. This project aims to simplify this by various means:&lt;br /&gt;
* Setup checker&lt;br /&gt;
* Build scripts&lt;br /&gt;
* Delivery scripts&lt;br /&gt;
This will lead to a better overall build infrastructure, automated (nightly) builds, and things alike. We work on our own branch of the sourcecode, but will sync it from time to time with SVN HEAD.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
We aim to have a compact build process by using only Eiffel related tools (mainly geant scripts) and thus minimizing the needed (alien) tools to get an EiffelStudio compilation going.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
&lt;br /&gt;
== Todo == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Automatic_Build_Scripts&amp;diff=4059</id>
		<title>Automatic Build Scripts</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Automatic_Build_Scripts&amp;diff=4059"/>
				<updated>2006-07-18T16:53:16Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Compiler]]&lt;br /&gt;
[[Category:EiffelStudio]]&lt;br /&gt;
This page references different build scripts that automate the process of building EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
[[User:Barnski|Bernardo Buss]] created a set of scripts for the automated compilation of EiffelStudio under Windows.&lt;br /&gt;
* Script: http://homepage.hispeed.ch/barnski/EiffelStudio_batch_files.zip&lt;br /&gt;
* Announcement: http://origo.ethz.ch/pipermail/es-devel/2006-April/000052.html&lt;br /&gt;
'''Note:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* You may need to keep &amp;quot;2_checkout_dev.bat&amp;quot; up to date by yourself according to [[Compiling_EiffelStudio#Checking_out_from_SVN|Checking out from SVN]].&lt;br /&gt;
* It is possible that the '''batchfiles only work partial''' with EiffelStudio '''newer than version 5.7.0826''' (especially parts of the compilation process may differ too much).&lt;br /&gt;
'''Update:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* [[User:Philipp|Philipp Bönhof]] improved the scripts with customizable parameters. Download here: http://n.ethz.ch/student/pboenhof/autotest/Philipp_Eiffel_Compilation_Scripts.zip&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
Bernd Schoeller has developed a build script vor use with .acex configuration files. it is available for download at http://se.inf.ethz.ch/people/schoeller/download/build-ec-acex&lt;br /&gt;
&lt;br /&gt;
For use with the new .ecf configuration files, please use this updated version:&amp;lt;br/&amp;gt;&lt;br /&gt;
http://n.ethz.ch/~bherlig/download/build-ec-ecf.sh&lt;br /&gt;
&lt;br /&gt;
This script requires a single checkout from the SVN repository (with the EIFFEL_SVN environment variable pointing to it). It will compile the bench or the batch compiler (you need to modify the script for the second).&lt;br /&gt;
&lt;br /&gt;
=== Gentoo ===&lt;br /&gt;
Eiffelstudio, Gobo, edoc, ewg, eiffelmedia and eclipse edt ebuilds for gentoo, can be downloaded [http://n.ethz.ch/~philipkr/eiffel-ebuilds.tar.gz here] or from cvs:&lt;br /&gt;
 cvs -z3 -d:pserver:anonymous@waldorf.inf.ethz.ch:/public-cvs co -deiffel-ebuilds student/eiffel-ebuilds&lt;br /&gt;
Installation instructions can be found [http://n.ethz.ch/~philipkr/eiffel-tools.html here]&lt;br /&gt;
&lt;br /&gt;
== Mac OSX ==&lt;br /&gt;
No that Mac builds are available, I guess you can use the Linux script on Mac OS, too.&lt;br /&gt;
I prefer this more simple script though:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
cd $EIFFEL_SRC/C&lt;br /&gt;
make clobber&lt;br /&gt;
./quick_configure&lt;br /&gt;
&lt;br /&gt;
cd $EIFFEL_SRC/library/event/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
cd $EIFFEL_SRC/library/net/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
cd $EIFFEL_SRC/library/vision2/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
cd $EIFFEL_SRC/library/vision2/implementation/gtk/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
&lt;br /&gt;
cd $EIFFEL_SRC/Eiffel/Ace&lt;br /&gt;
ec -config ec.ecf -target bench -finalize -c_compile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This basically automates the steps described [[Compiling_EiffelStudio|here]].&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Automatic_Build_Scripts&amp;diff=4058</id>
		<title>Automatic Build Scripts</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Automatic_Build_Scripts&amp;diff=4058"/>
				<updated>2006-07-18T16:52:47Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: new linux buildscript for .ecf files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Compiler]]&lt;br /&gt;
[[Category:EiffelStudio]]&lt;br /&gt;
This page references different build scripts that automate the process of building EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
[[User:Barnski|Bernardo Buss]] created a set of scripts for the automated compilation of EiffelStudio under Windows.&lt;br /&gt;
* Script: http://homepage.hispeed.ch/barnski/EiffelStudio_batch_files.zip&lt;br /&gt;
* Announcement: http://origo.ethz.ch/pipermail/es-devel/2006-April/000052.html&lt;br /&gt;
'''Note:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* You may need to keep &amp;quot;2_checkout_dev.bat&amp;quot; up to date by yourself according to [[Compiling_EiffelStudio#Checking_out_from_SVN|Checking out from SVN]].&lt;br /&gt;
* It is possible that the '''batchfiles only work partial''' with EiffelStudio '''newer than version 5.7.0826''' (especially parts of the compilation process may differ too much).&lt;br /&gt;
'''Update:'''&amp;lt;br&amp;gt;&lt;br /&gt;
* [[User:Philipp|Philipp Bönhof]] improved the scripts with customizable parameters. Download here: http://n.ethz.ch/student/pboenhof/autotest/Philipp_Eiffel_Compilation_Scripts.zip&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
Bernd Schoeller has developed a build script vor use with .acex configuration files. it is available for download at http://se.inf.ethz.ch/people/schoeller/download/build-ec-acex&lt;br /&gt;
&lt;br /&gt;
For use with the new .ecf configuration files, please use this updated version&lt;br /&gt;
http://n.ethz.ch/~bherlig/download/build-ec-ecf.sh&lt;br /&gt;
&lt;br /&gt;
This script requires a single checkout from the SVN repository (with the EIFFEL_SVN environment variable pointing to it). It will compile the bench or the batch compiler (you need to modify the script for the second).&lt;br /&gt;
&lt;br /&gt;
=== Gentoo ===&lt;br /&gt;
Eiffelstudio, Gobo, edoc, ewg, eiffelmedia and eclipse edt ebuilds for gentoo, can be downloaded [http://n.ethz.ch/~philipkr/eiffel-ebuilds.tar.gz here] or from cvs:&lt;br /&gt;
 cvs -z3 -d:pserver:anonymous@waldorf.inf.ethz.ch:/public-cvs co -deiffel-ebuilds student/eiffel-ebuilds&lt;br /&gt;
Installation instructions can be found [http://n.ethz.ch/~philipkr/eiffel-tools.html here]&lt;br /&gt;
&lt;br /&gt;
== Mac OSX ==&lt;br /&gt;
No that Mac builds are available, I guess you can use the Linux script on Mac OS, too.&lt;br /&gt;
I prefer this more simple script though:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
cd $EIFFEL_SRC/C&lt;br /&gt;
make clobber&lt;br /&gt;
./quick_configure&lt;br /&gt;
&lt;br /&gt;
cd $EIFFEL_SRC/library/event/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
cd $EIFFEL_SRC/library/net/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
cd $EIFFEL_SRC/library/vision2/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
cd $EIFFEL_SRC/library/vision2/implementation/gtk/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
&lt;br /&gt;
cd $EIFFEL_SRC/Eiffel/Ace&lt;br /&gt;
ec -config ec.ecf -target bench -finalize -c_compile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This basically automates the steps described [[Compiling_EiffelStudio|here]].&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3664</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3664"/>
				<updated>2006-06-21T10:09:24Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: new screenshots&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
While using an editor like the one provided by EiffelStudio the actual area in a &lt;br /&gt;
text, in thsi case source code, that is actually being edited is restricted to a &lt;br /&gt;
small part of the entire document. Therefor being able to remove text sequences &lt;br /&gt;
from the display without changing the actual text sequence could increase &lt;br /&gt;
productivity. One such approach is to use folding, which is a line-based &lt;br /&gt;
technique that &amp;quot;folds&amp;quot; a block of lines into a single line that is then &lt;br /&gt;
displayed in addition to a special symbol that marks the line as actually being &lt;br /&gt;
a &amp;quot;pile&amp;quot; of lines, and which also serves as the interface to unfold the passage &lt;br /&gt;
back into it's original state (and subsequent fold/unfold operations).&lt;br /&gt;
&lt;br /&gt;
==The Goal==&lt;br /&gt;
The goal of this project was to implement folding support for the &lt;br /&gt;
EiffelStudio editor in order to be able to fold semantic blocks of code such as &lt;br /&gt;
entire features or loop blocks. The source text should however not be modified by this procedure in&lt;br /&gt;
the sense that folding or unfolding a text should not change the AST. In addition folding should also not&lt;br /&gt;
have any affects on any print output. A search for specific parts of code should also be able to enter &lt;br /&gt;
folded text areas. It is also critical that folded areas are always displayed to the user correctly. Nested folding &lt;br /&gt;
(e.g. a loop body in a feature, nested loops etc...) should also be possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Classes=&lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
EB_FOLDING_AREA&lt;br /&gt;
Class holding all information about a single foldable area, for example&lt;br /&gt;
* starting line:INTEGER&lt;br /&gt;
* ending line:INTEGER&lt;br /&gt;
* folded:BOOLEAN&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Testing=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following testcases have been propsed:&lt;br /&gt;
- write a small application (source code to be provided by author) that includes multiple features, loops and nested loops&lt;br /&gt;
to check the correct creation and display of folded areas (ncl. nested folds).&lt;br /&gt;
&lt;br /&gt;
- print the source code of the application mentioned above with and without folding support. The output&lt;br /&gt;
should be identical.&lt;br /&gt;
&lt;br /&gt;
- compile and run both the source code with and without folding support. The applications behaviour should be identical.&lt;br /&gt;
&lt;br /&gt;
- search for specific words and text segments within folded areas of the source. The search should find such segments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TO DO=&lt;br /&gt;
&lt;br /&gt;
=== Part one :: generating the folding areas ===&lt;br /&gt;
This is the part where the data is gathered and put in to a datastructure to work on.&lt;br /&gt;
Assigned to&lt;br /&gt;
* sanakan&lt;br /&gt;
&lt;br /&gt;
====Done====&lt;br /&gt;
&amp;lt;b&amp;gt;EB_FOLDING_AREA&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
Folding points of interests are gathered from the class ast via click_tool.current_class.ast. the of features of the class include&lt;br /&gt;
* next: EB_FOLDING_AREA&lt;br /&gt;
* previous: EB_FOLDING_AREA&amp;lt;br&amp;gt;-- links to adjacent folding_areas&lt;br /&gt;
* hidden: BOOLEAN&amp;lt;br&amp;gt;-- flag to indicate if the feature is hidden or not&lt;br /&gt;
* show&lt;br /&gt;
* hide&lt;br /&gt;
* toggle_hidden_status&amp;lt;br&amp;gt;-- manipulate the hidden-flag&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;EB_FOLDING_AREA_TREE&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt; &lt;br /&gt;
EB_FOLDING_AREAs are inserted stored in an avl-tree EB_FOLDING_AREA_TREE with doubly-linked leaves. features of the class include&lt;br /&gt;
* first: EB_FOLDING_AREA&lt;br /&gt;
* last: EB_FOLDING_AREA&amp;lt;br&amp;gt;-- links to the very first and very last folding_areas&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;EB_SMART_EDITOR&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
The editor was enchanced to support the generation an maintaining of folding areas. properties and functions include&lt;br /&gt;
* folding_areas: EB_FOLDING_AREA_TREE&amp;lt;br&amp;gt;-- rooting point of the datastructure&lt;br /&gt;
* initialize_folding_areas&amp;lt;br&amp;gt;-- deletes any existing tree &amp;amp; builds it anew from the currently loaded classtext&lt;br /&gt;
* update_folding_areas&amp;lt;br&amp;gt;-- synchronizes with the shown/saved classtext. only executes if the syntax is correct.&lt;br /&gt;
&lt;br /&gt;
=== Part two :: graphical sidebar===&lt;br /&gt;
A breakpoint-sidebar like widget to display our folding-handles in.&lt;br /&gt;
Assigned to&lt;br /&gt;
* ledergec&lt;br /&gt;
* bru&lt;br /&gt;
* lord bubu&lt;br /&gt;
* salmanasar&lt;br /&gt;
* grippus&lt;br /&gt;
* thomas&lt;br /&gt;
* sanakan&lt;br /&gt;
&lt;br /&gt;
====Done====&lt;br /&gt;
* added grey bar containing EDITOR_TOKEN_FOLDING_POINTs (the thingies to click on)&lt;br /&gt;
* added menu entry to toggle folding-support (edit menu -&amp;gt; toggle folding points)&lt;br /&gt;
* added keyboard shortcut for toggling folding-support (ctrl + p)&lt;br /&gt;
* prepared interface for code-folding (see &amp;quot;part three&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
====images speak a thousand words====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
!Basic bar&lt;br /&gt;
!Code-Folding bar with line numbers bar&lt;br /&gt;
!Code-Folding: menu entry&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Folding margin 1.png|code-folding: basic code-folding bar]]&lt;br /&gt;
|[[Image:Folding margin 2.png|code-folding: code-folding bar with line numbers]]&lt;br /&gt;
|[[Image:Folding_menu_1.png|code-folding: menu entry]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Part three :: text-manipulation===&lt;br /&gt;
* Perro&lt;br /&gt;
* Panarium&lt;br /&gt;
* Exception&lt;br /&gt;
&lt;br /&gt;
=== AST ===&lt;br /&gt;
To be familiar with ES' way of implementing the AST&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* (half) ADT specified&lt;br /&gt;
* some specifications&lt;br /&gt;
* generation of points/areas-of-interest (aka folding-areas)&lt;br /&gt;
* graphical representation (aka folding bar)&lt;br /&gt;
* togglabillity (sp?) of graphical bar (aka ctrl-p)&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
&lt;br /&gt;
[http://jerry.cs.uiuc.edu/~plop/plop2003/Papers/Jones-ImplementingASTs.pdf How to implement an AST?]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Visitor_pattern What's the Visitor Design-Pattern?]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unm.edu/~crowley/papers/sds/sds.html A paper about ADT's and text editors] ([http://citeseer.ist.psu.edu/rd/0%2C162545%2C1%2C0.25%2CDownload/http://citeseer.ist.psu.edu/compress/0/papers/cs/1797/http:zSzzSzwww.bolthole.comzSzjwordzSzwppaper.ps.gz/crowley98data.ps download of the file with graphics])&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui-fold es-ui-fold@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* [[User:Bayt| Bayt]] (Project Supervisor)&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;br /&gt;
* [[User:Ledergec| Ledergec]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]] (aka. David, Quality Checking)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3565</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3565"/>
				<updated>2006-06-18T00:40:25Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: moved adt to talk-page, as it is to be revised&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
While using an editor like the one provided by EiffelStudio the actual area in a &lt;br /&gt;
text, in thsi case source code, that is actually being edited is restricted to a &lt;br /&gt;
small part of the entire document. Therefor being able to remove text sequences &lt;br /&gt;
from the display without changing the actual text sequence could increase &lt;br /&gt;
productivity. One such approach is to use folding, which is a line-based &lt;br /&gt;
technique that &amp;quot;folds&amp;quot; a block of lines into a single line that is then &lt;br /&gt;
displayed in addition to a special symbol that marks the line as actually being &lt;br /&gt;
a &amp;quot;pile&amp;quot; of lines, and which also serves as the interface to unfold the passage &lt;br /&gt;
back into it's original state (and subsequent fold/unfold operations).&lt;br /&gt;
&lt;br /&gt;
==The Goal==&lt;br /&gt;
The goal of this project was to implement folding support for the &lt;br /&gt;
EiffelStudio editor in order to be able to fold semantic blocks of code such as &lt;br /&gt;
entire features or loop blocks. The source text should however not be modified by this procedure in&lt;br /&gt;
the sense that folding or unfolding a text should not change the AST. In addition folding should also not&lt;br /&gt;
have any affects on any print output. A search for specific parts of code should also be able to enter &lt;br /&gt;
folded text areas. It is also critical that folded areas are always displayed to the user correctly. Nested folding &lt;br /&gt;
(e.g. a loop body in a feature, nested loops etc...) should also be possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Classes=&lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
EB_FOLDING_AREA&lt;br /&gt;
Class holding all information about a single foldable area, for example&lt;br /&gt;
* starting line:INTEGER&lt;br /&gt;
* ending line:INTEGER&lt;br /&gt;
* folded:BOOLEAN&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Testing=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following testcases have been propsed:&lt;br /&gt;
- write a small application (source code to be provided by author) that includes multiple features, loops and nested loops&lt;br /&gt;
to check the correct creation and display of folded areas (ncl. nested folds).&lt;br /&gt;
&lt;br /&gt;
- print the source code of the application mentioned above with and without folding support. The output&lt;br /&gt;
should be identical.&lt;br /&gt;
&lt;br /&gt;
- compile and run both the source code with and without folding support. The applications behaviour should be identical.&lt;br /&gt;
&lt;br /&gt;
- search for specific words and text segments within folded areas of the source. The search should find such segments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TO DO=&lt;br /&gt;
&lt;br /&gt;
=== Part one :: generating the folding areas ===&lt;br /&gt;
This is the part where the data is gathered and put in to a datastructure to work on.&lt;br /&gt;
Assigned to&lt;br /&gt;
* sanakan&lt;br /&gt;
&lt;br /&gt;
====Done====&lt;br /&gt;
&amp;lt;b&amp;gt;EB_FOLDING_AREA&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
Folding points of interests are gathered from the class ast via click_tool.current_class.ast. the of features of the class include&lt;br /&gt;
* next: EB_FOLDING_AREA&lt;br /&gt;
* previous: EB_FOLDING_AREA&amp;lt;br&amp;gt;-- links to adjacent folding_areas&lt;br /&gt;
* hidden: BOOLEAN&amp;lt;br&amp;gt;-- flag to indicate if the feature is hidden or not&lt;br /&gt;
* show&lt;br /&gt;
* hide&lt;br /&gt;
* toggle_hidden_status&amp;lt;br&amp;gt;-- manipulate the hidden-flag&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;EB_FOLDING_AREA_TREE&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt; &lt;br /&gt;
EB_FOLDING_AREAs are inserted stored in an avl-tree EB_FOLDING_AREA_TREE with doubly-linked leaves. features of the class include&lt;br /&gt;
* first: EB_FOLDING_AREA&lt;br /&gt;
* last: EB_FOLDING_AREA&amp;lt;br&amp;gt;-- links to the very first and very last folding_areas&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;EB_SMART_EDITOR&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
The editor was enchanced to support the generation an maintaining of folding areas. properties and functions include&lt;br /&gt;
* folding_areas: EB_FOLDING_AREA_TREE&amp;lt;br&amp;gt;-- rooting point of the datastructure&lt;br /&gt;
* initialize_folding_areas&amp;lt;br&amp;gt;-- deletes any existing tree &amp;amp; builds it anew from the currently loaded classtext&lt;br /&gt;
* update_folding_areas&amp;lt;br&amp;gt;-- synchronizes with the shown/saved classtext. only executes if the syntax is correct.&lt;br /&gt;
&lt;br /&gt;
=== Part two :: graphical sidebar===&lt;br /&gt;
A breakpoint-sidebar like widget to display our folding-handles in.&lt;br /&gt;
Assigned to&lt;br /&gt;
* ledergec&lt;br /&gt;
* bru&lt;br /&gt;
* lord bubu&lt;br /&gt;
* salmanasar&lt;br /&gt;
* grippus&lt;br /&gt;
* thomas&lt;br /&gt;
* sanakan&lt;br /&gt;
&lt;br /&gt;
====Done====&lt;br /&gt;
* added grey bar containing EDITOR_TOKEN_FOLDING_POINTs (the thingies to click on)&lt;br /&gt;
* added menu entry to toggle folding-support (edit menu -&amp;gt; toggle folding points)&lt;br /&gt;
* added keyboard shortcut for toggling folding-support (ctrl + p)&lt;br /&gt;
* prepared interface for code-folding (see &amp;quot;part three&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
====images speak a thousand words====&lt;br /&gt;
Basic bar:&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Folding margin 1.png|code-folding: basic code-folding bar]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Code-Folding bar with line numbers bar&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Folding margin 2.png|code-folding: code-folding bar with line numbers]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Code-Folding: menu entry&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Folding_menu_1.png|code-folding: menu entry]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Part three :: text-manipulation===&lt;br /&gt;
* Perro&lt;br /&gt;
* Panarium&lt;br /&gt;
* Exception&lt;br /&gt;
&lt;br /&gt;
=== AST ===&lt;br /&gt;
To be familiar with ES' way of implementing the AST&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* (half) ADT specified&lt;br /&gt;
* some specifications&lt;br /&gt;
* generation of points/areas-of-interest (aka folding-areas)&lt;br /&gt;
* graphical representation (aka folding bar)&lt;br /&gt;
* togglabillity (sp?) of graphical bar (aka ctrl-p)&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
&lt;br /&gt;
[http://jerry.cs.uiuc.edu/~plop/plop2003/Papers/Jones-ImplementingASTs.pdf How to implement an AST?]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Visitor_pattern What's the Visitor Design-Pattern?]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unm.edu/~crowley/papers/sds/sds.html A paper about ADT's and text editors] ([http://citeseer.ist.psu.edu/rd/0%2C162545%2C1%2C0.25%2CDownload/http://citeseer.ist.psu.edu/compress/0/papers/cs/1797/http:zSzzSzwww.bolthole.comzSzjwordzSzwppaper.ps.gz/crowley98data.ps download of the file with graphics])&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui-fold es-ui-fold@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* [[User:Bayt| Bayt]] (Project Supervisor)&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;br /&gt;
* [[User:Ledergec| Ledergec]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]] (aka. David, Quality Checking)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Talk:Folding_support&amp;diff=3564</id>
		<title>Talk:Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Talk:Folding_support&amp;diff=3564"/>
				<updated>2006-06-18T00:40:02Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: cleanup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= general TODO =&lt;br /&gt;
[[User:Sanakan|Sanakan]] 02:40, 18 June 2006 (CEST)&amp;lt;br/&amp;gt;&lt;br /&gt;
* revise code hiding/showing&lt;br /&gt;
-&amp;gt; assigned to: panarium, exception, sanakan&lt;br /&gt;
* testing!!!!!&lt;br /&gt;
-&amp;gt; assigned to: everyone&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:salmanasar|salmanasar]] 13:15, 9 May 2006 (CEST)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I suggest, that every change in the classes is reported with a little comment (perhaps via the mailinglist), so that those of us who do part 3 and 4 are able to support the coders, as sanakan proposed.&lt;br /&gt;
&lt;br /&gt;
= working title of the project =&lt;br /&gt;
&lt;br /&gt;
A few ideas:&lt;br /&gt;
* Folding -&amp;gt; falten -&amp;gt; eiffel-origami&lt;br /&gt;
* FEES : Folding editor for Eiffel Studio&lt;br /&gt;
* hidden beauty project&lt;br /&gt;
* HYCs : Hide your code&lt;br /&gt;
* Folding Fields&lt;br /&gt;
* Heilige Dreifaltigkeit&lt;br /&gt;
&lt;br /&gt;
any comments from team members?&lt;br /&gt;
&lt;br /&gt;
[[User:Sanakan|Sanakan]] 22:02, 19 April 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[User:Bayt|Bayt]]&lt;br /&gt;
I really like origamiE :-)&lt;br /&gt;
&lt;br /&gt;
[[User:Bru|Bru]]&lt;br /&gt;
origamiE is cool. Another propasal: FEdEX (Folding: an Editor EXtension or an Folding for Editors: an Eiffel eXtension)&lt;br /&gt;
&lt;br /&gt;
= Testing/Checking =&lt;br /&gt;
&lt;br /&gt;
--[[User:Salmanasar|Salmanasar]] 12:35, 13 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
I wrote a little Eiffel-program with which you can check if our folding-editor works:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
indexing&lt;br /&gt;
	description	: &amp;quot;System's root class, Class to test if folding editor works&amp;quot;&lt;br /&gt;
	author: &amp;quot;salmanasar&amp;quot;&lt;br /&gt;
	date: &amp;quot;11.06.2006&amp;quot;&lt;br /&gt;
	revision: &amp;quot;1.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class&lt;br /&gt;
	ROOT_CLASS&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
	make&lt;br /&gt;
&lt;br /&gt;
feature -- Initialization&lt;br /&gt;
&lt;br /&gt;
	make is&lt;br /&gt;
			-- Creation procedure.&lt;br /&gt;
		local&lt;br /&gt;
			option : INTEGER&lt;br /&gt;
			number : INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			-- Print some welcome text.&lt;br /&gt;
			io.put_string(&amp;quot;Enter your option: {1,2,3}&amp;quot;)&lt;br /&gt;
			io.new_line&lt;br /&gt;
			io.put_string(&amp;quot;=========================&amp;quot;)&lt;br /&gt;
			io.new_line&lt;br /&gt;
			io.read_integer&lt;br /&gt;
			option := io.last_integer&lt;br /&gt;
			io.new_line&lt;br /&gt;
			io.new_line&lt;br /&gt;
			io.put_string(&amp;quot;Enter a number between 1 and 20&amp;quot;)&lt;br /&gt;
			io.new_line&lt;br /&gt;
			io.put_string(&amp;quot;===============================&amp;quot;)&lt;br /&gt;
			io.new_line&lt;br /&gt;
			io.read_integer&lt;br /&gt;
			number := io.last_integer&lt;br /&gt;
			-- if to be folded&lt;br /&gt;
			if (number &amp;gt; 0) and (number &amp;lt; 21) then&lt;br /&gt;
				-- inspect to be folded&lt;br /&gt;
	 			inspect option&lt;br /&gt;
  				when 1 then looping(number)&lt;br /&gt;
  				when 2 then casedecision(number)&lt;br /&gt;
  				when 3 then inspecting_thing(number)&lt;br /&gt;
  					&lt;br /&gt;
  				else io.put_string(&amp;quot;no such option!!&amp;quot;)&lt;br /&gt;
  				end&lt;br /&gt;
			end&lt;br /&gt;
			 &lt;br /&gt;
			&lt;br /&gt;
			&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
feature -- cases&lt;br /&gt;
	&lt;br /&gt;
	looping(n: INTEGER) is&lt;br /&gt;
			-- feature with 2 loops, 1 if-then-else printing a checkered triangle&lt;br /&gt;
		local&lt;br /&gt;
			i, j, star: INTEGER&lt;br /&gt;
		do&lt;br /&gt;
			from&lt;br /&gt;
				i := 1&lt;br /&gt;
				star := 1&lt;br /&gt;
			until&lt;br /&gt;
				i &amp;gt; n&lt;br /&gt;
			loop&lt;br /&gt;
				from &lt;br /&gt;
				 	j := 1&lt;br /&gt;
				until&lt;br /&gt;
					j &amp;gt; i&lt;br /&gt;
				loop&lt;br /&gt;
					if j \\ 2 = star then&lt;br /&gt;
						io.put_character (' ')&lt;br /&gt;
					else &lt;br /&gt;
					 	io.put_character ('*')&lt;br /&gt;
					end&lt;br /&gt;
					j := j + 1&lt;br /&gt;
				end&lt;br /&gt;
				star := 1 - star&lt;br /&gt;
				i := i + 1&lt;br /&gt;
				io.put_new_line&lt;br /&gt;
			end &lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	&lt;br /&gt;
	casedecision(n:INTEGER) is&lt;br /&gt;
			--  feature with if then elseif&lt;br /&gt;
		do &lt;br /&gt;
			-- if to be folded&lt;br /&gt;
			if n &amp;gt; 10&lt;br /&gt;
   				then io.put_string (&amp;quot;What a huge number!!!&amp;quot;)&lt;br /&gt;
   			elseif n &amp;gt;5 &lt;br /&gt;
   				then io.put_string (&amp;quot;What a little number!!!&amp;quot;)&lt;br /&gt;
   			else io.put_string (&amp;quot;What a tiny number!!!&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	inspecting_thing(n:INTEGER) is&lt;br /&gt;
			--  feature with weird inspecting thing&lt;br /&gt;
		do &lt;br /&gt;
				-- inspect to be folded&lt;br /&gt;
	 			inspect n&lt;br /&gt;
  				when 1 then io.put_string (&amp;quot;one&amp;quot;)&lt;br /&gt;
  				when 2 then io.put_string (&amp;quot;two&amp;quot;)&lt;br /&gt;
  				when 3 then io.put_string (&amp;quot;three&amp;quot;)&lt;br /&gt;
  				when 4 then io.put_string (&amp;quot;four&amp;quot;)&lt;br /&gt;
  				when 5 then io.put_string (&amp;quot;five&amp;quot;)&lt;br /&gt;
  				when 6 then io.put_string (&amp;quot;six&amp;quot;)&lt;br /&gt;
  				when 7 then io.put_string (&amp;quot;seven&amp;quot;)&lt;br /&gt;
  				when 8 then io.put_string (&amp;quot;eight&amp;quot;)&lt;br /&gt;
  				else io.put_string (&amp;quot;too big&amp;quot;)&lt;br /&gt;
  				end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end -- class ROOT_CLASS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ADT: general Talk =&lt;br /&gt;
[[User:Exception|Exception]] 14:45, 4 May 2006 (CEST)&amp;lt;br/&amp;gt;&lt;br /&gt;
I think we need another data type / class that specifies where folding is possible and whether it's folded or not. I propose the name '''EV_FOLDING_AREA'''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it should have the following functions: &amp;lt;br/&amp;gt;&lt;br /&gt;
'''create:''' -&amp;gt; EV_FOLDING_AREA &amp;lt;br/&amp;gt;&lt;br /&gt;
the area goes from this character on. &amp;lt;br/&amp;gt;&lt;br /&gt;
'''from:''' EV_FOLDING_AREA -&amp;gt; INTEGER &amp;lt;br/&amp;gt;&lt;br /&gt;
the area goes from this character on. &amp;lt;br/&amp;gt;&lt;br /&gt;
'''to:''' EV_FOLDING_AREA -&amp;gt; INTEGER &amp;lt;br/&amp;gt;&lt;br /&gt;
the area goes until this character. &amp;lt;br/&amp;gt;&lt;br /&gt;
'''folded:''' EV_FOLDING_AREA -&amp;gt; BOOLEAN &amp;lt;br/&amp;gt;&lt;br /&gt;
is it folded or not? &amp;lt;br/&amp;gt;&lt;br /&gt;
'''fold:''' EV_FOLDING_AREA -&amp;gt; EV_FOLDING_AREA &amp;lt;br/&amp;gt;&lt;br /&gt;
fold the area. &amp;lt;br/&amp;gt;&lt;br /&gt;
'''unfold:''' EV_FOLDING_AREA -&amp;gt; EV_FOLDING_AREA &amp;lt;br/&amp;gt;&lt;br /&gt;
unfold the area. &amp;lt;br/&amp;gt;&lt;br /&gt;
'''content:''' EV_FOLDING_AREA x EV_FOLDING_WIDGET -&amp;gt; STRING &amp;lt;br/&amp;gt;&lt;br /&gt;
the content of the area. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the structure would be controlled by the controller which knows of the AST. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
as always, this is only a proposal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Bru|Bru]] 13:03, 9 May 2006 (CEST)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How does Eiffel implement text as a sequence of characters? line by line? That will greatly influence our implementation of the folding widget I guess. A &amp;quot;folding area&amp;quot; will then contain the lines themselves and the start and end coordinates of the area, so that when the displayer draws the editor area it gets those coordinates from the folding controller and doesn't display those lines but puts a symbol there instead. Just thinking out loud here...&lt;br /&gt;
&lt;br /&gt;
= ADT = &lt;br /&gt;
moved from front-page&amp;lt;br/&amp;gt;[[User:Sanakan|Sanakan]] 02:40, 18 June 2006 (CEST)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: to be revised!&lt;br /&gt;
==Types==&lt;br /&gt;
FOLDING_WIDGET, TEXT_BLOCK, INTEGER, BOOLEAN, &lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
new -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
definearea: FOLDING_WIDGET X HIGHLIGHTED_TEXT_BLOCK -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
from: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
to: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
folded: FOLDING_WIDGET -&amp;gt; BOOLEAN&amp;lt;br/&amp;gt;&lt;br /&gt;
fold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt; &lt;br /&gt;
unfold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
content: FOLDING_WIDGET -&amp;gt; BLOCK&amp;lt;br/&amp;gt;&lt;br /&gt;
numberoflines: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
==Axioms==&lt;br /&gt;
&lt;br /&gt;
for all w,v :: FOLDING_WIDGET, tb :: TEXT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from(definearea(w,tb)) = firstline(tb) &lt;br /&gt;
to(definearea(w,tb) = lastline(tb) &lt;br /&gt;
content(new) = NULL &lt;br /&gt;
content(definearea(w,tb)) = tb &lt;br /&gt;
numberoflines(new) = 0 &lt;br /&gt;
numberoflines(definearea(w,tb)) = to(definearea(w,tb)) - from(definearea(w,tb)) &lt;br /&gt;
folded(new) = false &lt;br /&gt;
folded(fold(w)) = true&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3563</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3563"/>
				<updated>2006-06-18T00:26:17Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: updated &amp;quot;part 2: graphical sidebar&amp;quot;, with images&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
While using an editor like the one provided by EiffelStudio the actual area in a &lt;br /&gt;
text, in thsi case source code, that is actually being edited is restricted to a &lt;br /&gt;
small part of the entire document. Therefor being able to remove text sequences &lt;br /&gt;
from the display without changing the actual text sequence could increase &lt;br /&gt;
productivity. One such approach is to use folding, which is a line-based &lt;br /&gt;
technique that &amp;quot;folds&amp;quot; a block of lines into a single line that is then &lt;br /&gt;
displayed in addition to a special symbol that marks the line as actually being &lt;br /&gt;
a &amp;quot;pile&amp;quot; of lines, and which also serves as the interface to unfold the passage &lt;br /&gt;
back into it's original state (and subsequent fold/unfold operations).&lt;br /&gt;
&lt;br /&gt;
==The Goal==&lt;br /&gt;
The goal of this project was to implement folding support for the &lt;br /&gt;
EiffelStudio editor in order to be able to fold semantic blocks of code such as &lt;br /&gt;
entire features or loop blocks. The source text should however not be modified by this procedure in&lt;br /&gt;
the sense that folding or unfolding a text should not change the AST. In addition folding should also not&lt;br /&gt;
have any affects on any print output. A search for specific parts of code should also be able to enter &lt;br /&gt;
folded text areas. It is also critical that folded areas are always displayed to the user correctly. Nested folding &lt;br /&gt;
(e.g. a loop body in a feature, nested loops etc...) should also be possible.&lt;br /&gt;
&lt;br /&gt;
= ADT = &lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
FOLDING_WIDGET, TEXT_BLOCK, INTEGER, BOOLEAN, &lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
new -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
definearea: FOLDING_WIDGET X HIGHLIGHTED_TEXT_BLOCK -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
from: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
to: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
folded: FOLDING_WIDGET -&amp;gt; BOOLEAN&amp;lt;br/&amp;gt;&lt;br /&gt;
fold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt; &lt;br /&gt;
unfold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
content: FOLDING_WIDGET -&amp;gt; BLOCK&amp;lt;br/&amp;gt;&lt;br /&gt;
numberoflines: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
==Axioms==&lt;br /&gt;
&lt;br /&gt;
for all w,v :: FOLDING_WIDGET, tb :: TEXT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from(definearea(w,tb)) = firstline(tb) &lt;br /&gt;
to(definearea(w,tb) = lastline(tb) &lt;br /&gt;
content(new) = NULL &lt;br /&gt;
content(definearea(w,tb)) = tb &lt;br /&gt;
numberoflines(new) = 0 &lt;br /&gt;
numberoflines(definearea(w,tb)) = to(definearea(w,tb)) - from(definearea(w,tb)) &lt;br /&gt;
folded(new) = false &lt;br /&gt;
folded(fold(w)) = true&lt;br /&gt;
&lt;br /&gt;
=Classes=&lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
EB_FOLDING_AREA&lt;br /&gt;
Class holding all information about a single foldable area, for example&lt;br /&gt;
* starting line:INTEGER&lt;br /&gt;
* ending line:INTEGER&lt;br /&gt;
* folded:BOOLEAN&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Testing=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following testcases have been propsed:&lt;br /&gt;
- write a small application (source code to be provided by author) that includes multiple features, loops and nested loops&lt;br /&gt;
to check the correct creation and display of folded areas (ncl. nested folds).&lt;br /&gt;
&lt;br /&gt;
- print the source code of the application mentioned above with and without folding support. The output&lt;br /&gt;
should be identical.&lt;br /&gt;
&lt;br /&gt;
- compile and run both the source code with and without folding support. The applications behaviour should be identical.&lt;br /&gt;
&lt;br /&gt;
- search for specific words and text segments within folded areas of the source. The search should find such segments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TO DO=&lt;br /&gt;
&lt;br /&gt;
=== Part one :: generating the folding areas ===&lt;br /&gt;
This is the part where the data is gathered and put in to a datastructure to work on.&lt;br /&gt;
Assigned to&lt;br /&gt;
* sanakan&lt;br /&gt;
&lt;br /&gt;
====Done====&lt;br /&gt;
&amp;lt;b&amp;gt;EB_FOLDING_AREA&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
Folding points of interests are gathered from the class ast via click_tool.current_class.ast. the of features of the class include&lt;br /&gt;
* next: EB_FOLDING_AREA&lt;br /&gt;
* previous: EB_FOLDING_AREA&amp;lt;br&amp;gt;-- links to adjacent folding_areas&lt;br /&gt;
* hidden: BOOLEAN&amp;lt;br&amp;gt;-- flag to indicate if the feature is hidden or not&lt;br /&gt;
* show&lt;br /&gt;
* hide&lt;br /&gt;
* toggle_hidden_status&amp;lt;br&amp;gt;-- manipulate the hidden-flag&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;EB_FOLDING_AREA_TREE&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt; &lt;br /&gt;
EB_FOLDING_AREAs are inserted stored in an avl-tree EB_FOLDING_AREA_TREE with doubly-linked leaves. features of the class include&lt;br /&gt;
* first: EB_FOLDING_AREA&lt;br /&gt;
* last: EB_FOLDING_AREA&amp;lt;br&amp;gt;-- links to the very first and very last folding_areas&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;EB_SMART_EDITOR&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
The editor was enchanced to support the generation an maintaining of folding areas. properties and functions include&lt;br /&gt;
* folding_areas: EB_FOLDING_AREA_TREE&amp;lt;br&amp;gt;-- rooting point of the datastructure&lt;br /&gt;
* initialize_folding_areas&amp;lt;br&amp;gt;-- deletes any existing tree &amp;amp; builds it anew from the currently loaded classtext&lt;br /&gt;
* update_folding_areas&amp;lt;br&amp;gt;-- synchronizes with the shown/saved classtext. only executes if the syntax is correct.&lt;br /&gt;
&lt;br /&gt;
=== Part two :: graphical sidebar===&lt;br /&gt;
A breakpoint-sidebar like widget to display our folding-handles in.&lt;br /&gt;
Assigned to&lt;br /&gt;
* ledergec&lt;br /&gt;
* bru&lt;br /&gt;
* lord bubu&lt;br /&gt;
* salmanasar&lt;br /&gt;
* grippus&lt;br /&gt;
* thomas&lt;br /&gt;
* sanakan&lt;br /&gt;
&lt;br /&gt;
====Done====&lt;br /&gt;
* added grey bar containing EDITOR_TOKEN_FOLDING_POINTs (the thingies to click on)&lt;br /&gt;
* added menu entry to toggle folding-support (edit menu -&amp;gt; toggle folding points)&lt;br /&gt;
* added keyboard shortcut for toggling folding-support (ctrl + p)&lt;br /&gt;
* prepared interface for code-folding (see &amp;quot;part three&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
====images speak a thousand words====&lt;br /&gt;
Basic bar:&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Folding margin 1.png|code-folding: basic code-folding bar]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Code-Folding bar with line numbers bar&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Folding margin 2.png|code-folding: code-folding bar with line numbers]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Code-Folding: menu entry&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Folding_menu_1.png|code-folding: menu entry]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Part three :: text-manipulation===&lt;br /&gt;
* Perro&lt;br /&gt;
* Panarium&lt;br /&gt;
* Exception&lt;br /&gt;
&lt;br /&gt;
=== AST ===&lt;br /&gt;
To be familiar with ES' way of implementing the AST&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* (half) ADT specified&lt;br /&gt;
* some specifications&lt;br /&gt;
* generation of points/areas-of-interest (aka folding-areas)&lt;br /&gt;
* graphical representation (aka folding bar)&lt;br /&gt;
* togglabillity (sp?) of graphical bar (aka ctrl-p)&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
&lt;br /&gt;
[http://jerry.cs.uiuc.edu/~plop/plop2003/Papers/Jones-ImplementingASTs.pdf How to implement an AST?]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Visitor_pattern What's the Visitor Design-Pattern?]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unm.edu/~crowley/papers/sds/sds.html A paper about ADT's and text editors] ([http://citeseer.ist.psu.edu/rd/0%2C162545%2C1%2C0.25%2CDownload/http://citeseer.ist.psu.edu/compress/0/papers/cs/1797/http:zSzzSzwww.bolthole.comzSzjwordzSzwppaper.ps.gz/crowley98data.ps download of the file with graphics])&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui-fold es-ui-fold@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* [[User:Bayt| Bayt]] (Project Supervisor)&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;br /&gt;
* [[User:Ledergec| Ledergec]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]] (aka. David, Quality Checking)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Folding_menu_1.png&amp;diff=3562</id>
		<title>File:Folding menu 1.png</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Folding_menu_1.png&amp;diff=3562"/>
				<updated>2006-06-18T00:15:25Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: code-folding menu entry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;code-folding menu entry&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Folding_margin_3.png&amp;diff=3561</id>
		<title>File:Folding margin 3.png</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Folding_margin_3.png&amp;diff=3561"/>
				<updated>2006-06-18T00:15:10Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: code-folding bar with breakpoint bar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;code-folding bar with breakpoint bar&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Folding_margin_2.png&amp;diff=3560</id>
		<title>File:Folding margin 2.png</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Folding_margin_2.png&amp;diff=3560"/>
				<updated>2006-06-18T00:14:46Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: code-folding bar with line-numbers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;code-folding bar with line-numbers&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Folding_margin_1.png&amp;diff=3559</id>
		<title>File:Folding margin 1.png</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Folding_margin_1.png&amp;diff=3559"/>
				<updated>2006-06-18T00:14:24Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: basic code-folding bar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;basic code-folding bar&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3421</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3421"/>
				<updated>2006-06-14T01:26:00Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: job reassignment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
While using an editor like the one provided by EiffelStudio the actual area in a &lt;br /&gt;
text, in thsi case source code, that is actually being edited is restricted to a &lt;br /&gt;
small part of the entire document. Therefor being able to remove text sequences &lt;br /&gt;
from the display without changing the actual text sequence could increase &lt;br /&gt;
productivity. One such approach is to use folding, which is a line-based &lt;br /&gt;
technique that &amp;quot;folds&amp;quot; a block of lines into a single line that is then &lt;br /&gt;
displayed in addition to a special symbol that marks the line as actually being &lt;br /&gt;
a &amp;quot;pile&amp;quot; of lines, and which also serves as the interface to unfold the passage &lt;br /&gt;
back into it's original state (and subsequent fold/unfold operations).&lt;br /&gt;
&lt;br /&gt;
==The Goal==&lt;br /&gt;
The goal of this project was to implement folding support for the &lt;br /&gt;
EiffelStudio editor in order to be able to fold semantic blocks of code such as &lt;br /&gt;
entire features or loop blocks. The source text should however not be modified by this procedure in&lt;br /&gt;
the sense that folding or unfolding a text should not change the AST. In addition folding should also not&lt;br /&gt;
have any affects on any print output. A search for specific parts of code should also be able to enter &lt;br /&gt;
folded text areas. It is also critical that folded areas are always displayed to the user correctly. Nested folding &lt;br /&gt;
(e.g. a loop body in a feature, nested loops etc...) should also be possible.&lt;br /&gt;
&lt;br /&gt;
= ADT = &lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
FOLDING_WIDGET, TEXT_BLOCK, INTEGER, BOOLEAN, &lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
new -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
definearea: FOLDING_WIDGET X HIGHLIGHTED_TEXT_BLOCK -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
from: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
to: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
folded: FOLDING_WIDGET -&amp;gt; BOOLEAN&amp;lt;br/&amp;gt;&lt;br /&gt;
fold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt; &lt;br /&gt;
unfold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
content: FOLDING_WIDGET -&amp;gt; BLOCK&amp;lt;br/&amp;gt;&lt;br /&gt;
numberoflines: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
==Axioms==&lt;br /&gt;
&lt;br /&gt;
for all w,v :: FOLDING_WIDGET, tb :: TEXT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from(definearea(w,tb)) = firstline(tb) &lt;br /&gt;
to(definearea(w,tb) = lastline(tb) &lt;br /&gt;
content(new) = NULL &lt;br /&gt;
content(definearea(w,tb)) = tb &lt;br /&gt;
numberoflines(new) = 0 &lt;br /&gt;
numberoflines(definearea(w,tb)) = to(definearea(w,tb)) - from(definearea(w,tb)) &lt;br /&gt;
folded(new) = false &lt;br /&gt;
folded(fold(w)) = true&lt;br /&gt;
&lt;br /&gt;
=Classes=&lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
EB_FOLDING_AREA&lt;br /&gt;
Class holding all information about a single foldable area, for example&lt;br /&gt;
* starting line:INTEGER&lt;br /&gt;
* ending line:INTEGER&lt;br /&gt;
* folded:BOOLEAN&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Testing=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following testcases have been propsed:&lt;br /&gt;
- write a small application (source code to be provided by author) that includes multiple features, loops and nested loops&lt;br /&gt;
to check the correct creation and display of folded areas (ncl. nested folds).&lt;br /&gt;
&lt;br /&gt;
- print the source code of the application mentioned above with and without folding support. The output&lt;br /&gt;
should be identical.&lt;br /&gt;
&lt;br /&gt;
- compile and run both the source code with and without folding support. The applications behaviour should be identical.&lt;br /&gt;
&lt;br /&gt;
- search for specific words and text segments within folded areas of the source. The search should find such segments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TO DO=&lt;br /&gt;
&lt;br /&gt;
=== Part one :: generating the folding areas ===&lt;br /&gt;
This is the part where the data is gathered and put in to a datastructure to work on.&lt;br /&gt;
Assigned to&lt;br /&gt;
* sanakan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Done====&lt;br /&gt;
&amp;lt;b&amp;gt;EB_FOLDING_AREA&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
Folding points of interests are gathered from the class ast via click_tool.current_class.ast. the of features of the class include&lt;br /&gt;
* next: EB_FOLDING_AREA&lt;br /&gt;
* previous: EB_FOLDING_AREA&amp;lt;br&amp;gt;-- links to adjacent folding_areas&lt;br /&gt;
* hidden: BOOLEAN&amp;lt;br&amp;gt;-- flag to indicate if the feature is hidden or not&lt;br /&gt;
* show&lt;br /&gt;
* hide&lt;br /&gt;
* toggle_hidden_status&amp;lt;br&amp;gt;-- manipulate the hidden-flag&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;EB_FOLDING_AREA_TREE&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt; &lt;br /&gt;
EB_FOLDING_AREAs are inserted stored in an avl-tree EB_FOLDING_AREA_TREE with doubly-linked leaves. features of the class include&lt;br /&gt;
* first: EB_FOLDING_AREA&lt;br /&gt;
* last: EB_FOLDING_AREA&amp;lt;br&amp;gt;-- links to the very first and very last folding_areas&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;EB_SMART_EDITOR&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
The editor was enchanced to support the generation an maintaining of folding areas. properties and functions include&lt;br /&gt;
* folding_areas: EB_FOLDING_AREA_TREE&amp;lt;br&amp;gt;-- rooting point of the datastructure&lt;br /&gt;
* initialize_folding_areas&amp;lt;br&amp;gt;-- deletes any existing tree &amp;amp; builds it anew from the currently loaded classtext&lt;br /&gt;
* update_folding_areas&amp;lt;br&amp;gt;-- synchronizes with the shown/saved classtext. only executes if the syntax is correct.&lt;br /&gt;
&lt;br /&gt;
=== Part two :: graphical sidebar===&lt;br /&gt;
A breakpoint-sidebar like widget to display our folding-handles in.&lt;br /&gt;
Assigned to&lt;br /&gt;
* ledergec&lt;br /&gt;
* bru&lt;br /&gt;
* lord bubu&lt;br /&gt;
* salmanasar&lt;br /&gt;
* grippus&lt;br /&gt;
* thomas&lt;br /&gt;
* sanakan&lt;br /&gt;
&lt;br /&gt;
=== Part three :: text-manipulation===&lt;br /&gt;
* Perro&lt;br /&gt;
* Panarium&lt;br /&gt;
* Exception&lt;br /&gt;
&lt;br /&gt;
=== AST ===&lt;br /&gt;
To be familiar with ES' way of implementing the AST&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* (half) ADT specified&lt;br /&gt;
* some specifications&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
&lt;br /&gt;
[http://jerry.cs.uiuc.edu/~plop/plop2003/Papers/Jones-ImplementingASTs.pdf How to implement an AST?]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Visitor_pattern What's the Visitor Design-Pattern?]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unm.edu/~crowley/papers/sds/sds.html A paper about ADT's and text editors] ([http://citeseer.ist.psu.edu/rd/0%2C162545%2C1%2C0.25%2CDownload/http://citeseer.ist.psu.edu/compress/0/papers/cs/1797/http:zSzzSzwww.bolthole.comzSzjwordzSzwppaper.ps.gz/crowley98data.ps download of the file with graphics])&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui-fold es-ui-fold@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* [[User:Bayt| Bayt]] (Project Supervisor)&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;br /&gt;
* [[User:Ledergec| Ledergec]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]] (aka. David, Quality Checking)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3420</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3420"/>
				<updated>2006-06-14T01:22:30Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: generation and maintaining of folding-areas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
While using an editor like the one provided by EiffelStudio the actual area in a &lt;br /&gt;
text, in thsi case source code, that is actually being edited is restricted to a &lt;br /&gt;
small part of the entire document. Therefor being able to remove text sequences &lt;br /&gt;
from the display without changing the actual text sequence could increase &lt;br /&gt;
productivity. One such approach is to use folding, which is a line-based &lt;br /&gt;
technique that &amp;quot;folds&amp;quot; a block of lines into a single line that is then &lt;br /&gt;
displayed in addition to a special symbol that marks the line as actually being &lt;br /&gt;
a &amp;quot;pile&amp;quot; of lines, and which also serves as the interface to unfold the passage &lt;br /&gt;
back into it's original state (and subsequent fold/unfold operations).&lt;br /&gt;
&lt;br /&gt;
==The Goal==&lt;br /&gt;
The goal of this project was to implement folding support for the &lt;br /&gt;
EiffelStudio editor in order to be able to fold semantic blocks of code such as &lt;br /&gt;
entire features or loop blocks. The source text should however not be modified by this procedure in&lt;br /&gt;
the sense that folding or unfolding a text should not change the AST. In addition folding should also not&lt;br /&gt;
have any affects on any print output. A search for specific parts of code should also be able to enter &lt;br /&gt;
folded text areas. It is also critical that folded areas are always displayed to the user correctly. Nested folding &lt;br /&gt;
(e.g. a loop body in a feature, nested loops etc...) should also be possible.&lt;br /&gt;
&lt;br /&gt;
= ADT = &lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
FOLDING_WIDGET, TEXT_BLOCK, INTEGER, BOOLEAN, &lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
new -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
definearea: FOLDING_WIDGET X HIGHLIGHTED_TEXT_BLOCK -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
from: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
to: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
folded: FOLDING_WIDGET -&amp;gt; BOOLEAN&amp;lt;br/&amp;gt;&lt;br /&gt;
fold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt; &lt;br /&gt;
unfold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
content: FOLDING_WIDGET -&amp;gt; BLOCK&amp;lt;br/&amp;gt;&lt;br /&gt;
numberoflines: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
==Axioms==&lt;br /&gt;
&lt;br /&gt;
for all w,v :: FOLDING_WIDGET, tb :: TEXT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from(definearea(w,tb)) = firstline(tb) &lt;br /&gt;
to(definearea(w,tb) = lastline(tb) &lt;br /&gt;
content(new) = NULL &lt;br /&gt;
content(definearea(w,tb)) = tb &lt;br /&gt;
numberoflines(new) = 0 &lt;br /&gt;
numberoflines(definearea(w,tb)) = to(definearea(w,tb)) - from(definearea(w,tb)) &lt;br /&gt;
folded(new) = false &lt;br /&gt;
folded(fold(w)) = true&lt;br /&gt;
&lt;br /&gt;
=Classes=&lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
EB_FOLDING_AREA&lt;br /&gt;
Class holding all information about a single foldable area, for example&lt;br /&gt;
* starting line:INTEGER&lt;br /&gt;
* ending line:INTEGER&lt;br /&gt;
* folded:BOOLEAN&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Testing=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following testcases have been propsed:&lt;br /&gt;
- write a small application (source code to be provided by author) that includes multiple features, loops and nested loops&lt;br /&gt;
to check the correct creation and display of folded areas (ncl. nested folds).&lt;br /&gt;
&lt;br /&gt;
- print the source code of the application mentioned above with and without folding support. The output&lt;br /&gt;
should be identical.&lt;br /&gt;
&lt;br /&gt;
- compile and run both the source code with and without folding support. The applications behaviour should be identical.&lt;br /&gt;
&lt;br /&gt;
- search for specific words and text segments within folded areas of the source. The search should find such segments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TO DO=&lt;br /&gt;
&lt;br /&gt;
=== Part one :: generating the folding areas ===&lt;br /&gt;
This is the part where the data is gathered and put in to a datastructure to work on.&lt;br /&gt;
Assigned to&lt;br /&gt;
* salmanasar&lt;br /&gt;
* grippus&lt;br /&gt;
* thomas&lt;br /&gt;
* sanakan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Done====&lt;br /&gt;
&amp;lt;b&amp;gt;EB_FOLDING_AREA&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
Folding points of interests are gathered from the class ast via click_tool.current_class.ast. the of features of the class include&lt;br /&gt;
* next: EB_FOLDING_AREA&lt;br /&gt;
* previous: EB_FOLDING_AREA&amp;lt;br&amp;gt;-- links to adjacent folding_areas&lt;br /&gt;
* hidden: BOOLEAN&amp;lt;br&amp;gt;-- flag to indicate if the feature is hidden or not&lt;br /&gt;
* show&lt;br /&gt;
* hide&lt;br /&gt;
* toggle_hidden_status&amp;lt;br&amp;gt;-- manipulate the hidden-flag&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;EB_FOLDING_AREA_TREE&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt; &lt;br /&gt;
EB_FOLDING_AREAs are inserted stored in an avl-tree EB_FOLDING_AREA_TREE with doubly-linked leaves. features of the class include&lt;br /&gt;
* first: EB_FOLDING_AREA&lt;br /&gt;
* last: EB_FOLDING_AREA&amp;lt;br&amp;gt;-- links to the very first and very last folding_areas&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;EB_SMART_EDITOR&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
The editor was enchanced to support the generation an maintaining of folding areas. properties and functions include&lt;br /&gt;
* folding_areas: EB_FOLDING_AREA_TREE&amp;lt;br&amp;gt;-- rooting point of the datastructure&lt;br /&gt;
* initialize_folding_areas&amp;lt;br&amp;gt;-- deletes any existing tree &amp;amp; builds it anew from the currently loaded classtext&lt;br /&gt;
* update_folding_areas&amp;lt;br&amp;gt;-- synchronizes with the shown/saved classtext. only executes if the syntax is correct.&lt;br /&gt;
&lt;br /&gt;
=== Part two :: graphical sidebar===&lt;br /&gt;
A breakpoint-sidebar like widget to display our folding-handles in.&lt;br /&gt;
Assigned to&lt;br /&gt;
* ledergec&lt;br /&gt;
* bru&lt;br /&gt;
* lord bubu&lt;br /&gt;
&lt;br /&gt;
=== Part three :: text-manipulation===&lt;br /&gt;
* Perro&lt;br /&gt;
* Panarium&lt;br /&gt;
* Exception&lt;br /&gt;
&lt;br /&gt;
=== AST ===&lt;br /&gt;
To be familiar with ES' way of implementing the AST&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* (half) ADT specified&lt;br /&gt;
* some specifications&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
&lt;br /&gt;
[http://jerry.cs.uiuc.edu/~plop/plop2003/Papers/Jones-ImplementingASTs.pdf How to implement an AST?]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Visitor_pattern What's the Visitor Design-Pattern?]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unm.edu/~crowley/papers/sds/sds.html A paper about ADT's and text editors] ([http://citeseer.ist.psu.edu/rd/0%2C162545%2C1%2C0.25%2CDownload/http://citeseer.ist.psu.edu/compress/0/papers/cs/1797/http:zSzzSzwww.bolthole.comzSzjwordzSzwppaper.ps.gz/crowley98data.ps download of the file with graphics])&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui-fold es-ui-fold@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* [[User:Bayt| Bayt]] (Project Supervisor)&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;br /&gt;
* [[User:Ledergec| Ledergec]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]] (aka. David, Quality Checking)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3308</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3308"/>
				<updated>2006-06-10T23:53:57Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: /* Part one :: generating the folding areas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
While using an editor like the one provided by EiffelStudio the actual area in a &lt;br /&gt;
text, in thsi case source code, that is actually being edited is restricted to a &lt;br /&gt;
small part of the entire document. Therefor being able to remove text sequences &lt;br /&gt;
from the display without changing the actual text sequence could increase &lt;br /&gt;
productivity. One such approach is to use folding, which is a line-based &lt;br /&gt;
technique that &amp;quot;folds&amp;quot; a block of lines into a single line that is then &lt;br /&gt;
displayed in addition to a special symbol that marks the line as actually being &lt;br /&gt;
a &amp;quot;pile&amp;quot; of lines, and which also serves as the interface to unfold the passage &lt;br /&gt;
back into it's original state (and subsequent fold/unfold operations).&lt;br /&gt;
&lt;br /&gt;
==The Goal==&lt;br /&gt;
The goal of this project was to implement folding support for the &lt;br /&gt;
EiffelStudio editor in order to be able to fold semantic blocks of code such as &lt;br /&gt;
entire features or loop blocks. The source text should however not be modified by this procedure in&lt;br /&gt;
the sense that folding or unfolding a text should not change the AST. In addition folding should also not&lt;br /&gt;
have any affects on any print output. A search for specific parts of code should also be able to enter &lt;br /&gt;
folded text areas. It is also critical that folded areas are always displayed to the user correctly. Nested folding &lt;br /&gt;
(e.g. a loop body in a feature, nested loops etc...) should also be possible.&lt;br /&gt;
&lt;br /&gt;
= ADT = &lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
FOLDING_WIDGET, TEXT_BLOCK, INTEGER, BOOLEAN, &lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
new -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
definearea: FOLDING_WIDGET X HIGHLIGHTED_TEXT_BLOCK -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
from: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
to: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
folded: FOLDING_WIDGET -&amp;gt; BOOLEAN&amp;lt;br/&amp;gt;&lt;br /&gt;
fold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt; &lt;br /&gt;
unfold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
content: FOLDING_WIDGET -&amp;gt; BLOCK&amp;lt;br/&amp;gt;&lt;br /&gt;
numberoflines: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
==Axioms==&lt;br /&gt;
&lt;br /&gt;
for all w,v :: FOLDING_WIDGET, tb :: TEXT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from(definearea(w,tb)) = firstline(tb) &lt;br /&gt;
to(definearea(w,tb) = lastline(tb) &lt;br /&gt;
content(new) = NULL &lt;br /&gt;
content(definearea(w,tb)) = tb &lt;br /&gt;
numberoflines(new) = 0 &lt;br /&gt;
numberoflines(definearea(w,tb)) = to(definearea(w,tb)) - from(definearea(w,tb)) &lt;br /&gt;
folded(new) = false &lt;br /&gt;
folded(fold(w)) = true&lt;br /&gt;
&lt;br /&gt;
=Classes=&lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
EB_FOLDING_AREA&lt;br /&gt;
Class holding all information about a single foldable area, for example&lt;br /&gt;
* starting line:INTEGER&lt;br /&gt;
* ending line:INTEGER&lt;br /&gt;
* folded:BOOLEAN&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Testing=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following testcases have been propsed:&lt;br /&gt;
- write a small application (source code to be provided by author) that includes multiple features, loops and nested loops&lt;br /&gt;
to check the correct creation and display of folded areas (ncl. nested folds).&lt;br /&gt;
&lt;br /&gt;
- print the source code of the application mentioned above with and without folding support. The output&lt;br /&gt;
should be identical.&lt;br /&gt;
&lt;br /&gt;
- compile and run both the source code with and without folding support. The applications behaviour should be identical.&lt;br /&gt;
&lt;br /&gt;
- search for specific words and text segments within folded areas of the source. The search should find such segments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TO DO=&lt;br /&gt;
&lt;br /&gt;
=== Part one :: generating the folding areas ===&lt;br /&gt;
This is the part where the data is gathered and put in to a datastructure to work on.&lt;br /&gt;
Assigned to&lt;br /&gt;
* salmanasar&lt;br /&gt;
* grippus&lt;br /&gt;
* thomas&lt;br /&gt;
* sanakan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Done====&lt;br /&gt;
* EB_FOLDING_AREAs are gathered from the class ast via click_tool.current_class.ast&lt;br /&gt;
* EB_FOLDING_AREAs are inserted stored in an avl-tree EB_FOLDING_AREA_TREE with doubly-linked leaves. features of EB_FOLDING_AREA_TREE include&lt;br /&gt;
** first&lt;br /&gt;
** last&lt;br /&gt;
** item(k: key)&lt;br /&gt;
&lt;br /&gt;
=== Part two :: graphical sidebar===&lt;br /&gt;
A breakpoint-sidebar like widget to display our folding-handles in.&lt;br /&gt;
Assigned to&lt;br /&gt;
* ledergec&lt;br /&gt;
* bru&lt;br /&gt;
* lord bubu&lt;br /&gt;
&lt;br /&gt;
=== Part three :: text-manipulation===&lt;br /&gt;
* Perro&lt;br /&gt;
* Panarium&lt;br /&gt;
* Exception&lt;br /&gt;
&lt;br /&gt;
=== AST ===&lt;br /&gt;
To be familiar with ES' way of implementing the AST&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* (half) ADT specified&lt;br /&gt;
* some specifications&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
&lt;br /&gt;
[http://jerry.cs.uiuc.edu/~plop/plop2003/Papers/Jones-ImplementingASTs.pdf How to implement an AST?]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Visitor_pattern What's the Visitor Design-Pattern?]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unm.edu/~crowley/papers/sds/sds.html A paper about ADT's and text editors] ([http://citeseer.ist.psu.edu/rd/0%2C162545%2C1%2C0.25%2CDownload/http://citeseer.ist.psu.edu/compress/0/papers/cs/1797/http:zSzzSzwww.bolthole.comzSzjwordzSzwppaper.ps.gz/crowley98data.ps download of the file with graphics])&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui-fold es-ui-fold@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* [[User:Bayt| Bayt]] (Project Supervisor)&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;br /&gt;
* [[User:Ledergec| Ledergec]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]] (aka. David, Quality Checking)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3213</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3213"/>
				<updated>2006-06-06T16:55:34Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: /* TO DO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
While using an editor like the one provided by EiffelStudio the actual area in a &lt;br /&gt;
text, in thsi case source code, that is actually being edited is restricted to a &lt;br /&gt;
small part of the entire document. Therefor being able to remove text sequences &lt;br /&gt;
from the display without changing the actual text sequence could increase &lt;br /&gt;
productivity. One such approach is to use folding, which is a line-based &lt;br /&gt;
technique that &amp;quot;folds&amp;quot; a block of lines into a single line that is then &lt;br /&gt;
displayed in addition to a special symbol that marks the line as actually being &lt;br /&gt;
a &amp;quot;pile&amp;quot; of lines, and which also serves as the interface to unfold the passage &lt;br /&gt;
back into it's original state (and subsequent fold/unfold operations).&lt;br /&gt;
&lt;br /&gt;
==The Goal==&lt;br /&gt;
The goal of this project was to implement folding support for the &lt;br /&gt;
EiffelStudio editor in order to be able to fold semantic blocks of code such as &lt;br /&gt;
entire features or loop blocks. The source text should however not be modified by this procedure in&lt;br /&gt;
the sense that folding or unfolding a text should not change the AST. In addition folding should also not&lt;br /&gt;
have any affects on any print output. A search for specific parts of code should also be able to enter &lt;br /&gt;
folded text areas. It is also critical that folded areas are always displayed to the user correctly. Nested folding &lt;br /&gt;
(e.g. a loop body in a feature, nested loops etc...) should also be possible.&lt;br /&gt;
&lt;br /&gt;
= ADT = &lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
FOLDING_WIDGET, TEXT_BLOCK, INTEGER, BOOLEAN, &lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
new -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
definearea: FOLDING_WIDGET X HIGHLIGHTED_TEXT_BLOCK -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
from: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
to: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
folded: FOLDING_WIDGET -&amp;gt; BOOLEAN&amp;lt;br/&amp;gt;&lt;br /&gt;
fold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt; &lt;br /&gt;
unfold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
content: FOLDING_WIDGET -&amp;gt; BLOCK&amp;lt;br/&amp;gt;&lt;br /&gt;
numberoflines: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
==Axioms==&lt;br /&gt;
&lt;br /&gt;
for all w,v :: FOLDING_WIDGET, tb :: TEXT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from(definearea(w,tb)) = firstline(tb) &lt;br /&gt;
to(definearea(w,tb) = lastline(tb) &lt;br /&gt;
content(new) = NULL &lt;br /&gt;
content(definearea(w,tb)) = tb &lt;br /&gt;
numberoflines(new) = 0 &lt;br /&gt;
numberoflines(definearea(w,tb)) = to(definearea(w,tb)) - from(definearea(w,tb)) &lt;br /&gt;
folded(new) = false &lt;br /&gt;
folded(fold(w)) = true&lt;br /&gt;
&lt;br /&gt;
=Classes=&lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
EB_FOLDING_AREA&lt;br /&gt;
Class holding all information about a single foldable area, for example&lt;br /&gt;
* starting line:INTEGER&lt;br /&gt;
* ending line:INTEGER&lt;br /&gt;
* folded:BOOLEAN&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Testing=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following testcases have been propsed:&lt;br /&gt;
- write a small application (source code to be provided by author) that includes multiple features, loops and nested loops&lt;br /&gt;
to check the correct creation and display of folded areas (ncl. nested folds).&lt;br /&gt;
&lt;br /&gt;
- print the source code of the application mentioned above with and without folding support. The output&lt;br /&gt;
should be identical.&lt;br /&gt;
&lt;br /&gt;
- compile and run both the source code with and without folding support. The applications behaviour should be identical.&lt;br /&gt;
&lt;br /&gt;
- search for specific words and text segments within folded areas of the source. The search should find such segments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TO DO=&lt;br /&gt;
&lt;br /&gt;
=== Part one :: generating the folding areas ===&lt;br /&gt;
This is the part where the data is gathered and put in to a datastructure to work on.&lt;br /&gt;
Assigned to&lt;br /&gt;
* salmanasar&lt;br /&gt;
* grippus&lt;br /&gt;
* thomas&lt;br /&gt;
* sanakan&lt;br /&gt;
&lt;br /&gt;
=== Part two :: graphical sidebar===&lt;br /&gt;
A breakpoint-sidebar like widget to display our folding-handles in.&lt;br /&gt;
Assigned to&lt;br /&gt;
* ledergec&lt;br /&gt;
* bru&lt;br /&gt;
* lord bubu&lt;br /&gt;
&lt;br /&gt;
=== Part three :: text-manipulation===&lt;br /&gt;
* Perro&lt;br /&gt;
* Panarium&lt;br /&gt;
* Exception&lt;br /&gt;
&lt;br /&gt;
=== AST ===&lt;br /&gt;
To be familiar with ES' way of implementing the AST&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* (half) ADT specified&lt;br /&gt;
* some specifications&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
&lt;br /&gt;
[http://jerry.cs.uiuc.edu/~plop/plop2003/Papers/Jones-ImplementingASTs.pdf How to implement an AST?]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Visitor_pattern What's the Visitor Design-Pattern?]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unm.edu/~crowley/papers/sds/sds.html A paper about ADT's and text editors] ([http://citeseer.ist.psu.edu/rd/0%2C162545%2C1%2C0.25%2CDownload/http://citeseer.ist.psu.edu/compress/0/papers/cs/1797/http:zSzzSzwww.bolthole.comzSzjwordzSzwppaper.ps.gz/crowley98data.ps download of the file with graphics])&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui-fold es-ui-fold@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* [[User:Bayt| Bayt]] (Project Supervisor)&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;br /&gt;
* [[User:Ledergec| Ledergec]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]] (aka. David, Quality Checking)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3212</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3212"/>
				<updated>2006-06-06T16:48:16Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: /* Classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
While using an editor like the one provided by EiffelStudio the actual area in a &lt;br /&gt;
text, in thsi case source code, that is actually being edited is restricted to a &lt;br /&gt;
small part of the entire document. Therefor being able to remove text sequences &lt;br /&gt;
from the display without changing the actual text sequence could increase &lt;br /&gt;
productivity. One such approach is to use folding, which is a line-based &lt;br /&gt;
technique that &amp;quot;folds&amp;quot; a block of lines into a single line that is then &lt;br /&gt;
displayed in addition to a special symbol that marks the line as actually being &lt;br /&gt;
a &amp;quot;pile&amp;quot; of lines, and which also serves as the interface to unfold the passage &lt;br /&gt;
back into it's original state (and subsequent fold/unfold operations).&lt;br /&gt;
&lt;br /&gt;
==The Goal==&lt;br /&gt;
The goal of this project was to implement folding support for the &lt;br /&gt;
EiffelStudio editor in order to be able to fold semantic blocks of code such as &lt;br /&gt;
entire features or loop blocks. The source text should however not be modified by this procedure in&lt;br /&gt;
the sense that folding or unfolding a text should not change the AST. In addition folding should also not&lt;br /&gt;
have any affects on any print output. A search for specific parts of code should also be able to enter &lt;br /&gt;
folded text areas. It is also critical that folded areas are always displayed to the user correctly. Nested folding &lt;br /&gt;
(e.g. a loop body in a feature, nested loops etc...) should also be possible.&lt;br /&gt;
&lt;br /&gt;
= ADT = &lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
FOLDING_WIDGET, TEXT_BLOCK, INTEGER, BOOLEAN, &lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
new -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
definearea: FOLDING_WIDGET X HIGHLIGHTED_TEXT_BLOCK -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
from: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
to: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
folded: FOLDING_WIDGET -&amp;gt; BOOLEAN&amp;lt;br/&amp;gt;&lt;br /&gt;
fold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt; &lt;br /&gt;
unfold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
content: FOLDING_WIDGET -&amp;gt; BLOCK&amp;lt;br/&amp;gt;&lt;br /&gt;
numberoflines: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
==Axioms==&lt;br /&gt;
&lt;br /&gt;
for all w,v :: FOLDING_WIDGET, tb :: TEXT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from(definearea(w,tb)) = firstline(tb) &lt;br /&gt;
to(definearea(w,tb) = lastline(tb) &lt;br /&gt;
content(new) = NULL &lt;br /&gt;
content(definearea(w,tb)) = tb &lt;br /&gt;
numberoflines(new) = 0 &lt;br /&gt;
numberoflines(definearea(w,tb)) = to(definearea(w,tb)) - from(definearea(w,tb)) &lt;br /&gt;
folded(new) = false &lt;br /&gt;
folded(fold(w)) = true&lt;br /&gt;
&lt;br /&gt;
=Classes=&lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
EB_FOLDING_AREA&lt;br /&gt;
Class holding all information about a single foldable area, for example&lt;br /&gt;
* starting line:INTEGER&lt;br /&gt;
* ending line:INTEGER&lt;br /&gt;
* folded:BOOLEAN&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Testing=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following testcases have been propsed:&lt;br /&gt;
- write a small application (source code to be provided by author) that includes multiple features, loops and nested loops&lt;br /&gt;
to check the correct creation and display of folded areas (ncl. nested folds).&lt;br /&gt;
&lt;br /&gt;
- print the source code of the application mentioned above with and without folding support. The output&lt;br /&gt;
should be identical.&lt;br /&gt;
&lt;br /&gt;
- compile and run both the source code with and without folding support. The applications behaviour should be identical.&lt;br /&gt;
&lt;br /&gt;
- search for specific words and text segments within folded areas of the source. The search should find such segments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TO DO=&lt;br /&gt;
* be familiar with ES' way of implementing the AST&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* (half) ADT specified&lt;br /&gt;
* some specifications&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
&lt;br /&gt;
[http://jerry.cs.uiuc.edu/~plop/plop2003/Papers/Jones-ImplementingASTs.pdf How to implement an AST?]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Visitor_pattern What's the Visitor Design-Pattern?]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unm.edu/~crowley/papers/sds/sds.html A paper about ADT's and text editors] ([http://citeseer.ist.psu.edu/rd/0%2C162545%2C1%2C0.25%2CDownload/http://citeseer.ist.psu.edu/compress/0/papers/cs/1797/http:zSzzSzwww.bolthole.comzSzjwordzSzwppaper.ps.gz/crowley98data.ps download of the file with graphics])&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui-fold es-ui-fold@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* [[User:Bayt| Bayt]] (Project Supervisor)&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;br /&gt;
* [[User:Ledergec| Ledergec]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]] (aka. David, Quality Checking)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3031</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3031"/>
				<updated>2006-05-24T20:11:45Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: link moved from talk page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
While using an editor like the one provided by EiffelStudio the actual area in a &lt;br /&gt;
text, in thsi case source code, that is actually being edited is restricted to a &lt;br /&gt;
small part of the entire document. Therefor being able to remove text sequences &lt;br /&gt;
from the display without changing the actual text sequence could increase &lt;br /&gt;
productivity. One such approach is to use folding, which is a line-based &lt;br /&gt;
technique that &amp;quot;folds&amp;quot; a block of lines into a single line that is then &lt;br /&gt;
displayed in addition to a special symbol that marks the line as actually being &lt;br /&gt;
a &amp;quot;pile&amp;quot; of lines, and which also serves as the interface to unfold the passage &lt;br /&gt;
back into it's original state (and subsequent fold/unfold operations).&lt;br /&gt;
&lt;br /&gt;
==The Goal==&lt;br /&gt;
The goal of this project was to implement folding support for the &lt;br /&gt;
EiffelStudio editor in order to be able to fold semantic blocks of code such as &lt;br /&gt;
entire features or loop blocks. The source text should however not be modified by this procedure in&lt;br /&gt;
the sense that folding or unfolding a text should not change the AST. In addition folding should also not&lt;br /&gt;
have any affects on any print output. A search for specific parts of code should also be able to enter &lt;br /&gt;
folded text areas. It is also critical that folded areas are always displayed to the user correctly. Nested folding &lt;br /&gt;
(e.g. a loop body in a feature, nested loops etc...) should also be possible.&lt;br /&gt;
&lt;br /&gt;
= ADT = &lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
FOLDING_WIDGET, TEXT_BLOCK, INTEGER, BOOLEAN, &lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
new -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
definearea: FOLDING_WIDGET X HIGHLIGHTED_TEXT_BLOCK -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
from: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
to: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
folded: FOLDING_WIDGET -&amp;gt; BOOLEAN&amp;lt;br/&amp;gt;&lt;br /&gt;
fold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt; &lt;br /&gt;
unfold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
content: FOLDING_WIDGET -&amp;gt; BLOCK&amp;lt;br/&amp;gt;&lt;br /&gt;
numberoflines: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
==Axioms==&lt;br /&gt;
&lt;br /&gt;
for all w,v :: FOLDING_WIDGET, tb :: TEXT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from(definearea(w,tb)) = firstline(tb) &lt;br /&gt;
to(definearea(w,tb) = lastline(tb) &lt;br /&gt;
content(new) = NULL &lt;br /&gt;
content(definearea(w,tb)) = tb &lt;br /&gt;
numberoflines(new) = 0 &lt;br /&gt;
numberoflines(definearea(w,tb)) = to(definearea(w,tb)) - from(definearea(w,tb)) &lt;br /&gt;
folded(new) = false &lt;br /&gt;
folded(fold(w)) = true&lt;br /&gt;
&lt;br /&gt;
=Classes=&lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
FOLDING_CONTROLLER&lt;br /&gt;
FOLDING_WIDGET&lt;br /&gt;
&lt;br /&gt;
=Testing=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following testcases have been propsed:&lt;br /&gt;
- write a small application (source code to be provided by author) that includes multiple features, loops and nested loops&lt;br /&gt;
to check the correct creation and display of folded areas (ncl. nested folds).&lt;br /&gt;
&lt;br /&gt;
- print the source code of the application mentioned above with and without folding support. The output&lt;br /&gt;
should be identical.&lt;br /&gt;
&lt;br /&gt;
- compile and run both the source code with and without folding support. The applications behaviour should be identical.&lt;br /&gt;
&lt;br /&gt;
- search for specific words and text segments within folded areas of the source. The search should find such segments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TO DO=&lt;br /&gt;
* be familiar with ES' way of implementing the AST&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* (half) ADT specified&lt;br /&gt;
* some specifications&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
&lt;br /&gt;
[http://jerry.cs.uiuc.edu/~plop/plop2003/Papers/Jones-ImplementingASTs.pdf How to implement an AST?]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Visitor_pattern What's the Visitor Design-Pattern?]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unm.edu/~crowley/papers/sds/sds.html A paper about ADT's and text editors] ([http://citeseer.ist.psu.edu/rd/0%2C162545%2C1%2C0.25%2CDownload/http://citeseer.ist.psu.edu/compress/0/papers/cs/1797/http:zSzzSzwww.bolthole.comzSzjwordzSzwppaper.ps.gz/crowley98data.ps download of the file with graphics])&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui-fold es-ui-fold@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* [[User:Bayt| Bayt]] (Project Supervisor)&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;br /&gt;
* [[User:Ledergec| Ledergec]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]] (aka. David, Quality Checking)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3030</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3030"/>
				<updated>2006-05-24T20:09:04Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: formating of &amp;quot;features&amp;quot; corrected&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
While using an editor like the one provided by EiffelStudio the actual area in a &lt;br /&gt;
text, in thsi case source code, that is actually being edited is restricted to a &lt;br /&gt;
small part of the entire document. Therefor being able to remove text sequences &lt;br /&gt;
from the display without changing the actual text sequence could increase &lt;br /&gt;
productivity. One such approach is to use folding, which is a line-based &lt;br /&gt;
technique that &amp;quot;folds&amp;quot; a block of lines into a single line that is then &lt;br /&gt;
displayed in addition to a special symbol that marks the line as actually being &lt;br /&gt;
a &amp;quot;pile&amp;quot; of lines, and which also serves as the interface to unfold the passage &lt;br /&gt;
back into it's original state (and subsequent fold/unfold operations).&lt;br /&gt;
&lt;br /&gt;
==The Goal==&lt;br /&gt;
The goal of this project was to implement folding support for the &lt;br /&gt;
EiffelStudio editor in order to be able to fold semantic blocks of code such as &lt;br /&gt;
entire features or loop blocks. The source text should however not be modified by this procedure in&lt;br /&gt;
the sense that folding or unfolding a text should not change the AST. In addition folding should also not&lt;br /&gt;
have any affects on any print output. A search for specific parts of code should also be able to enter &lt;br /&gt;
folded text areas. It is also critical that folded areas are always displayed to the user correctly. Nested folding &lt;br /&gt;
(e.g. a loop body in a feature, nested loops etc...) should also be possible.&lt;br /&gt;
&lt;br /&gt;
= ADT = &lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
FOLDING_WIDGET, TEXT_BLOCK, INTEGER, BOOLEAN, &lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
new -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
definearea: FOLDING_WIDGET X HIGHLIGHTED_TEXT_BLOCK -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
from: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
to: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
folded: FOLDING_WIDGET -&amp;gt; BOOLEAN&amp;lt;br/&amp;gt;&lt;br /&gt;
fold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt; &lt;br /&gt;
unfold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET&amp;lt;br/&amp;gt;&lt;br /&gt;
content: FOLDING_WIDGET -&amp;gt; BLOCK&amp;lt;br/&amp;gt;&lt;br /&gt;
numberoflines: FOLDING_WIDGET -&amp;gt; INTEGER&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
==Axioms==&lt;br /&gt;
&lt;br /&gt;
for all w,v :: FOLDING_WIDGET, tb :: TEXT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from(definearea(w,tb)) = firstline(tb) &lt;br /&gt;
to(definearea(w,tb) = lastline(tb) &lt;br /&gt;
content(new) = NULL &lt;br /&gt;
content(definearea(w,tb)) = tb &lt;br /&gt;
numberoflines(new) = 0 &lt;br /&gt;
numberoflines(definearea(w,tb)) = to(definearea(w,tb)) - from(definearea(w,tb)) &lt;br /&gt;
folded(new) = false &lt;br /&gt;
folded(fold(w)) = true&lt;br /&gt;
&lt;br /&gt;
=Classes=&lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
FOLDING_CONTROLLER&lt;br /&gt;
FOLDING_WIDGET&lt;br /&gt;
&lt;br /&gt;
=Testing=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following testcases have been propsed:&lt;br /&gt;
- write a small application (source code to be provided by author) that includes multiple features, loops and nested loops&lt;br /&gt;
to check the correct creation and display of folded areas (ncl. nested folds).&lt;br /&gt;
&lt;br /&gt;
- print the source code of the application mentioned above with and without folding support. The output&lt;br /&gt;
should be identical.&lt;br /&gt;
&lt;br /&gt;
- compile and run both the source code with and without folding support. The applications behaviour should be identical.&lt;br /&gt;
&lt;br /&gt;
- search for specific words and text segments within folded areas of the source. The search should find such segments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TO DO=&lt;br /&gt;
* be familiar with ES' way of implementing the AST&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* (half) ADT specified&lt;br /&gt;
* some specifications&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
&lt;br /&gt;
[http://jerry.cs.uiuc.edu/~plop/plop2003/Papers/Jones-ImplementingASTs.pdf How to implement an AST?]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Visitor_pattern What's the Visitor Design-Pattern?]&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui-fold es-ui-fold@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* [[User:Bayt| Bayt]] (Project Supervisor)&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;br /&gt;
* [[User:Ledergec| Ledergec]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]] (aka. David, Quality Checking)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3009</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=3009"/>
				<updated>2006-05-23T16:11:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: overview, adt &amp;amp; testing added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
While using an editor like the one provided by EiffelStudio the actual area in a &lt;br /&gt;
text, in thsi case source code, that is actually being edited is restricted to a &lt;br /&gt;
small part of the entire document. Therefor being able to remove text sequences &lt;br /&gt;
from the display without changing the actual text sequence could increase &lt;br /&gt;
productivity. One such approach is to use folding, which is a line-based &lt;br /&gt;
technique that &amp;quot;folds&amp;quot; a block of lines into a single line that is then &lt;br /&gt;
displayed in addition to a special symbol that marks the line as actually being &lt;br /&gt;
a &amp;quot;pile&amp;quot; of lines, and which also serves as the interface to unfold the passage &lt;br /&gt;
back into it's original state (and subsequent fold/unfold operations).&lt;br /&gt;
&lt;br /&gt;
==The Goal==&lt;br /&gt;
The goal of this project was to implement folding support for the &lt;br /&gt;
EiffelStudio editor in order to be able to fold semantic blocks of code such as &lt;br /&gt;
entire features or loop blocks. The source text should however not be modified by this procedure in&lt;br /&gt;
the sense that folding or unfolding a text should not change the AST. In addition folding should also not&lt;br /&gt;
have any affects on any print output. A search for specific parts of code should also be able to enter &lt;br /&gt;
folded text areas. It is also critical that folded areas are always displayed to the user correctly. Nested folding &lt;br /&gt;
(e.g. a loop body in a feature, nested loops etc...) should also be possible.&lt;br /&gt;
&lt;br /&gt;
= ADT = &lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
FOLDING_WIDGET, TEXT_BLOCK, INTEGER, BOOLEAN, &lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
new -&amp;gt; FOLDING_WIDGET&lt;br /&gt;
definearea: FOLDING_WIDGET X HIGHLIGHTED_TEXT_BLOCK -&amp;gt; FOLDING_WIDGET&lt;br /&gt;
from: FOLDING_WIDGET -&amp;gt; INTEGER &lt;br /&gt;
to: FOLDING_WIDGET -&amp;gt; INTEGER &lt;br /&gt;
folded: FOLDING_WIDGET -&amp;gt; BOOLEAN &lt;br /&gt;
fold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET &lt;br /&gt;
unfold: FOLDING_WIDGET -&amp;gt; FOLDING_WIDGET &lt;br /&gt;
content: FOLDING_WIDGET -&amp;gt; BLOCK &lt;br /&gt;
numberoflines: FOLDING_WIDGET -&amp;gt; INTEGER&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
none&lt;br /&gt;
&lt;br /&gt;
==Axioms==&lt;br /&gt;
&lt;br /&gt;
for all w,v :: FOLDING_WIDGET, tb :: TEXT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from(definearea(w,tb)) = firstline(tb) &lt;br /&gt;
to(definearea(w,tb) = lastline(tb) &lt;br /&gt;
content(new) = NULL &lt;br /&gt;
content(definearea(w,tb)) = tb &lt;br /&gt;
numberoflines(new) = 0 &lt;br /&gt;
numberoflines(definearea(w,tb)) = to(definearea(w,tb)) - from(definearea(w,tb)) &lt;br /&gt;
folded(new) = false &lt;br /&gt;
folded(fold(w)) = true&lt;br /&gt;
&lt;br /&gt;
=Classes=&lt;br /&gt;
(note: to be revised)&lt;br /&gt;
&lt;br /&gt;
FOLDING_CONTROLLER&lt;br /&gt;
FOLDING_WIDGET&lt;br /&gt;
&lt;br /&gt;
=Testing=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following testcases have been propsed:&lt;br /&gt;
- write a small application (source code to be provided by author) that includes multiple features, loops and nested loops&lt;br /&gt;
to check the correct creation and display of folded areas (ncl. nested folds).&lt;br /&gt;
&lt;br /&gt;
- print the source code of the application mentioned above with and without folding support. The output&lt;br /&gt;
should be identical.&lt;br /&gt;
&lt;br /&gt;
- compile and run both the source code with and without folding support. The applications behaviour should be identical.&lt;br /&gt;
&lt;br /&gt;
- search for specific words and text segments within folded areas of the source. The search should find such segments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TO DO=&lt;br /&gt;
* be familiar with ES' way of implementing the AST&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* (half) ADT specified&lt;br /&gt;
* some specifications&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
&lt;br /&gt;
[http://jerry.cs.uiuc.edu/~plop/plop2003/Papers/Jones-ImplementingASTs.pdf How to implement an AST?]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Visitor_pattern What's the Visitor Design-Pattern?]&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui-fold es-ui-fold@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* [[User:Bayt| Bayt]] (Project Supervisor)&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;br /&gt;
* [[User:Ledergec| Ledergec]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]] (aka. David, Quality Checking)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Talk:Folding_support&amp;diff=2578</id>
		<title>Talk:Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Talk:Folding_support&amp;diff=2578"/>
				<updated>2006-05-03T18:37:46Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: todo-list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= general TODO =&lt;br /&gt;
[[User:Sanakan|Sanakan]] 20:37, 3 May 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
syntax: phase &amp;lt;nr&amp;gt; [&amp;lt;who&amp;gt;] &amp;lt;deadline&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''phase 0''' (everyone!) saturday, may 6&lt;br /&gt;
: specify ADT&amp;lt;br&amp;gt;generate and discuss a complete ADT of the EV_FOLDING_WIDGET here, if it's complete &amp;amp; correct, we can copy it over to the main page.&lt;br /&gt;
&lt;br /&gt;
'''phase 1''' (stefan, oliver, thomas, [[User:Grippus|Grippus]], [[User:Sanakan|sanakan]]) saturday, may 13&lt;br /&gt;
* implement first rough draft of the EV_FOLDING_WIDGET based on the ADT from above (see also hint below).&lt;br /&gt;
&lt;br /&gt;
'''phase 2''' (lukas, lorenz, [[User:Lord _Bubu|Lord Bubu]], [[User:Sanakan|sanakan]]) ...&lt;br /&gt;
* write interface EV_FOLDING_CONTROLLER for users to use our folding widget by supplying an AST.&lt;br /&gt;
&lt;br /&gt;
'''phase 3''' ([[User:Grippus|Grippus]], [[User:Ledergec|Ledergec]], david) ...&lt;br /&gt;
* extensive testing (all members)&lt;br /&gt;
* documentation&lt;br /&gt;
&lt;br /&gt;
'''phase 4''' (to be assigned) ...&lt;br /&gt;
* integration with EiffelStudio (aka. wunschtraum...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= hint =&lt;br /&gt;
[[User:Bayt|Bayt]]&lt;br /&gt;
&lt;br /&gt;
The folding support should be included the: EDITABLE_TEXT_PANEL&lt;br /&gt;
&lt;br /&gt;
= ADT =&lt;br /&gt;
WhatWhereWhenHowWhy&amp;lt;br/&amp;gt;&lt;br /&gt;
[[User:Sanakan|Sanakan]] 16:59, 26 April 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
discuss what the ADT of the widget should be like:&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Unthomas|Unthomas]] 14:05, 1 May 2006 (CEST) &amp;lt;br/&amp;gt;&lt;br /&gt;
Here a link to an interesting paper about ADTs and text editors (node 15):&lt;br /&gt;
http://www.cs.unm.edu/~crowley/papers/sds/sds.html &amp;lt;br/&amp;gt;&lt;br /&gt;
Are you able to see the figures?&lt;br /&gt;
&lt;br /&gt;
: no images over here, either... but here's a download of said paper: [http://citeseer.ist.psu.edu/rd/0%2C162545%2C1%2C0.25%2CDownload/http://citeseer.ist.psu.edu/compress/0/papers/cs/1797/http:zSzzSzwww.bolthole.comzSzjwordzSzwppaper.ps.gz/crowley98data.ps crowley98data.ps]&amp;lt;br/&amp;gt;[[User:Sanakan|Sanakan]] 01:06, 2 May 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
= working title of the project =&lt;br /&gt;
&lt;br /&gt;
A few ideas:&lt;br /&gt;
* Folding -&amp;gt; falten -&amp;gt; eiffel-origami&lt;br /&gt;
* FEES : Folding editor for Eiffel Studio&lt;br /&gt;
* hidden beauty project&lt;br /&gt;
* HYCs : Hide your code&lt;br /&gt;
* Folding Fields&lt;br /&gt;
* Heilige Dreifaltigkeit&lt;br /&gt;
&lt;br /&gt;
any comments from team members?&lt;br /&gt;
&lt;br /&gt;
[[User:Sanakan|Sanakan]] 22:02, 19 April 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[User:Bayt|Bayt]]&lt;br /&gt;
I really like origamiE :-)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Talk:Folding_support&amp;diff=2469</id>
		<title>Talk:Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Talk:Folding_support&amp;diff=2469"/>
				<updated>2006-05-01T23:06:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: downloadlink of adt-paper&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ADT =&lt;br /&gt;
WhatWhereWhenHowWhy&amp;lt;br/&amp;gt;&lt;br /&gt;
[[User:Sanakan|Sanakan]] 16:59, 26 April 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
discuss what the ADT of the widget should be like:&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Unthomas|Unthomas]] 14:05, 1 May 2006 (CEST) &amp;lt;br/&amp;gt;&lt;br /&gt;
Here a link to an interesting paper about ADTs and text editors (node 15):&lt;br /&gt;
http://www.cs.unm.edu/~crowley/papers/sds/sds.html &amp;lt;br/&amp;gt;&lt;br /&gt;
Are you able to see the figures?&lt;br /&gt;
&lt;br /&gt;
: no images over here, either... but here's a download of said paper: [http://citeseer.ist.psu.edu/rd/0%2C162545%2C1%2C0.25%2CDownload/http://citeseer.ist.psu.edu/compress/0/papers/cs/1797/http:zSzzSzwww.bolthole.comzSzjwordzSzwppaper.ps.gz/crowley98data.ps crowley98data.ps]&amp;lt;br/&amp;gt;[[User:Sanakan|Sanakan]] 01:06, 2 May 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
= working title of the project =&lt;br /&gt;
&lt;br /&gt;
A few ideas:&lt;br /&gt;
* Folding -&amp;gt; falten -&amp;gt; eiffel-origami&lt;br /&gt;
* FEES : Folding editor for Eiffel Studio&lt;br /&gt;
* hidden beauty project&lt;br /&gt;
* HYCs : Hide your code&lt;br /&gt;
* Folding Fields&lt;br /&gt;
&lt;br /&gt;
any comments from team members?&lt;br /&gt;
&lt;br /&gt;
[[User:Sanakan|Sanakan]] 22:02, 19 April 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[User:Bayt|Bayt]]&lt;br /&gt;
I really like origamiE :-)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=2402</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=2402"/>
				<updated>2006-04-30T09:14:49Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: team &amp;amp; mailinglist corrected&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
=Milestones=&lt;br /&gt;
&lt;br /&gt;
==todo==&lt;br /&gt;
===M1: May 4th===&lt;br /&gt;
* ADT specified&lt;br /&gt;
&lt;br /&gt;
===M2: May ??? ===&lt;br /&gt;
* be familiar with ES' way of implementing the AST&lt;br /&gt;
* with the above: think about a control wrapper from ES' AST to the project-widget&lt;br /&gt;
&lt;br /&gt;
===Milestones TO DO ===&lt;br /&gt;
* implement support for word wrapping (&amp;quot;View&amp;quot; part of the widget)&lt;br /&gt;
* specify &amp;amp; implement &amp;quot;Controller&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* vast empty space 'ere.......  yet!&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
&lt;br /&gt;
[http://jerry.cs.uiuc.edu/~plop/plop2003/Papers/Jones-ImplementingASTs.pdf How to implement an AST?]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Visitor_pattern What's the Visitor Design-Pattern?]&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui-fold es-ui-fold@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* [[User:Bayt| Bayt]]&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;br /&gt;
* [[User:Ledergec| Ledergec]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]]&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Talk:Folding_support&amp;diff=2266</id>
		<title>Talk:Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Talk:Folding_support&amp;diff=2266"/>
				<updated>2006-04-26T14:59:26Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: ADT: discuss!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ADT =&lt;br /&gt;
WhatWhereWhenHowWhy&amp;lt;br/&amp;gt;&lt;br /&gt;
[[User:Sanakan|Sanakan]] 16:59, 26 April 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
discuss what the ADT of the widget should be like:&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= working title of the project =&lt;br /&gt;
&lt;br /&gt;
A few ideas:&lt;br /&gt;
* Folding -&amp;gt; falten -&amp;gt; eiffel-origami&lt;br /&gt;
* FEES : Folding editor for Eiffel Studio&lt;br /&gt;
* hidden beauty project&lt;br /&gt;
* HYCs : Hide your code&lt;br /&gt;
* Folding Fields&lt;br /&gt;
&lt;br /&gt;
any comments from team members?&lt;br /&gt;
&lt;br /&gt;
[[User:Sanakan|Sanakan]] 22:02, 19 April 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[User:Bayt|Bayt]]&lt;br /&gt;
I really like origamiE :-)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=2265</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=2265"/>
				<updated>2006-04-26T14:55:37Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: Milestones&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
=Milestones=&lt;br /&gt;
&lt;br /&gt;
==todo==&lt;br /&gt;
===M1: May 4th===&lt;br /&gt;
* ADT specified&lt;br /&gt;
&lt;br /&gt;
===M2: May ??? ===&lt;br /&gt;
* be familiar with ES' way of implementing the AST&lt;br /&gt;
* with the above: think about a control wrapper from ES' AST to the project-widget&lt;br /&gt;
&lt;br /&gt;
===Milestones TO DO ===&lt;br /&gt;
* implement support for word wrapping (&amp;quot;View&amp;quot; part of the widget)&lt;br /&gt;
* specify &amp;amp; implement &amp;quot;Controller&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==done==&lt;br /&gt;
* vast empty space 'ere.......  yet!&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui es-ui@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| Sanakan]] (Project leader)&lt;br /&gt;
* [[User:lord Bubu| Lord Bubu]] (Project leader)&lt;br /&gt;
* TODO add project members&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Bayt| Bayt]]&lt;br /&gt;
* [[User:salmanasar| salmanasar]]&lt;br /&gt;
* [[User:Perro| Perro]]&lt;br /&gt;
* [[User:Bru| Bru]]&lt;br /&gt;
* [[User:Grippus| Grippus]]&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=User:Sanakan&amp;diff=2193</id>
		<title>User:Sanakan</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=User:Sanakan&amp;diff=2193"/>
				<updated>2006-04-25T14:44:52Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| &lt;br /&gt;
| http://misc.sanakan.com/sanakan.png&lt;br /&gt;
| &lt;br /&gt;
| i'm a CS student at eth zurich, currently working as a project leader (aka evil director of human resources) for the [[Folding_support]] project.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;mail-contact:&amp;lt;br/&amp;gt;sanakan ~A~T~ student ~D~O~T~ ethz ~D~O~T~ ch&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=User:Sanakan&amp;diff=2147</id>
		<title>User:Sanakan</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=User:Sanakan&amp;diff=2147"/>
				<updated>2006-04-25T09:56:53Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: image added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| &lt;br /&gt;
| http://misc.sanakan.com/sanakan.png&lt;br /&gt;
| &lt;br /&gt;
| i'm a student at eth zurich, currently working as a project leader for the [[Folding_support]] project.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;mail-contact:&amp;lt;br/&amp;gt;sanakan ~A~T~ student ~D~O~T~ ethz ~D~O~T~ ch&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=2095</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=2095"/>
				<updated>2006-04-22T12:39:50Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
[[Category:EiffelVision2]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
The aim of this project is to enhance Vision with a RichText control that supports folding. The goal is to make this surface in the editor windows of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
=Milestones=&lt;br /&gt;
&lt;br /&gt;
==M1: April 25th==&lt;br /&gt;
&lt;br /&gt;
==M2: May ??? ==&lt;br /&gt;
* implement support for word wrapping&lt;br /&gt;
* To be completed by the team&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
[http://www.moria.de/~michael/fe/folding.html What is a folding editor?]&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
Everyone intrested in this project is welcome to join our mailinglist [http://origo.ethz.ch/cgi-bin/mailman/listinfo/es-ui es-ui@origo.ethz.ch]&lt;br /&gt;
&lt;br /&gt;
* [[User:Sanakan| Sanakan]] (Project leader)&lt;br /&gt;
* TODO add 2nd project leader Mario Deuss (Project leader)&lt;br /&gt;
* TODO add project members&lt;br /&gt;
* [[User:Exception| Exception]]&lt;br /&gt;
* [[User:Panarium| Panarium]]&lt;br /&gt;
* [[User:Bayt| Bayt]]&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Talk:Folding_support&amp;diff=1984</id>
		<title>Talk:Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Talk:Folding_support&amp;diff=1984"/>
				<updated>2006-04-19T20:02:56Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== working title of the project ==&lt;br /&gt;
&lt;br /&gt;
A few ideas:&lt;br /&gt;
* Folding -&amp;gt; falten -&amp;gt; eiffel-origami&lt;br /&gt;
* FEES : Folding editor for Eiffel Studio&lt;br /&gt;
* hidden beauty project&lt;br /&gt;
* HYCs : Hide your code&lt;br /&gt;
* Folding Fields&lt;br /&gt;
&lt;br /&gt;
any comments from team members?&lt;br /&gt;
&lt;br /&gt;
[[User:Sanakan|Sanakan]] 22:02, 19 April 2006 (CEST)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=User:Sanakan&amp;diff=1940</id>
		<title>User:Sanakan</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=User:Sanakan&amp;diff=1940"/>
				<updated>2006-04-18T20:37:09Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;i'm a student at eth zurich, currently working as a project leader for the [[Folding_support]] project.&lt;br /&gt;
&lt;br /&gt;
mail-contact:&amp;lt;br/&amp;gt;&lt;br /&gt;
sanakan ~A~T~ student ~D~O~T~ ethz ~D~O~T~ ch&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=1939</id>
		<title>Folding support</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Folding_support&amp;diff=1939"/>
				<updated>2006-04-18T20:34:16Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: create page.make&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The primary goal of this project is to create a Vision2 widget which supports the folding (and therefore hiding) of codeblocks.&amp;lt;br/&amp;gt;&lt;br /&gt;
A secondary goal is to integrate this widget within EiffelStudio's editor window.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More information to follow... &lt;br /&gt;
In the meantime: for questions please contact wikiuser:[http://eiffelsoftware.origo.ethz.ch/index.php/User:Sanakan sanakan].&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Editor&amp;diff=1938</id>
		<title>Editor</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Editor&amp;diff=1938"/>
				<updated>2006-04-18T20:29:36Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
&lt;br /&gt;
Editor enhancements.&lt;br /&gt;
&lt;br /&gt;
* Tabbed Editor (Team at Eiffel Software)&lt;br /&gt;
* Source code formatter&lt;br /&gt;
* Editing shortcuts&lt;br /&gt;
* [[Folding support]] (Team at ETHZ)&lt;br /&gt;
* Fully customizable UI layout, UI docking (Team at Eiffel Software)&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Compiling_EiffelStudio&amp;diff=1925</id>
		<title>Compiling EiffelStudio</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Compiling_EiffelStudio&amp;diff=1925"/>
				<updated>2006-04-18T16:29:43Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: added link to latest gobo CVS package&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Compiler]]&lt;br /&gt;
[[Category:EiffelStudio]]&lt;br /&gt;
&lt;br /&gt;
== Installing EiffelStudio ==&lt;br /&gt;
&lt;br /&gt;
To compile EiffelStudio, you need an already working EiffelStudio compiler on your machine. The current source tree '''requires at least version 5.7''' of EiffelStudio. You can download it from http://eiffelsoftware.origo.ethz.ch/downloads/builds/. This version still requires a registration (we missed to remove the registration cluster while compiling). You need to '''activate''' EiffelStudio (see below), because in some cases the compiler won't work correctly if not activated. [[Installing EiffelStudio]] is covered in its own article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' on Windows you will need the Microsoft C compiler to compile Eiffel Studio. How to install the free version of the Microsoft C compiler: [[Installing Microsoft C compiler]]&lt;br /&gt;
&lt;br /&gt;
===Compilation methods===&lt;br /&gt;
Currently there are two compilation methods. &lt;br /&gt;
* You can either compile EiffelStudio from scratch following the instructions in this document. This is the only method on Windows.&lt;br /&gt;
* Alternatively (on Linux/UNIX) you can use a compilation script that Bernd Schoeller has kindly posted to the developer mailinglist: [http://origo.ethz.ch/pipermail/es-devel/2006-April/000016.html Linux compilation script]&lt;br /&gt;
If possible, use the compilation script and report any errors to the developer mailing list.&lt;br /&gt;
&lt;br /&gt;
==Extracting source code==&lt;br /&gt;
&lt;br /&gt;
===Checking out from SVN===&lt;br /&gt;
Define the '''EIFFEL_SRC''' environment variable. Usually we use the '''XXdev''' convention where XX is the version number from the current developped version of the compiler.&lt;br /&gt;
&lt;br /&gt;
Make sure that '''ISE_EIFFEL''', '''ISE_PLATFORM''' and '''ISE_C_COMPILER''' (on windows only) are properly defined&lt;br /&gt;
&lt;br /&gt;
Perform the following checkout procedures:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Windows'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set SVNURL=https://eiffelsoftware.origo.ethz.ch/svn/es&lt;br /&gt;
svn co %SVNURL%/trunk/Src -N 57dev&lt;br /&gt;
svn co %SVNURL%/trunk/Src/bench/C 57dev/C&lt;br /&gt;
svn co %SVNURL%/trunk/Src/bench/Eiffel 57dev/Eiffel&lt;br /&gt;
svn co %SVNURL%/trunk/Delivery -N 57dev/Delivery&lt;br /&gt;
svn co %SVNURL%/trunk/free_add_ons 57dev/free_add_ons&lt;br /&gt;
&lt;br /&gt;
cd 57dev&lt;br /&gt;
svn up C_library&lt;br /&gt;
svn up dotnet&lt;br /&gt;
svn up library&lt;br /&gt;
svn up library.net&lt;br /&gt;
svn up tools&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Bash'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export SVNURL=https://eiffelsoftware.origo.ethz.ch/svn/es&lt;br /&gt;
svn co $SVNURL/trunk/Src -N 57dev&lt;br /&gt;
svn co $SVNURL/trunk/Src/bench/C 57dev/C&lt;br /&gt;
svn co $SVNURL/trunk/Src/bench/Eiffel 57dev/Eiffel&lt;br /&gt;
svn co $SVNURL/trunk/Delivery -N 57dev/Delivery&lt;br /&gt;
svn co $SVNURL/trunk/free_add_ons 57dev/free_add_ons&lt;br /&gt;
&lt;br /&gt;
cd 57dev&lt;br /&gt;
svn up C_library&lt;br /&gt;
svn up dotnet&lt;br /&gt;
svn up library&lt;br /&gt;
svn up library.net&lt;br /&gt;
svn up tools&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To update the sourcefiles to the latest revision, perform the following steps:&lt;br /&gt;
&lt;br /&gt;
'''Bash and Windows'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd 57dev&lt;br /&gt;
svn up C&lt;br /&gt;
svn up Eiffel&lt;br /&gt;
svn up free_add_ons&lt;br /&gt;
svn up C_library&lt;br /&gt;
svn up dotnet&lt;br /&gt;
svn up library&lt;br /&gt;
svn up library.net&lt;br /&gt;
svn up tools&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing gobo==&lt;br /&gt;
&lt;br /&gt;
Please make sure to use the version provided or the very latest version from CVS. All other versions (including the official 3.4 release) will not work because of name clashes in the UC_STRING class between GOBO and EiffelStudio.&amp;lt;br/&amp;gt;&lt;br /&gt;
As the anonymous CVS on sourceforge is currently broken, use the following link from the gobo newsgroup to get the [http://www.gobosoft.com/download/gobo-cvs-060418.zip CVS-checkout of 18.April].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Windows specific===&lt;br /&gt;
&lt;br /&gt;
You have to unzip the gobo distribution from $EIFFEL_SRC/free_add_ons/gobo/gobo_34_win.tgz and extract it into $EIFFEL_SRC/library.&lt;br /&gt;
&lt;br /&gt;
===Unix specific===&lt;br /&gt;
&lt;br /&gt;
You have to unzip the gobo distribution from $EIFFEL_SRC/free_add_ons/gobo/gobo_34_unix.tgz and extract it into $EIFFEL_SRC/library. Here is the list of commands to do this:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/library&lt;br /&gt;
tar -xvzf $EIFFEL_SRC/free_add_ons/gobo/gobo_34_unix.tgz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compiling C libraries==&lt;br /&gt;
&lt;br /&gt;
===Compiling run-time on Windows===&lt;br /&gt;
&lt;br /&gt;
Before being able to compile the run-time, you need to ensure that '''bash''' is in your '''PATH'''. You can download it from [http://www.cygwin.com http://www.cygwin.com]. Also make sure, that the path to the binaries of your c compiler is placed before the path to cygwin or else the wrong linker will be used. Once done you can do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/C&lt;br /&gt;
configure [win32|win64] [b|m]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first argument indicated whether you are compiling the run-time for 32 or 64 bits. The second one is to tell which C compiler will be used. For now only `b' (Borland) and `m' (Microsoft) are officially supported. We also informally support `g' (GCC) and `l' (LCC).&lt;br /&gt;
&lt;br /&gt;
On Windows 32 bits to clean up all the generated files you do:&lt;br /&gt;
&amp;lt;pre&amp;gt;configure clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Windows 64 bits, you do:&lt;br /&gt;
&amp;lt;pre&amp;gt;configure cleand&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Compiling run-time on Unix===&lt;br /&gt;
&lt;br /&gt;
The command is simply:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/C&lt;br /&gt;
./quick_configure&amp;lt;/pre&amp;gt;&lt;br /&gt;
This requires that '''ISE_PLATFORM''' is properly defined. The `quick_configure' script will look for the file CONFIGS/$ISE_PLATFORM and use it to extract the platform specific information to compile the run-time. If not found then an error will be reported.&lt;br /&gt;
&lt;br /&gt;
===Compiling C code from libraries===&lt;br /&gt;
&lt;br /&gt;
Here is the list of commands to compile all required C libraries on Windows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/library/net/Clib&lt;br /&gt;
make_msc.bat&lt;br /&gt;
cd $EIFFEL_SRC/library/vision2/Clib&lt;br /&gt;
make_msc.bat&lt;br /&gt;
cd $EIFFEL_SRC/library/wel/Clib&lt;br /&gt;
make_msc.bat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Unix it is slightly different:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/library/event/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
cd $EIFFEL_SRC/library/net/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
cd $EIFFEL_SRC/library/vision2/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
cd $EIFFEL_SRC/library/vision2/implementation/gtk/Clib&lt;br /&gt;
finish_freezing -library&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that '''ISE_EIFFEL''' is set correctly to your current &amp;quot;EiffelStudio&amp;quot; installation!&lt;br /&gt;
&lt;br /&gt;
===Compiling C code from C_library===&lt;br /&gt;
&lt;br /&gt;
This is only required on Windows to read PNG file. On Unix, this is not required because it is included in GTK+2.4. Simply do the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/C_library/zlib&lt;br /&gt;
make_msc.bat&lt;br /&gt;
cd $EIFFEL_SRC/C_library/libpng&lt;br /&gt;
make_msc.bat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Compiling C code from compiler===&lt;br /&gt;
&lt;br /&gt;
This is only required on Windows as this C code is a tiny wrapper around the Microsoft C++ API to generate and to debug .NET code.&lt;br /&gt;
&lt;br /&gt;
To compile it, you first need to install the Microsoft .NET SDK. You can download it from their website.&lt;br /&gt;
&lt;br /&gt;
After installing it, you need to update your '''LIB''' and '''INCLUDE''' environment variable to include the path the lib and include directory of the .NET Framework SDK.&lt;br /&gt;
&lt;br /&gt;
Once properly installed, you can do:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/Eiffel/library/cli_writer/Clib&lt;br /&gt;
nmake&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compiling EiffelStudio==&lt;br /&gt;
&lt;br /&gt;
Now that we have taken care of the C code compilation we can compile the compiler. There are four ace files in $EIFFEL_SRC/Eiffel/Ace:&lt;br /&gt;
* batch.mswin.ace&lt;br /&gt;
* newbench.mswin.ace&lt;br /&gt;
* batch.unix.ace&lt;br /&gt;
* newbench.linux.ace&lt;br /&gt;
The first two are for windows, the last two for unix (even if the last one says `linux').&lt;br /&gt;
&lt;br /&gt;
To compile simply do:&lt;br /&gt;
&amp;lt;pre&amp;gt;ec -ace &amp;lt;chosen_ace_file&amp;gt; -c_compile&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note: the 'ec' binary produced by the newbench .ace file contains the full Eiffel compiler, including the batch version. 'estudio' is just a wrapper (available in Src/bench/C/ipc/daemon). So, you need either the one or the other.&lt;br /&gt;
&lt;br /&gt;
===Windows specific===&lt;br /&gt;
&lt;br /&gt;
At the end of the compilation for the workbench version, the C compilation will fail reporting an undefined reference to `nbref'. This is because the ace file has been built for the finalized version of EiffelStudio not the workbench version. To fix this problem do the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;copy ec.lnk h&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then edit the file `h' and replace '''mtcompiler.lib''' by '''mtwcompiler.lib'''.&lt;br /&gt;
Once this is done you can complete you do:&lt;br /&gt;
&amp;lt;pre&amp;gt;link @h&amp;lt;/pre&amp;gt;&lt;br /&gt;
In order to update to the new version of metadata consumer tool, follow the instructions described [[Compiling Metadata Consumer|here]].&lt;br /&gt;
&lt;br /&gt;
===Unix specific===&lt;br /&gt;
&lt;br /&gt;
Like the windows version the C compilation, it will fail, but this time for two reasons:&lt;br /&gt;
* nbref&lt;br /&gt;
* linking order causing many errors to be reported&lt;br /&gt;
&lt;br /&gt;
Here is the recommended way, make a copy of the generated Makefile and put it at the same level as your EIFGEN directory. Edit it and replace '''libmtcompiler.a''' by '''libmtwcompiler.a''', then search for &amp;quot;$(EXTERNALS) $(EIFLIB)&amp;quot; and replace it by &amp;quot;$(EIFLIB) $(EXTERNALS)&amp;quot;. Once this is done, you can do:&lt;br /&gt;
&amp;lt;pre&amp;gt;make -f ../../Makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A little script that does the necessary changes: Place it at the same level as the EIFGEN directory is.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
cp EIFGEN/W_code/Makefile .&lt;br /&gt;
sed 's/libmtcompiler\.a/libmtwcompiler\.a/g' Makefile &amp;gt; tmp&lt;br /&gt;
sed 's/\$(EXTERNALS) \$(EIFLIB)/\$\(EIFLIB\) \$\(EXTERNALS\)/g' tmp &amp;gt; Makefile&lt;br /&gt;
cd EIFGEN/W_code&lt;br /&gt;
make -f ../../Makefile&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' These changes are not required if you try to compile a finalized version of EiffelStudio, but only if you want to create a workbench version of EiffelStudio for development and debugging.&lt;br /&gt;
&lt;br /&gt;
Also, if you encounter problems with your self-compiled version of EiffelStudio, you might try to compile it with GCC 3.x. Version 4 of GCC has a slight change in semantics and EiffelStudio has not been updated. You can see the change in behavior in the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[C,N]&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int a;&lt;br /&gt;
int b;&lt;br /&gt;
int *pointer;&lt;br /&gt;
&lt;br /&gt;
int foo()&lt;br /&gt;
{&lt;br /&gt;
  pointer = &amp;amp;b;&lt;br /&gt;
  return 4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main (int argc, char** argv) &lt;br /&gt;
{&lt;br /&gt;
  a = 3;&lt;br /&gt;
  b = 0;&lt;br /&gt;
&lt;br /&gt;
  pointer = &amp;amp;a;&lt;br /&gt;
&lt;br /&gt;
  *pointer = foo();&lt;br /&gt;
&lt;br /&gt;
  printf (&amp;quot;You are using GCC %d.%d\n&amp;quot;,a,b);&lt;br /&gt;
  return 0;  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac OS X specific===&lt;br /&gt;
&lt;br /&gt;
The basic steps are:&lt;br /&gt;
* compile it under linux&lt;br /&gt;
* copy the F_Code directory to the mac&lt;br /&gt;
* compile it there using make&lt;br /&gt;
* fix whatever problems appear&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Compiling_EiffelStudio&amp;diff=1924</id>
		<title>Compiling EiffelStudio</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Compiling_EiffelStudio&amp;diff=1924"/>
				<updated>2006-04-18T16:25:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sanakan: added svn update instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Compiler]]&lt;br /&gt;
[[Category:EiffelStudio]]&lt;br /&gt;
&lt;br /&gt;
== Installing EiffelStudio ==&lt;br /&gt;
&lt;br /&gt;
To compile EiffelStudio, you need an already working EiffelStudio compiler on your machine. The current source tree '''requires at least version 5.7''' of EiffelStudio. You can download it from http://eiffelsoftware.origo.ethz.ch/downloads/builds/. This version still requires a registration (we missed to remove the registration cluster while compiling). You need to '''activate''' EiffelStudio (see below), because in some cases the compiler won't work correctly if not activated. [[Installing EiffelStudio]] is covered in its own article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' on Windows you will need the Microsoft C compiler to compile Eiffel Studio. How to install the free version of the Microsoft C compiler: [[Installing Microsoft C compiler]]&lt;br /&gt;
&lt;br /&gt;
===Compilation methods===&lt;br /&gt;
Currently there are two compilation methods. &lt;br /&gt;
* You can either compile EiffelStudio from scratch following the instructions in this document. This is the only method on Windows.&lt;br /&gt;
* Alternatively (on Linux/UNIX) you can use a compilation script that Bernd Schoeller has kindly posted to the developer mailinglist: [http://origo.ethz.ch/pipermail/es-devel/2006-April/000016.html Linux compilation script]&lt;br /&gt;
If possible, use the compilation script and report any errors to the developer mailing list.&lt;br /&gt;
&lt;br /&gt;
==Extracting source code==&lt;br /&gt;
&lt;br /&gt;
===Checking out from SVN===&lt;br /&gt;
Define the '''EIFFEL_SRC''' environment variable. Usually we use the '''XXdev''' convention where XX is the version number from the current developped version of the compiler.&lt;br /&gt;
&lt;br /&gt;
Make sure that '''ISE_EIFFEL''', '''ISE_PLATFORM''' and '''ISE_C_COMPILER''' (on windows only) are properly defined&lt;br /&gt;
&lt;br /&gt;
Perform the following checkout procedures:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Windows'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set SVNURL=https://eiffelsoftware.origo.ethz.ch/svn/es&lt;br /&gt;
svn co %SVNURL%/trunk/Src -N 57dev&lt;br /&gt;
svn co %SVNURL%/trunk/Src/bench/C 57dev/C&lt;br /&gt;
svn co %SVNURL%/trunk/Src/bench/Eiffel 57dev/Eiffel&lt;br /&gt;
svn co %SVNURL%/trunk/Delivery -N 57dev/Delivery&lt;br /&gt;
svn co %SVNURL%/trunk/free_add_ons 57dev/free_add_ons&lt;br /&gt;
&lt;br /&gt;
cd 57dev&lt;br /&gt;
svn up C_library&lt;br /&gt;
svn up dotnet&lt;br /&gt;
svn up library&lt;br /&gt;
svn up library.net&lt;br /&gt;
svn up tools&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Bash'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export SVNURL=https://eiffelsoftware.origo.ethz.ch/svn/es&lt;br /&gt;
svn co $SVNURL/trunk/Src -N 57dev&lt;br /&gt;
svn co $SVNURL/trunk/Src/bench/C 57dev/C&lt;br /&gt;
svn co $SVNURL/trunk/Src/bench/Eiffel 57dev/Eiffel&lt;br /&gt;
svn co $SVNURL/trunk/Delivery -N 57dev/Delivery&lt;br /&gt;
svn co $SVNURL/trunk/free_add_ons 57dev/free_add_ons&lt;br /&gt;
&lt;br /&gt;
cd 57dev&lt;br /&gt;
svn up C_library&lt;br /&gt;
svn up dotnet&lt;br /&gt;
svn up library&lt;br /&gt;
svn up library.net&lt;br /&gt;
svn up tools&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To update the sourcefiles to the latest revision, perform the following steps:&lt;br /&gt;
&lt;br /&gt;
'''Bash and Windows'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd 57dev&lt;br /&gt;
svn up C&lt;br /&gt;
svn up Eiffel&lt;br /&gt;
svn up free_add_ons&lt;br /&gt;
svn up C_library&lt;br /&gt;
svn up dotnet&lt;br /&gt;
svn up library&lt;br /&gt;
svn up library.net&lt;br /&gt;
svn up tools&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing gobo==&lt;br /&gt;
&lt;br /&gt;
Please make sure to use the version provided or the very latest version from CVS. All other versions (including the official 3.4 release) will not work because of name clashes in the UC_STRING class between GOBO and EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
===Windows specific===&lt;br /&gt;
&lt;br /&gt;
You have to unzip the gobo distribution from $EIFFEL_SRC/free_add_ons/gobo/gobo_34_win.tgz and extract it into $EIFFEL_SRC/library.&lt;br /&gt;
&lt;br /&gt;
===Unix specific===&lt;br /&gt;
&lt;br /&gt;
You have to unzip the gobo distribution from $EIFFEL_SRC/free_add_ons/gobo/gobo_34_unix.tgz and extract it into $EIFFEL_SRC/library. Here is the list of commands to do this:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/library&lt;br /&gt;
tar -xvzf $EIFFEL_SRC/free_add_ons/gobo/gobo_34_unix.tgz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Compiling C libraries==&lt;br /&gt;
&lt;br /&gt;
===Compiling run-time on Windows===&lt;br /&gt;
&lt;br /&gt;
Before being able to compile the run-time, you need to ensure that '''bash''' is in your '''PATH'''. You can download it from [http://www.cygwin.com http://www.cygwin.com]. Also make sure, that the path to the binaries of your c compiler is placed before the path to cygwin or else the wrong linker will be used. Once done you can do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/C&lt;br /&gt;
configure [win32|win64] [b|m]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first argument indicated whether you are compiling the run-time for 32 or 64 bits. The second one is to tell which C compiler will be used. For now only `b' (Borland) and `m' (Microsoft) are officially supported. We also informally support `g' (GCC) and `l' (LCC).&lt;br /&gt;
&lt;br /&gt;
On Windows 32 bits to clean up all the generated files you do:&lt;br /&gt;
&amp;lt;pre&amp;gt;configure clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Windows 64 bits, you do:&lt;br /&gt;
&amp;lt;pre&amp;gt;configure cleand&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Compiling run-time on Unix===&lt;br /&gt;
&lt;br /&gt;
The command is simply:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/C&lt;br /&gt;
./quick_configure&amp;lt;/pre&amp;gt;&lt;br /&gt;
This requires that '''ISE_PLATFORM''' is properly defined. The `quick_configure' script will look for the file CONFIGS/$ISE_PLATFORM and use it to extract the platform specific information to compile the run-time. If not found then an error will be reported.&lt;br /&gt;
&lt;br /&gt;
===Compiling C code from libraries===&lt;br /&gt;
&lt;br /&gt;
Here is the list of commands to compile all required C libraries on Windows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/library/net/Clib&lt;br /&gt;
make_msc.bat&lt;br /&gt;
cd $EIFFEL_SRC/library/vision2/Clib&lt;br /&gt;
make_msc.bat&lt;br /&gt;
cd $EIFFEL_SRC/library/wel/Clib&lt;br /&gt;
make_msc.bat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Unix it is slightly different:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/library/event/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
cd $EIFFEL_SRC/library/net/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
cd $EIFFEL_SRC/library/vision2/Clib&lt;br /&gt;
finish_freezing -library&lt;br /&gt;
cd $EIFFEL_SRC/library/vision2/implementation/gtk/Clib&lt;br /&gt;
finish_freezing -library&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that '''ISE_EIFFEL''' is set correctly to your current &amp;quot;EiffelStudio&amp;quot; installation!&lt;br /&gt;
&lt;br /&gt;
===Compiling C code from C_library===&lt;br /&gt;
&lt;br /&gt;
This is only required on Windows to read PNG file. On Unix, this is not required because it is included in GTK+2.4. Simply do the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/C_library/zlib&lt;br /&gt;
make_msc.bat&lt;br /&gt;
cd $EIFFEL_SRC/C_library/libpng&lt;br /&gt;
make_msc.bat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Compiling C code from compiler===&lt;br /&gt;
&lt;br /&gt;
This is only required on Windows as this C code is a tiny wrapper around the Microsoft C++ API to generate and to debug .NET code.&lt;br /&gt;
&lt;br /&gt;
To compile it, you first need to install the Microsoft .NET SDK. You can download it from their website.&lt;br /&gt;
&lt;br /&gt;
After installing it, you need to update your '''LIB''' and '''INCLUDE''' environment variable to include the path the lib and include directory of the .NET Framework SDK.&lt;br /&gt;
&lt;br /&gt;
Once properly installed, you can do:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd $EIFFEL_SRC/Eiffel/library/cli_writer/Clib&lt;br /&gt;
nmake&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compiling EiffelStudio==&lt;br /&gt;
&lt;br /&gt;
Now that we have taken care of the C code compilation we can compile the compiler. There are four ace files in $EIFFEL_SRC/Eiffel/Ace:&lt;br /&gt;
* batch.mswin.ace&lt;br /&gt;
* newbench.mswin.ace&lt;br /&gt;
* batch.unix.ace&lt;br /&gt;
* newbench.linux.ace&lt;br /&gt;
The first two are for windows, the last two for unix (even if the last one says `linux').&lt;br /&gt;
&lt;br /&gt;
To compile simply do:&lt;br /&gt;
&amp;lt;pre&amp;gt;ec -ace &amp;lt;chosen_ace_file&amp;gt; -c_compile&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note: the 'ec' binary produced by the newbench .ace file contains the full Eiffel compiler, including the batch version. 'estudio' is just a wrapper (available in Src/bench/C/ipc/daemon). So, you need either the one or the other.&lt;br /&gt;
&lt;br /&gt;
===Windows specific===&lt;br /&gt;
&lt;br /&gt;
At the end of the compilation for the workbench version, the C compilation will fail reporting an undefined reference to `nbref'. This is because the ace file has been built for the finalized version of EiffelStudio not the workbench version. To fix this problem do the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;copy ec.lnk h&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then edit the file `h' and replace '''mtcompiler.lib''' by '''mtwcompiler.lib'''.&lt;br /&gt;
Once this is done you can complete you do:&lt;br /&gt;
&amp;lt;pre&amp;gt;link @h&amp;lt;/pre&amp;gt;&lt;br /&gt;
In order to update to the new version of metadata consumer tool, follow the instructions described [[Compiling Metadata Consumer|here]].&lt;br /&gt;
&lt;br /&gt;
===Unix specific===&lt;br /&gt;
&lt;br /&gt;
Like the windows version the C compilation, it will fail, but this time for two reasons:&lt;br /&gt;
* nbref&lt;br /&gt;
* linking order causing many errors to be reported&lt;br /&gt;
&lt;br /&gt;
Here is the recommended way, make a copy of the generated Makefile and put it at the same level as your EIFGEN directory. Edit it and replace '''libmtcompiler.a''' by '''libmtwcompiler.a''', then search for &amp;quot;$(EXTERNALS) $(EIFLIB)&amp;quot; and replace it by &amp;quot;$(EIFLIB) $(EXTERNALS)&amp;quot;. Once this is done, you can do:&lt;br /&gt;
&amp;lt;pre&amp;gt;make -f ../../Makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A little script that does the necessary changes: Place it at the same level as the EIFGEN directory is.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
cp EIFGEN/W_code/Makefile .&lt;br /&gt;
sed 's/libmtcompiler\.a/libmtwcompiler\.a/g' Makefile &amp;gt; tmp&lt;br /&gt;
sed 's/\$(EXTERNALS) \$(EIFLIB)/\$\(EIFLIB\) \$\(EXTERNALS\)/g' tmp &amp;gt; Makefile&lt;br /&gt;
cd EIFGEN/W_code&lt;br /&gt;
make -f ../../Makefile&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' These changes are not required if you try to compile a finalized version of EiffelStudio, but only if you want to create a workbench version of EiffelStudio for development and debugging.&lt;br /&gt;
&lt;br /&gt;
Also, if you encounter problems with your self-compiled version of EiffelStudio, you might try to compile it with GCC 3.x. Version 4 of GCC has a slight change in semantics and EiffelStudio has not been updated. You can see the change in behavior in the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[C,N]&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int a;&lt;br /&gt;
int b;&lt;br /&gt;
int *pointer;&lt;br /&gt;
&lt;br /&gt;
int foo()&lt;br /&gt;
{&lt;br /&gt;
  pointer = &amp;amp;b;&lt;br /&gt;
  return 4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main (int argc, char** argv) &lt;br /&gt;
{&lt;br /&gt;
  a = 3;&lt;br /&gt;
  b = 0;&lt;br /&gt;
&lt;br /&gt;
  pointer = &amp;amp;a;&lt;br /&gt;
&lt;br /&gt;
  *pointer = foo();&lt;br /&gt;
&lt;br /&gt;
  printf (&amp;quot;You are using GCC %d.%d\n&amp;quot;,a,b);&lt;br /&gt;
  return 0;  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac OS X specific===&lt;br /&gt;
&lt;br /&gt;
The basic steps are:&lt;br /&gt;
* compile it under linux&lt;br /&gt;
* copy the F_Code directory to the mac&lt;br /&gt;
* compile it there using make&lt;br /&gt;
* fix whatever problems appear&lt;/div&gt;</summary>
		<author><name>Sanakan</name></author>	</entry>

	</feed>