<?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=Ted</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=Ted"/>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/Special:Contributions/Ted"/>
		<updated>2026-05-15T23:47:36Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Information_Tool_change_analysis.PNG&amp;diff=14711</id>
		<title>File:Information Tool change analysis.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Information_Tool_change_analysis.PNG&amp;diff=14711"/>
				<updated>2013-04-04T10:29:27Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14710</id>
		<title>Eiffel Information System</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14710"/>
				<updated>2013-04-04T10:29:04Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Change analysis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EiffelStudio]]&lt;br /&gt;
[[Category:Eiffel Information System]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The Eiffel Information System (EIS) provides a unified mechanism for linking development objects — classes, features and so on — of Eiffel systems with '''external information'''. This term refers to information other than Eiffel program texts. Usually the tools maintaining external information are separate tools, such as a browser; we call them '''external tools'''. Examples of external information and possible corresponding external tools are:&lt;br /&gt;
* Web page — the default browser&lt;br /&gt;
* PDF document — Acrobat&lt;br /&gt;
* MS Word documents — Microsoft Word&lt;br /&gt;
EIS is also intended to be the standard mechanism for obtaining help on Eiffel and EiffelStudio, replacing previous solutions. In that case &amp;quot;external tools&amp;quot; may actually be Eiffel tools.&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
The basic mechanisms that EIS makes available to users include two categories: outgoing (from Eiffel to external tools), incoming  (the reverse).&lt;br /&gt;
&lt;br /&gt;
* Examples of outgoing mechanisms include:&lt;br /&gt;
** Annotating Eiffel targets, classes and features to include references to external information. Such annotations can include tags.&lt;br /&gt;
** By selecting an annotation in EiffelStudio, automatically open the corresponding external tool to display or edit that information.&lt;br /&gt;
** Provide a list of all external information (in a class, cluster or entire system) corresponding to a specified tag.&lt;br /&gt;
** For a change to the software — either after the change has been performed, or before a contemplated change has been performed — display a list of all external information that may be affected as indicated by the annotations (not implemented in 6.2)&lt;br /&gt;
&lt;br /&gt;
* Examples of incoming mechanisms include:&lt;br /&gt;
** For supported tools, select external information linked to an Eiffel developer object and have EiffelStudio directly open on that object. In 6.2, eiffel: schema is supported on Windows.&lt;br /&gt;
&lt;br /&gt;
== Outgoing ==&lt;br /&gt;
=== Annotations ===&lt;br /&gt;
Annotations may be applicable to:&lt;br /&gt;
&lt;br /&gt;
* An individual class or feature. In this case the annotation figures in the class text, as part of an Eiffel &amp;quot;note&amp;quot; clause (&amp;quot;indexing&amp;quot; is still supported, it depends on which syntax level the user choose).&lt;br /&gt;
* A target, library or cluster. In this case the annotation figures in the associated ECF file; EiffelStudio provides support for entering it through a Information (EIS) Tool.&lt;br /&gt;
&lt;br /&gt;
Most of the following rules use note clauses as examples, but all applicable facilities must be supported by both variants; the syntax is designed to be as close as possible.&lt;br /&gt;
&lt;br /&gt;
The basic way to specify a dependency is to include such an annotation. The required part of every annotation is:&lt;br /&gt;
* The &amp;quot;EIS&amp;quot; marker.&lt;br /&gt;
&lt;br /&gt;
However the following parts are suggested:&lt;br /&gt;
* The &amp;quot;protocol&amp;quot;, indicating the type of external information, and making it possible for EIS to determine the associated external tool. Without the &amp;quot;protocol&amp;quot; part, the source defaults to a web page.&lt;br /&gt;
* The source, which identifies where to find the information itself, for example a URL, or a file name optionally complemented by a page number.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Not all information must be literal: annotations can use variables, defined at various levels including:&lt;br /&gt;
&lt;br /&gt;
* EiffelStudio installation built in variables&lt;br /&gt;
** ISE_WIKI = http://dev.eiffel.com&lt;br /&gt;
** EIFFELROOM = http://www.eiffelroom.com&lt;br /&gt;
** ISE_DOC = http://docs.eiffel.com&lt;br /&gt;
** ISE_DOC_UUID	= http://doc.eiffel.com/isedoc/uuid&lt;br /&gt;
** ISE_DOC_REF = http://doc.eiffel.com/isedoc/eis&lt;br /&gt;
** SYSTEM_PATH, the path of the system in which current entry is written&lt;br /&gt;
* Context related built in variables. These variables can be used in a specific context. For instance, '''feature_name''' refers to the name of the feature in which the annotation is written.&lt;br /&gt;
** feature_name&lt;br /&gt;
** class_name&lt;br /&gt;
** group_name&lt;br /&gt;
** target_name&lt;br /&gt;
** unique_id&lt;br /&gt;
*** The `unique_id' returns a unique id of a class in a compiled system. The id usually consists of target uuid, target name, group name and class name.&lt;br /&gt;
* Individual user preferences (Not implemented)&lt;br /&gt;
* Individual system or library preferences (in ECF)&lt;br /&gt;
* Environment variables&lt;br /&gt;
&lt;br /&gt;
It should be possible to enter an annotation graphically through the EiffelStudio Information (EIS) Tool; in that case the relevant clause (feature, class, cluster, system) will be added automatically.&lt;br /&gt;
&lt;br /&gt;
=== Protocol ===&lt;br /&gt;
&lt;br /&gt;
* URI: This protocol does not need to specified. By default, it will be taken if nothing is specified or unknown protocol is specified.&lt;br /&gt;
* PDF: PDF protocol supports three parameters for now. &amp;quot;type&amp;quot; &amp;quot;page&amp;quot; and &amp;quot;nameddest&amp;quot;. (Windows only)&lt;br /&gt;
** type: &amp;quot;file&amp;quot; is used to open PDF files in the PDF reader. Otherwise it opens in a browser.&lt;br /&gt;
** page: Specify the page number to navigate to.&lt;br /&gt;
** nameddest: Specify the named destination to navigate to.&lt;br /&gt;
* DOC: Microsoft Word document. &amp;quot;bookmark&amp;quot; parameter is supported (Windows Only)&lt;br /&gt;
** bookmark: Name of the bookmark in Word document.&lt;br /&gt;
&lt;br /&gt;
=== Syntax for Annotations ===&lt;br /&gt;
The following example illustrates the basic form of an EIS note entry:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;e&amp;gt;EIS: &amp;quot;name=Project Requirement&amp;quot;, &amp;quot;src=$(SYSTEM_PATH)/docs/requirements.pdf&amp;quot;, &amp;quot;protocol=PDF&amp;quot;, &amp;quot;nameddest=4.1&amp;quot;, &amp;quot;tag=requirement&amp;quot;&amp;lt;/e&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The label (Note_entry as called in the ECMA/ISO Eiffel Standard syntax) is '''EIS''',  '''EIS'''  Note_value tells the Eiffel Information System that this Note_entry is of interest to EIS, as distinct from any other information that might be expressed through a Note_entry. The file name (src) includes '''$PROJ''', referring to a variable — set at any of the above 5 levels, rather than the second one &amp;quot;Context related built in variables&amp;quot; — defining the project location.  The protocol is '''PDF'''. The '''nameddest'''  property (name destination) is a specific property of PDF documents. The tag '''requirement''' indicating that this entry links the enclosing Eiffel class or feature with some part of the requirements document. &lt;br /&gt;
&lt;br /&gt;
Similarly, the following example demonstrates how annotations look like in ECF files:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;note&amp;gt;&lt;br /&gt;
	&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;eis src=&amp;quot;$(ISE_DOC_UUID)/3d96626f-11f3-67a2-dec6-69f7faf4a8d6&amp;quot; tag=&amp;quot;EiffelTime&amp;quot; name=&amp;quot;EiffelTime&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/note&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is only one major difference here, targets in .ecf support automatic entry specification which enables automatic entry for classes in that target. The note element in ECF is supported in [[http://www.eiffel.com/developers/xml/configuration-1-4-0.xsd schema 1.4]] and greater.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Entry ===&lt;br /&gt;
&lt;br /&gt;
Targets in a .ecf file are allowed to specify automatic entry like this:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)/$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
When `auto' is set with `true', automatic entry is enabled in the target. In Info tool, each class in a target with automatic entry enabled displays an entry, actually not existing in code, is bound to a source `src'.&lt;br /&gt;
&lt;br /&gt;
An automatic entry of a class can be overridden too, by specifying &amp;quot;override=true&amp;quot; in one of the written entry, or check the check box in the column of Info tool.&lt;br /&gt;
&lt;br /&gt;
One can modify the automatic entry specification in a target via the first button with an &amp;quot;A&amp;quot; in Info tool. Of course, select a target node in the tree first.&lt;br /&gt;
&lt;br /&gt;
=== Information (EIS) Tool ===&lt;br /&gt;
&lt;br /&gt;
The tool is an output of the EIS outgoing mechanism. Through the tool, users can graphically manage all EIS information in current system. See [[Information (EIS) Tool]] for more information.&lt;br /&gt;
There is a screen shot of the tool.&lt;br /&gt;
&lt;br /&gt;
[[Image:Information_(EIS)_Tool.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Incoming ==&lt;br /&gt;
Incoming mechanism is based on URI, and introduces a new URI scheme: '''eiffel'''. By entering the URI into address of a browser, or clicking on the hyper link, an existing EiffelStudio instance or new EiffelStudio instance will try to resolve the URI and display corresponding resources.&lt;br /&gt;
&lt;br /&gt;
=== URI scheme Syntax ===&lt;br /&gt;
  '''eiffel:?&amp;lt;eiffel-resource&amp;gt;'''&lt;br /&gt;
&amp;lt;eiffel-resource&amp;gt; is a combination of following parts, connected by '''&amp;quot;&amp;amp;&amp;quot;''' if more than one part are required:&lt;br /&gt;
* &amp;lt;system&amp;gt;, in the form of '''system=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of system_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;target&amp;gt;, in the form of '''target=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of target_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;cluster&amp;gt;, in the form of '''cluster=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the cluster.&lt;br /&gt;
* &amp;lt;class&amp;gt;, in the form of '''class=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the class.&lt;br /&gt;
* &amp;lt;feature&amp;gt;, in the form of '''feature=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the feature.&lt;br /&gt;
{{note|All parts above are unordered.}}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
  eiffel:?class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?system=ec.D398E904-E3C8-4F8A-B9E7-6FE493CEA02F&amp;amp;target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
&lt;br /&gt;
=== Protocal Registration (Windows) ===&lt;br /&gt;
The following example shows how to register eiffel scheme on Windows, estudio.exe in this case, to handle an eiffel URI.&lt;br /&gt;
* HKEY_CLASSES_ROOT&lt;br /&gt;
** eiffel&lt;br /&gt;
** (Default) = &amp;quot;URL:Eiffel Protocol&amp;quot;&lt;br /&gt;
** URL Protocol = &amp;quot;&amp;quot;&lt;br /&gt;
*** DefaultIcon&lt;br /&gt;
*** (Default) = &amp;quot;estudio.exe&amp;quot;&lt;br /&gt;
*** shell&lt;br /&gt;
**** open&lt;br /&gt;
***** command&lt;br /&gt;
***** (Default) = &amp;quot;%ISE_EIFFEL%\studio\spec\windows\bin\estudio.exe&amp;quot; /ec_action eisi:&amp;quot;%1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== EiffelStudio Action Protocol ===&lt;br /&gt;
&lt;br /&gt;
EiffelStudio uses estudio.exe to interact with all existing instances of ec.exe. The protocol is used for this goal.&lt;br /&gt;
The action protocol can be used for those tools that want to control running EiffelStudio instances. For the moment, this is completely transparent to end users because of its immaturity.&lt;br /&gt;
It was designed to fit the requirement of EIS incoming mechanism, with limited extendibility. In the future, as required, it could be designed as XML style, after precise analysis on requirements of all kinds of new functionalities.&lt;br /&gt;
&lt;br /&gt;
The pattern EiffelStudio accept is: &lt;br /&gt;
  [&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;predefined-status&amp;gt;]&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;modulewise-action&amp;gt;&lt;br /&gt;
The part bracketed is optional condition. A command with conditional part is a conditional command.&lt;br /&gt;
Without conditional part, the command is direct command.&lt;br /&gt;
&amp;lt;eiffelstudio-module-ID&amp;gt; refers to a module defined in EiffelStudio. For example, &amp;lt;com.eiffel.compiler&amp;gt;, the compiler module in EiffelStudio; &amp;lt;com.eiffel.eis_incoming&amp;gt;, EIS incoming module.&lt;br /&gt;
&amp;lt;predefined-status&amp;gt; stands for a status of that module, as a conditional status which should trigger the actual &amp;lt;modulewise-action&amp;gt;.&lt;br /&gt;
&amp;lt;modulewise-action&amp;gt; indicate the predefined action a module in EiffelStudio should actually react.&lt;br /&gt;
&lt;br /&gt;
The following are examples now implemented on the purpose of EIS incoming functions:&lt;br /&gt;
  Example: &amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor now.&lt;br /&gt;
&lt;br /&gt;
  Example: &amp;lt;com.eiffel.compiler&amp;gt;&amp;lt;project_ready&amp;gt;&amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor, when the project is ready.&lt;br /&gt;
&lt;br /&gt;
The protocol is loaded through [https://svn.origo.ethz.ch/eiffelstudio/trunk/Src/framework/command_tunnel Command Tunnel Library]. This library is now only implemented on Windows.&lt;br /&gt;
&lt;br /&gt;
== Change analysis ==&lt;br /&gt;
Within EiffelStudio 7.3, there will be new functions in Infomation tool to track changes on target or external resouce side, and potentially affected items on either side are listed.&lt;br /&gt;
* New functions are:&lt;br /&gt;
** List of elements of current system that would be affected by external resource changes. (The first version limits the external resource to local files.)&lt;br /&gt;
** List of external resources that might be affected by changes of current system. (No limit of the type of external resources)&lt;br /&gt;
** Change acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Typical work flow to demo affected external resources caused by current system change:&lt;br /&gt;
# Open a class, add an Information entry with an external source in the class.&lt;br /&gt;
# Start working on that class, save it at as you normally do on regular basis.&lt;br /&gt;
# Open Info tool, go to Affected source item in the left tree.&lt;br /&gt;
# Check the list of external resouces that might be affected by last changes, as shown in the sceen cast bellow.&lt;br /&gt;
# Acknowledge the changes if you find that the external resources do not need a change for last changes of current system.&lt;br /&gt;
&lt;br /&gt;
Typical work flow to demo affected items in the system caused by external resource change:&lt;br /&gt;
# Open a class, add an Information entry with an external document (limited to local files in 7.3) in the class.&lt;br /&gt;
# Start working on that document, save it at as you normally do on regular basis.&lt;br /&gt;
# Open Info tool, go to Affected target in the left tree.&lt;br /&gt;
# Check the list of targets that might be affected by last changes of the document. (You may need to click on the &amp;quot;sweep the system now.&amp;quot; button to get a full list if auto-sweeping is not enabled.)&lt;br /&gt;
# Acknowledge the changes if you find that current system does not need a change for last changes of the document.&lt;br /&gt;
&lt;br /&gt;
[[Image:Information_Tool_change_analysis.PNG]]&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14709</id>
		<title>Eiffel Information System</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14709"/>
				<updated>2013-04-04T09:55:05Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EiffelStudio]]&lt;br /&gt;
[[Category:Eiffel Information System]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The Eiffel Information System (EIS) provides a unified mechanism for linking development objects — classes, features and so on — of Eiffel systems with '''external information'''. This term refers to information other than Eiffel program texts. Usually the tools maintaining external information are separate tools, such as a browser; we call them '''external tools'''. Examples of external information and possible corresponding external tools are:&lt;br /&gt;
* Web page — the default browser&lt;br /&gt;
* PDF document — Acrobat&lt;br /&gt;
* MS Word documents — Microsoft Word&lt;br /&gt;
EIS is also intended to be the standard mechanism for obtaining help on Eiffel and EiffelStudio, replacing previous solutions. In that case &amp;quot;external tools&amp;quot; may actually be Eiffel tools.&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
The basic mechanisms that EIS makes available to users include two categories: outgoing (from Eiffel to external tools), incoming  (the reverse).&lt;br /&gt;
&lt;br /&gt;
* Examples of outgoing mechanisms include:&lt;br /&gt;
** Annotating Eiffel targets, classes and features to include references to external information. Such annotations can include tags.&lt;br /&gt;
** By selecting an annotation in EiffelStudio, automatically open the corresponding external tool to display or edit that information.&lt;br /&gt;
** Provide a list of all external information (in a class, cluster or entire system) corresponding to a specified tag.&lt;br /&gt;
** For a change to the software — either after the change has been performed, or before a contemplated change has been performed — display a list of all external information that may be affected as indicated by the annotations (not implemented in 6.2)&lt;br /&gt;
&lt;br /&gt;
* Examples of incoming mechanisms include:&lt;br /&gt;
** For supported tools, select external information linked to an Eiffel developer object and have EiffelStudio directly open on that object. In 6.2, eiffel: schema is supported on Windows.&lt;br /&gt;
&lt;br /&gt;
== Outgoing ==&lt;br /&gt;
=== Annotations ===&lt;br /&gt;
Annotations may be applicable to:&lt;br /&gt;
&lt;br /&gt;
* An individual class or feature. In this case the annotation figures in the class text, as part of an Eiffel &amp;quot;note&amp;quot; clause (&amp;quot;indexing&amp;quot; is still supported, it depends on which syntax level the user choose).&lt;br /&gt;
* A target, library or cluster. In this case the annotation figures in the associated ECF file; EiffelStudio provides support for entering it through a Information (EIS) Tool.&lt;br /&gt;
&lt;br /&gt;
Most of the following rules use note clauses as examples, but all applicable facilities must be supported by both variants; the syntax is designed to be as close as possible.&lt;br /&gt;
&lt;br /&gt;
The basic way to specify a dependency is to include such an annotation. The required part of every annotation is:&lt;br /&gt;
* The &amp;quot;EIS&amp;quot; marker.&lt;br /&gt;
&lt;br /&gt;
However the following parts are suggested:&lt;br /&gt;
* The &amp;quot;protocol&amp;quot;, indicating the type of external information, and making it possible for EIS to determine the associated external tool. Without the &amp;quot;protocol&amp;quot; part, the source defaults to a web page.&lt;br /&gt;
* The source, which identifies where to find the information itself, for example a URL, or a file name optionally complemented by a page number.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Not all information must be literal: annotations can use variables, defined at various levels including:&lt;br /&gt;
&lt;br /&gt;
* EiffelStudio installation built in variables&lt;br /&gt;
** ISE_WIKI = http://dev.eiffel.com&lt;br /&gt;
** EIFFELROOM = http://www.eiffelroom.com&lt;br /&gt;
** ISE_DOC = http://docs.eiffel.com&lt;br /&gt;
** ISE_DOC_UUID	= http://doc.eiffel.com/isedoc/uuid&lt;br /&gt;
** ISE_DOC_REF = http://doc.eiffel.com/isedoc/eis&lt;br /&gt;
** SYSTEM_PATH, the path of the system in which current entry is written&lt;br /&gt;
* Context related built in variables. These variables can be used in a specific context. For instance, '''feature_name''' refers to the name of the feature in which the annotation is written.&lt;br /&gt;
** feature_name&lt;br /&gt;
** class_name&lt;br /&gt;
** group_name&lt;br /&gt;
** target_name&lt;br /&gt;
** unique_id&lt;br /&gt;
*** The `unique_id' returns a unique id of a class in a compiled system. The id usually consists of target uuid, target name, group name and class name.&lt;br /&gt;
* Individual user preferences (Not implemented)&lt;br /&gt;
* Individual system or library preferences (in ECF)&lt;br /&gt;
* Environment variables&lt;br /&gt;
&lt;br /&gt;
It should be possible to enter an annotation graphically through the EiffelStudio Information (EIS) Tool; in that case the relevant clause (feature, class, cluster, system) will be added automatically.&lt;br /&gt;
&lt;br /&gt;
=== Protocol ===&lt;br /&gt;
&lt;br /&gt;
* URI: This protocol does not need to specified. By default, it will be taken if nothing is specified or unknown protocol is specified.&lt;br /&gt;
* PDF: PDF protocol supports three parameters for now. &amp;quot;type&amp;quot; &amp;quot;page&amp;quot; and &amp;quot;nameddest&amp;quot;. (Windows only)&lt;br /&gt;
** type: &amp;quot;file&amp;quot; is used to open PDF files in the PDF reader. Otherwise it opens in a browser.&lt;br /&gt;
** page: Specify the page number to navigate to.&lt;br /&gt;
** nameddest: Specify the named destination to navigate to.&lt;br /&gt;
* DOC: Microsoft Word document. &amp;quot;bookmark&amp;quot; parameter is supported (Windows Only)&lt;br /&gt;
** bookmark: Name of the bookmark in Word document.&lt;br /&gt;
&lt;br /&gt;
=== Syntax for Annotations ===&lt;br /&gt;
The following example illustrates the basic form of an EIS note entry:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;e&amp;gt;EIS: &amp;quot;name=Project Requirement&amp;quot;, &amp;quot;src=$(SYSTEM_PATH)/docs/requirements.pdf&amp;quot;, &amp;quot;protocol=PDF&amp;quot;, &amp;quot;nameddest=4.1&amp;quot;, &amp;quot;tag=requirement&amp;quot;&amp;lt;/e&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The label (Note_entry as called in the ECMA/ISO Eiffel Standard syntax) is '''EIS''',  '''EIS'''  Note_value tells the Eiffel Information System that this Note_entry is of interest to EIS, as distinct from any other information that might be expressed through a Note_entry. The file name (src) includes '''$PROJ''', referring to a variable — set at any of the above 5 levels, rather than the second one &amp;quot;Context related built in variables&amp;quot; — defining the project location.  The protocol is '''PDF'''. The '''nameddest'''  property (name destination) is a specific property of PDF documents. The tag '''requirement''' indicating that this entry links the enclosing Eiffel class or feature with some part of the requirements document. &lt;br /&gt;
&lt;br /&gt;
Similarly, the following example demonstrates how annotations look like in ECF files:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;note&amp;gt;&lt;br /&gt;
	&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;eis src=&amp;quot;$(ISE_DOC_UUID)/3d96626f-11f3-67a2-dec6-69f7faf4a8d6&amp;quot; tag=&amp;quot;EiffelTime&amp;quot; name=&amp;quot;EiffelTime&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/note&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is only one major difference here, targets in .ecf support automatic entry specification which enables automatic entry for classes in that target. The note element in ECF is supported in [[http://www.eiffel.com/developers/xml/configuration-1-4-0.xsd schema 1.4]] and greater.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Entry ===&lt;br /&gt;
&lt;br /&gt;
Targets in a .ecf file are allowed to specify automatic entry like this:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)/$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
When `auto' is set with `true', automatic entry is enabled in the target. In Info tool, each class in a target with automatic entry enabled displays an entry, actually not existing in code, is bound to a source `src'.&lt;br /&gt;
&lt;br /&gt;
An automatic entry of a class can be overridden too, by specifying &amp;quot;override=true&amp;quot; in one of the written entry, or check the check box in the column of Info tool.&lt;br /&gt;
&lt;br /&gt;
One can modify the automatic entry specification in a target via the first button with an &amp;quot;A&amp;quot; in Info tool. Of course, select a target node in the tree first.&lt;br /&gt;
&lt;br /&gt;
=== Information (EIS) Tool ===&lt;br /&gt;
&lt;br /&gt;
The tool is an output of the EIS outgoing mechanism. Through the tool, users can graphically manage all EIS information in current system. See [[Information (EIS) Tool]] for more information.&lt;br /&gt;
There is a screen shot of the tool.&lt;br /&gt;
&lt;br /&gt;
[[Image:Information_(EIS)_Tool.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Incoming ==&lt;br /&gt;
Incoming mechanism is based on URI, and introduces a new URI scheme: '''eiffel'''. By entering the URI into address of a browser, or clicking on the hyper link, an existing EiffelStudio instance or new EiffelStudio instance will try to resolve the URI and display corresponding resources.&lt;br /&gt;
&lt;br /&gt;
=== URI scheme Syntax ===&lt;br /&gt;
  '''eiffel:?&amp;lt;eiffel-resource&amp;gt;'''&lt;br /&gt;
&amp;lt;eiffel-resource&amp;gt; is a combination of following parts, connected by '''&amp;quot;&amp;amp;&amp;quot;''' if more than one part are required:&lt;br /&gt;
* &amp;lt;system&amp;gt;, in the form of '''system=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of system_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;target&amp;gt;, in the form of '''target=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of target_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;cluster&amp;gt;, in the form of '''cluster=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the cluster.&lt;br /&gt;
* &amp;lt;class&amp;gt;, in the form of '''class=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the class.&lt;br /&gt;
* &amp;lt;feature&amp;gt;, in the form of '''feature=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the feature.&lt;br /&gt;
{{note|All parts above are unordered.}}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
  eiffel:?class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?system=ec.D398E904-E3C8-4F8A-B9E7-6FE493CEA02F&amp;amp;target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
&lt;br /&gt;
=== Protocal Registration (Windows) ===&lt;br /&gt;
The following example shows how to register eiffel scheme on Windows, estudio.exe in this case, to handle an eiffel URI.&lt;br /&gt;
* HKEY_CLASSES_ROOT&lt;br /&gt;
** eiffel&lt;br /&gt;
** (Default) = &amp;quot;URL:Eiffel Protocol&amp;quot;&lt;br /&gt;
** URL Protocol = &amp;quot;&amp;quot;&lt;br /&gt;
*** DefaultIcon&lt;br /&gt;
*** (Default) = &amp;quot;estudio.exe&amp;quot;&lt;br /&gt;
*** shell&lt;br /&gt;
**** open&lt;br /&gt;
***** command&lt;br /&gt;
***** (Default) = &amp;quot;%ISE_EIFFEL%\studio\spec\windows\bin\estudio.exe&amp;quot; /ec_action eisi:&amp;quot;%1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== EiffelStudio Action Protocol ===&lt;br /&gt;
&lt;br /&gt;
EiffelStudio uses estudio.exe to interact with all existing instances of ec.exe. The protocol is used for this goal.&lt;br /&gt;
The action protocol can be used for those tools that want to control running EiffelStudio instances. For the moment, this is completely transparent to end users because of its immaturity.&lt;br /&gt;
It was designed to fit the requirement of EIS incoming mechanism, with limited extendibility. In the future, as required, it could be designed as XML style, after precise analysis on requirements of all kinds of new functionalities.&lt;br /&gt;
&lt;br /&gt;
The pattern EiffelStudio accept is: &lt;br /&gt;
  [&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;predefined-status&amp;gt;]&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;modulewise-action&amp;gt;&lt;br /&gt;
The part bracketed is optional condition. A command with conditional part is a conditional command.&lt;br /&gt;
Without conditional part, the command is direct command.&lt;br /&gt;
&amp;lt;eiffelstudio-module-ID&amp;gt; refers to a module defined in EiffelStudio. For example, &amp;lt;com.eiffel.compiler&amp;gt;, the compiler module in EiffelStudio; &amp;lt;com.eiffel.eis_incoming&amp;gt;, EIS incoming module.&lt;br /&gt;
&amp;lt;predefined-status&amp;gt; stands for a status of that module, as a conditional status which should trigger the actual &amp;lt;modulewise-action&amp;gt;.&lt;br /&gt;
&amp;lt;modulewise-action&amp;gt; indicate the predefined action a module in EiffelStudio should actually react.&lt;br /&gt;
&lt;br /&gt;
The following are examples now implemented on the purpose of EIS incoming functions:&lt;br /&gt;
  Example: &amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor now.&lt;br /&gt;
&lt;br /&gt;
  Example: &amp;lt;com.eiffel.compiler&amp;gt;&amp;lt;project_ready&amp;gt;&amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor, when the project is ready.&lt;br /&gt;
&lt;br /&gt;
The protocol is loaded through [https://svn.origo.ethz.ch/eiffelstudio/trunk/Src/framework/command_tunnel Command Tunnel Library]. This library is now only implemented on Windows.&lt;br /&gt;
&lt;br /&gt;
== Change analysis ==&lt;br /&gt;
Within EiffelStudio 7.3, there will be new functions in Infomation tool to track changes on target or external resouce side, and potentially affected items either side are listed.&lt;br /&gt;
* New functions are:&lt;br /&gt;
** List of elements of current system that would be affected by external resource changes. (The first version limits the external resource to local files.)&lt;br /&gt;
** List of external resources that might be affected by changes of current system. (No limit of the type of external resources)&lt;br /&gt;
** Change acknowledgement.&lt;br /&gt;
&lt;br /&gt;
Typical work flow:&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
[[Image:Information_Tool_change_analysis.PNG]]&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14708</id>
		<title>Eiffel Information System</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14708"/>
				<updated>2013-04-04T09:21:33Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* EiffelStudio Action Protocol (Incoming Implementation) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EiffelStudio]]&lt;br /&gt;
[[Category:Eiffel Information System]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The Eiffel Information System (EIS) provides a unified mechanism for linking development objects — classes, features and so on — of Eiffel systems with '''external information'''. This term refers to information other than Eiffel program texts. Usually the tools maintaining external information are separate tools, such as a browser; we call them '''external tools'''. Examples of external information and possible corresponding external tools are:&lt;br /&gt;
* Web page — the default browser&lt;br /&gt;
* PDF document — Acrobat&lt;br /&gt;
* MS Word documents — Microsoft Word&lt;br /&gt;
EIS is also intended to be the standard mechanism for obtaining help on Eiffel and EiffelStudio, replacing previous solutions. In that case &amp;quot;external tools&amp;quot; may actually be Eiffel tools.&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
The basic mechanisms that EIS makes available to users include two categories: outgoing (from Eiffel to external tools), incoming  (the reverse).&lt;br /&gt;
&lt;br /&gt;
* Examples of outgoing mechanisms include:&lt;br /&gt;
** Annotating Eiffel targets, classes and features to include references to external information. Such annotations can include tags.&lt;br /&gt;
** By selecting an annotation in EiffelStudio, automatically open the corresponding external tool to display or edit that information.&lt;br /&gt;
** Provide a list of all external information (in a class, cluster or entire system) corresponding to a specified tag.&lt;br /&gt;
** For a change to the software — either after the change has been performed, or before a contemplated change has been performed — display a list of all external information that may be affected as indicated by the annotations (not implemented in 6.2)&lt;br /&gt;
&lt;br /&gt;
* Examples of incoming mechanisms include:&lt;br /&gt;
** For supported tools, select external information linked to an Eiffel developer object and have EiffelStudio directly open on that object. In 6.2, eiffel: schema is supported on Windows.&lt;br /&gt;
&lt;br /&gt;
== Outgoing ==&lt;br /&gt;
=== Annotations ===&lt;br /&gt;
Annotations may be applicable to:&lt;br /&gt;
&lt;br /&gt;
* An individual class or feature. In this case the annotation figures in the class text, as part of an Eiffel &amp;quot;note&amp;quot; clause (&amp;quot;indexing&amp;quot; is still supported, it depends on which syntax level the user choose).&lt;br /&gt;
* A target, library or cluster. In this case the annotation figures in the associated ECF file; EiffelStudio provides support for entering it through a Information (EIS) Tool.&lt;br /&gt;
&lt;br /&gt;
Most of the following rules use note clauses as examples, but all applicable facilities must be supported by both variants; the syntax is designed to be as close as possible.&lt;br /&gt;
&lt;br /&gt;
The basic way to specify a dependency is to include such an annotation. The required part of every annotation is:&lt;br /&gt;
* The &amp;quot;EIS&amp;quot; marker.&lt;br /&gt;
&lt;br /&gt;
However the following parts are suggested:&lt;br /&gt;
* The &amp;quot;protocol&amp;quot;, indicating the type of external information, and making it possible for EIS to determine the associated external tool. Without the &amp;quot;protocol&amp;quot; part, the source defaults to a web page.&lt;br /&gt;
* The source, which identifies where to find the information itself, for example a URL, or a file name optionally complemented by a page number.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Not all information must be literal: annotations can use variables, defined at various levels including:&lt;br /&gt;
&lt;br /&gt;
* EiffelStudio installation built in variables&lt;br /&gt;
** ISE_WIKI = http://dev.eiffel.com&lt;br /&gt;
** EIFFELROOM = http://www.eiffelroom.com&lt;br /&gt;
** ISE_DOC = http://docs.eiffel.com&lt;br /&gt;
** ISE_DOC_UUID	= http://doc.eiffel.com/isedoc/uuid&lt;br /&gt;
** ISE_DOC_REF = http://doc.eiffel.com/isedoc/eis&lt;br /&gt;
** SYSTEM_PATH, the path of the system in which current entry is written&lt;br /&gt;
* Context related built in variables. These variables can be used in a specific context. For instance, '''feature_name''' refers to the name of the feature in which the annotation is written.&lt;br /&gt;
** feature_name&lt;br /&gt;
** class_name&lt;br /&gt;
** group_name&lt;br /&gt;
** target_name&lt;br /&gt;
** unique_id&lt;br /&gt;
*** The `unique_id' returns a unique id of a class in a compiled system. The id usually consists of target uuid, target name, group name and class name.&lt;br /&gt;
* Individual user preferences (Not implemented)&lt;br /&gt;
* Individual system or library preferences (in ECF)&lt;br /&gt;
* Environment variables&lt;br /&gt;
&lt;br /&gt;
It should be possible to enter an annotation graphically through the EiffelStudio Information (EIS) Tool; in that case the relevant clause (feature, class, cluster, system) will be added automatically.&lt;br /&gt;
&lt;br /&gt;
=== Protocol ===&lt;br /&gt;
&lt;br /&gt;
* URI: This protocol does not need to specified. By default, it will be taken if nothing is specified or unknown protocol is specified.&lt;br /&gt;
* PDF: PDF protocol supports three parameters for now. &amp;quot;type&amp;quot; &amp;quot;page&amp;quot; and &amp;quot;nameddest&amp;quot;. (Windows only)&lt;br /&gt;
** type: &amp;quot;file&amp;quot; is used to open PDF files in the PDF reader. Otherwise it opens in a browser.&lt;br /&gt;
** page: Specify the page number to navigate to.&lt;br /&gt;
** nameddest: Specify the named destination to navigate to.&lt;br /&gt;
* DOC: Microsoft Word document. &amp;quot;bookmark&amp;quot; parameter is supported (Windows Only)&lt;br /&gt;
** bookmark: Name of the bookmark in Word document.&lt;br /&gt;
&lt;br /&gt;
=== Syntax for Annotations ===&lt;br /&gt;
The following example illustrates the basic form of an EIS note entry:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;e&amp;gt;EIS: &amp;quot;name=Project Requirement&amp;quot;, &amp;quot;src=$(SYSTEM_PATH)/docs/requirements.pdf&amp;quot;, &amp;quot;protocol=PDF&amp;quot;, &amp;quot;nameddest=4.1&amp;quot;, &amp;quot;tag=requirement&amp;quot;&amp;lt;/e&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The label (Note_entry as called in the ECMA/ISO Eiffel Standard syntax) is '''EIS''',  '''EIS'''  Note_value tells the Eiffel Information System that this Note_entry is of interest to EIS, as distinct from any other information that might be expressed through a Note_entry. The file name (src) includes '''$PROJ''', referring to a variable — set at any of the above 5 levels, rather than the second one &amp;quot;Context related built in variables&amp;quot; — defining the project location.  The protocol is '''PDF'''. The '''nameddest'''  property (name destination) is a specific property of PDF documents. The tag '''requirement''' indicating that this entry links the enclosing Eiffel class or feature with some part of the requirements document. &lt;br /&gt;
&lt;br /&gt;
Similarly, the following example demonstrates how annotations look like in ECF files:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;note&amp;gt;&lt;br /&gt;
	&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;eis src=&amp;quot;$(ISE_DOC_UUID)/3d96626f-11f3-67a2-dec6-69f7faf4a8d6&amp;quot; tag=&amp;quot;EiffelTime&amp;quot; name=&amp;quot;EiffelTime&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/note&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is only one major difference here, targets in .ecf support automatic entry specification which enables automatic entry for classes in that target. The note element in ECF is supported in [[http://www.eiffel.com/developers/xml/configuration-1-4-0.xsd schema 1.4]] and greater.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Entry ===&lt;br /&gt;
&lt;br /&gt;
Targets in a .ecf file are allowed to specify automatic entry like this:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)/$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
When `auto' is set with `true', automatic entry is enabled in the target. In Info tool, each class in a target with automatic entry enabled displays an entry, actually not existing in code, is bound to a source `src'.&lt;br /&gt;
&lt;br /&gt;
An automatic entry of a class can be overridden too, by specifying &amp;quot;override=true&amp;quot; in one of the written entry, or check the check box in the column of Info tool.&lt;br /&gt;
&lt;br /&gt;
One can modify the automatic entry specification in a target via the first button with an &amp;quot;A&amp;quot; in Info tool. Of course, select a target node in the tree first.&lt;br /&gt;
&lt;br /&gt;
=== Information (EIS) Tool ===&lt;br /&gt;
&lt;br /&gt;
The tool is an output of the EIS outgoing mechanism. Through the tool, users can graphically manage all EIS information in current system. See [[Information (EIS) Tool]] for more information.&lt;br /&gt;
There is a screen shot of the tool.&lt;br /&gt;
&lt;br /&gt;
[[Image:Information_(EIS)_Tool.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Incoming ==&lt;br /&gt;
Incoming mechanism is based on URI, and introduces a new URI scheme: '''eiffel'''. By entering the URI into address of a browser, or clicking on the hyper link, an existing EiffelStudio instance or new EiffelStudio instance will try to resolve the URI and display corresponding resources.&lt;br /&gt;
&lt;br /&gt;
=== URI scheme Syntax ===&lt;br /&gt;
  '''eiffel:?&amp;lt;eiffel-resource&amp;gt;'''&lt;br /&gt;
&amp;lt;eiffel-resource&amp;gt; is a combination of following parts, connected by '''&amp;quot;&amp;amp;&amp;quot;''' if more than one part are required:&lt;br /&gt;
* &amp;lt;system&amp;gt;, in the form of '''system=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of system_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;target&amp;gt;, in the form of '''target=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of target_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;cluster&amp;gt;, in the form of '''cluster=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the cluster.&lt;br /&gt;
* &amp;lt;class&amp;gt;, in the form of '''class=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the class.&lt;br /&gt;
* &amp;lt;feature&amp;gt;, in the form of '''feature=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the feature.&lt;br /&gt;
{{note|All parts above are unordered.}}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
  eiffel:?class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?system=ec.D398E904-E3C8-4F8A-B9E7-6FE493CEA02F&amp;amp;target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
&lt;br /&gt;
=== Protocal Registration (Windows) ===&lt;br /&gt;
The following example shows how to register eiffel scheme on Windows, estudio.exe in this case, to handle an eiffel URI.&lt;br /&gt;
* HKEY_CLASSES_ROOT&lt;br /&gt;
** eiffel&lt;br /&gt;
** (Default) = &amp;quot;URL:Eiffel Protocol&amp;quot;&lt;br /&gt;
** URL Protocol = &amp;quot;&amp;quot;&lt;br /&gt;
*** DefaultIcon&lt;br /&gt;
*** (Default) = &amp;quot;estudio.exe&amp;quot;&lt;br /&gt;
*** shell&lt;br /&gt;
**** open&lt;br /&gt;
***** command&lt;br /&gt;
***** (Default) = &amp;quot;%ISE_EIFFEL%\studio\spec\windows\bin\estudio.exe&amp;quot; /ec_action eisi:&amp;quot;%1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== EiffelStudio Action Protocol ===&lt;br /&gt;
&lt;br /&gt;
EiffelStudio uses estudio.exe to interact with all existing instances of ec.exe. The protocol is used for this goal.&lt;br /&gt;
The action protocol can be used for those tools that want to control running EiffelStudio instances. For the moment, this is completely transparent to end users because of its immaturity.&lt;br /&gt;
It was designed to fit the requirement of EIS incoming mechanism, with limited extendibility. In the future, as required, it could be designed as XML style, after precise analysis on requirements of all kinds of new functionalities.&lt;br /&gt;
&lt;br /&gt;
The pattern EiffelStudio accept is: &lt;br /&gt;
  [&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;predefined-status&amp;gt;]&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;modulewise-action&amp;gt;&lt;br /&gt;
The part bracketed is optional condition. A command with conditional part is a conditional command.&lt;br /&gt;
Without conditional part, the command is direct command.&lt;br /&gt;
&amp;lt;eiffelstudio-module-ID&amp;gt; refers to a module defined in EiffelStudio. For example, &amp;lt;com.eiffel.compiler&amp;gt;, the compiler module in EiffelStudio; &amp;lt;com.eiffel.eis_incoming&amp;gt;, EIS incoming module.&lt;br /&gt;
&amp;lt;predefined-status&amp;gt; stands for a status of that module, as a conditional status which should trigger the actual &amp;lt;modulewise-action&amp;gt;.&lt;br /&gt;
&amp;lt;modulewise-action&amp;gt; indicate the predefined action a module in EiffelStudio should actually react.&lt;br /&gt;
&lt;br /&gt;
The following are examples now implemented on the purpose of EIS incoming functions:&lt;br /&gt;
  Example: &amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor now.&lt;br /&gt;
&lt;br /&gt;
  Example: &amp;lt;com.eiffel.compiler&amp;gt;&amp;lt;project_ready&amp;gt;&amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor, when the project is ready.&lt;br /&gt;
&lt;br /&gt;
The protocol is loaded through [https://svn.origo.ethz.ch/eiffelstudio/trunk/Src/framework/command_tunnel Command Tunnel Library]. This library is now only implemented on Windows.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=EiffelStudio_7.3_Releases&amp;diff=14707</id>
		<title>EiffelStudio 7.3 Releases</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=EiffelStudio_7.3_Releases&amp;diff=14707"/>
				<updated>2013-04-04T04:32:24Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* 7.3.x.y (...) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Releases]]__NOTOC__{{ReleaseHistoryHeader}}&lt;br /&gt;
&lt;br /&gt;
= EiffelStudio 7.3.x Releases=&lt;br /&gt;
&lt;br /&gt;
Beta download: ftp://beta:beta57@ftp.eiffel.com/7.3/&lt;br /&gt;
&lt;br /&gt;
==7.3.x.y (...)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* base: Added ability to inspect object that contains references to objects with copy semantics.&lt;br /&gt;
* base: Changed &amp;lt;e&amp;gt;TUPLE&amp;lt;/e&amp;gt; and depending classes to allow for separate items (rev#92359).&lt;br /&gt;
* base: test#scoop031 - Changed &amp;lt;e&amp;gt;ROUTINE&amp;lt;/e&amp;gt; and descendants to be usable for agents with separate targets (rev#92360).&lt;br /&gt;
* {{Red|compiler, run-time: test#scoop030, test#scoop031 - Supported agents with targets of separate types (rev#92361, rev#92362).}}&lt;br /&gt;
* studio: &amp;quot;Affected target&amp;quot; and &amp;quot;Affected source&amp;quot; in Info tool. They are used to report potential target or source changes that are affected by corresponding source and target.(rev#92389)&lt;br /&gt;
&lt;br /&gt;
===Improvements===&lt;br /&gt;
===Feature removed===&lt;br /&gt;
===Bug fixes===&lt;br /&gt;
* base: Fixed bug#18559 in SED_MEMORY_READER_WRITER where if you retrieve a large chunk, we would not allocate enough memory. (rev#92366)&lt;br /&gt;
* base: Fixed bug#18560 where comparing an EQUALITY_TUPLE it would only care about the last elements, not the first different element. (rev#92365)&lt;br /&gt;
* wel/vision2: Fixed an issue with {WEL_CHOOSE_FOLDER_DIALOG} where `set_starting_path' had no effect (rev#92337).&lt;br /&gt;
* compiler: test#scoop020 - Fixed a bug that caused incorrect conformance checks for formal generics of different separate status(rev#92353).&lt;br /&gt;
* compiler: test#scoop020 - Fixed a bug that might cause incorrect conformance checks for attachment and separateness status of a constrained formal generic parameter against a class type (rev#92358).&lt;br /&gt;
* compiler: test#scoop021 - Fixed a C code generation bug that might cause an access on an invalid address during object test evaluation with an expression of a separate type (rev#92355).&lt;br /&gt;
* studio: Fixed the bug that a class directly belongs to a cluster (no folder layer in between) could not be located by the locating function in Groups tool. (rev#92369)&lt;br /&gt;
* studio: Fixed a memory corruption that would occur when you have multiple errors during a compilation and you are opening each error in its own tab editor, after opening 4 or 5 tabs, EiffelStudio could become unstable. (rev#92368)&lt;br /&gt;
&lt;br /&gt;
===User changes===&lt;br /&gt;
&lt;br /&gt;
===Developer changes===&lt;br /&gt;
* store: Do not remove trailing spaces for STRING_* data types. (rev#92394)&lt;br /&gt;
* store: Changed type mapping from STRING_* to varchar instead of char at table allocation (ODBC, rev#92394)&lt;br /&gt;
&lt;br /&gt;
==7.3.9.1412 (Monday March 18th 2013)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*vision2: Added {EV_PIXEL_BUFFER}.stretched which gives you a stretched version of an EV_PIXEL_BUFFER. The quality of the stretch image is much better than of EV_PIXMAP for Windows. On Unix it is the same quality as EV_PIXMAP. (rev#91208)&lt;br /&gt;
*base: Added ability to store/retrieve expanded objects with SED (but not yet those that are reference with copy semantics).&lt;br /&gt;
*EiffelStudio: Completion window tooltip with contracts.&lt;br /&gt;
*EiffelStudio: Debug tooltip that display value of expression when mouse pointer moves over.&lt;br /&gt;
&lt;br /&gt;
===Improvements===&lt;br /&gt;
*vision2: Improved stretching of EV_PIXMAP on Windows by using the Color on Color stretching mode of the Win32 API StretchBlt. (rev#91207)&lt;br /&gt;
*autotest: Now tests will be executed under the location of the ECFs, and not in the Testing subdirectory of the EIFGENs directory. (rev#91247)&lt;br /&gt;
&lt;br /&gt;
===Feature removed===&lt;br /&gt;
* {{Red|Dropped BIT type.}}&lt;br /&gt;
&lt;br /&gt;
===Bug fixes===&lt;br /&gt;
* vision2: Fixed &amp;lt;e&amp;gt;{EV_GRID_COLUMN}.required_width_of_item_span&amp;lt;/e&amp;gt; to only take into account visible item. (code review#9356052 and rev#91224).&lt;br /&gt;
* vision2: Fixed a resizing bug when you have a vertical/horizontal box with a minimum size set, if one of the item has a minimum size larger than its parent, then in some circumstances the child will be shrinked beyond its minimum size causing some visual glitches. See regression tests TEST_EV_CONTAINER.test_horizontal_box_resizing and TEST_EV_CONTAINER.test_vertical_box_resizing for scenario. (code review#9351166 and rev#91251).&lt;br /&gt;
* wel: Fixed a 64-bit truncation bug in WEL which was only found when compiling a Vision2 project using an EV_COMBO_BOX on Windows 8 using VCExpress 2012. (rev#91290).&lt;br /&gt;
* vision2/wel: Fixed a memory corruption that would occur when loading a 32-bit BMP image as a background image of a container in a 16-bit or lower display. (rev#91377).&lt;br /&gt;
&lt;br /&gt;
===User changes===&lt;br /&gt;
*{{Red|base: Storables made using SED from version 6.6 or earlier of EiffelStudio not using the `is_for_fast_retrieval' setting won't be recoverable.}}&lt;br /&gt;
&lt;br /&gt;
===Developer changes===&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=EiffelStudio_7.3_Releases&amp;diff=14703</id>
		<title>EiffelStudio 7.3 Releases</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=EiffelStudio_7.3_Releases&amp;diff=14703"/>
				<updated>2013-03-28T10:42:56Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* New features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Releases]]__NOTOC__{{ReleaseHistoryHeader}}&lt;br /&gt;
&lt;br /&gt;
= EiffelStudio 7.3.x Releases=&lt;br /&gt;
&lt;br /&gt;
Beta download: ftp://beta:beta57@ftp.eiffel.com/7.3/&lt;br /&gt;
&lt;br /&gt;
==7.3.x.y (...)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* base: Added ability to inspect object that contains references to objects with copy semantics.&lt;br /&gt;
* base: Changed &amp;lt;e&amp;gt;TUPLE&amp;lt;/e&amp;gt; and depending classes to allow for separate items (rev#92359).&lt;br /&gt;
* base: test#scoop031 - Changed &amp;lt;e&amp;gt;ROUTINE&amp;lt;/e&amp;gt; and descendants to be usable for agents with separate targets (rev#92360).&lt;br /&gt;
* {{Red|compiler, run-time: test#scoop030, test#scoop031 - Supported agents with targets of separate types (rev#92361, rev#92362).}}&lt;br /&gt;
&lt;br /&gt;
===Improvements===&lt;br /&gt;
===Feature removed===&lt;br /&gt;
===Bug fixes===&lt;br /&gt;
* wel/vision2: Fixed an issue with {WEL_CHOOSE_FOLDER_DIALOG} where `set_starting_path' had no effect (rev#92337).&lt;br /&gt;
* compiler: test#scoop020 - Fixed a bug that caused incorrect conformance checks for formal generics of different separate status(rev#92353).&lt;br /&gt;
* compiler: test#scoop020 - Fixed a bug that might cause incorrect conformance checks for attachment and separateness status of a constrained formal generic parameter against a class type (rev#92358).&lt;br /&gt;
* compiler: test#scoop021 - Fixed a C code generation bug that might cause an access on an invalid address during object test evaluation with an expression of a separate type (rev#92355).&lt;br /&gt;
* EiffelStudio: Fixed the bug that a class directly belongs to a cluster (no folder layer in between) could not be located by the locating function in Groups tool. (rev#92369)&lt;br /&gt;
&lt;br /&gt;
===User changes===&lt;br /&gt;
===Developer changes===&lt;br /&gt;
&lt;br /&gt;
==7.3.9.1412 (Monday March 18th 2013)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*vision2: Added {EV_PIXEL_BUFFER}.stretched which gives you a stretched version of an EV_PIXEL_BUFFER. The quality of the stretch image is much better than of EV_PIXMAP for Windows. On Unix it is the same quality as EV_PIXMAP. (rev#91208)&lt;br /&gt;
*base: Added ability to store/retrieve expanded objects with SED (but not yet those that are reference with copy semantics).&lt;br /&gt;
*EiffelStudio: Completion window tooltip with contracts.&lt;br /&gt;
*EiffelStudio: Debug tooltip that display value of expression when mouse pointer moves over.&lt;br /&gt;
&lt;br /&gt;
===Improvements===&lt;br /&gt;
*vision2: Improved stretching of EV_PIXMAP on Windows by using the Color on Color stretching mode of the Win32 API StretchBlt. (rev#91207)&lt;br /&gt;
*autotest: Now tests will be executed under the location of the ECFs, and not in the Testing subdirectory of the EIFGENs directory. (rev#91247)&lt;br /&gt;
&lt;br /&gt;
===Feature removed===&lt;br /&gt;
* {{Red|Dropped BIT type.}}&lt;br /&gt;
&lt;br /&gt;
===Bug fixes===&lt;br /&gt;
* vision2: Fixed &amp;lt;e&amp;gt;{EV_GRID_COLUMN}.required_width_of_item_span&amp;lt;/e&amp;gt; to only take into account visible item. (code review#9356052 and rev#91224).&lt;br /&gt;
* vision2: Fixed a resizing bug when you have a vertical/horizontal box with a minimum size set, if one of the item has a minimum size larger than its parent, then in some circumstances the child will be shrinked beyond its minimum size causing some visual glitches. See regression tests TEST_EV_CONTAINER.test_horizontal_box_resizing and TEST_EV_CONTAINER.test_vertical_box_resizing for scenario. (code review#9351166 and rev#91251).&lt;br /&gt;
* wel: Fixed a 64-bit truncation bug in WEL which was only found when compiling a Vision2 project using an EV_COMBO_BOX on Windows 8 using VCExpress 2012. (rev#91290).&lt;br /&gt;
* vision2/wel: Fixed a memory corruption that would occur when loading a 32-bit BMP image as a background image of a container in a 16-bit or lower display. (rev#91377).&lt;br /&gt;
&lt;br /&gt;
===User changes===&lt;br /&gt;
*{{Red|base: Storables made using SED from version 6.6 or earlier of EiffelStudio not using the `is_for_fast_retrieval' setting won't be recoverable.}}&lt;br /&gt;
&lt;br /&gt;
===Developer changes===&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=EiffelStudio_7.3_Releases&amp;diff=14702</id>
		<title>EiffelStudio 7.3 Releases</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=EiffelStudio_7.3_Releases&amp;diff=14702"/>
				<updated>2013-03-28T10:37:33Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Bug fixes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Releases]]__NOTOC__{{ReleaseHistoryHeader}}&lt;br /&gt;
&lt;br /&gt;
= EiffelStudio 7.3.x Releases=&lt;br /&gt;
&lt;br /&gt;
Beta download: ftp://beta:beta57@ftp.eiffel.com/7.3/&lt;br /&gt;
&lt;br /&gt;
==7.3.x.y (...)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
* base: Added ability to inspect object that contains references to objects with copy semantics.&lt;br /&gt;
* base: Changed &amp;lt;e&amp;gt;TUPLE&amp;lt;/e&amp;gt; and depending classes to allow for separate items (rev#92359).&lt;br /&gt;
* base: test#scoop031 - Changed &amp;lt;e&amp;gt;ROUTINE&amp;lt;/e&amp;gt; and descendants to be usable for agents with separate targets (rev#92360).&lt;br /&gt;
* {{Red|compiler, run-time: test#scoop030, test#scoop031 - Supported agents with targets of separate types (rev#92361, rev#92362).}}&lt;br /&gt;
&lt;br /&gt;
===Improvements===&lt;br /&gt;
===Feature removed===&lt;br /&gt;
===Bug fixes===&lt;br /&gt;
* wel/vision2: Fixed an issue with {WEL_CHOOSE_FOLDER_DIALOG} where `set_starting_path' had no effect (rev#92337).&lt;br /&gt;
* compiler: test#scoop020 - Fixed a bug that caused incorrect conformance checks for formal generics of different separate status(rev#92353).&lt;br /&gt;
* compiler: test#scoop020 - Fixed a bug that might cause incorrect conformance checks for attachment and separateness status of a constrained formal generic parameter against a class type (rev#92358).&lt;br /&gt;
* compiler: test#scoop021 - Fixed a C code generation bug that might cause an access on an invalid address during object test evaluation with an expression of a separate type (rev#92355).&lt;br /&gt;
* EiffelStudio: Fixed the bug that a class directly belongs to a cluster (no folder layer in between) could not be located by the locating function in Groups tool. (rev#92369)&lt;br /&gt;
&lt;br /&gt;
===User changes===&lt;br /&gt;
===Developer changes===&lt;br /&gt;
&lt;br /&gt;
==7.3.9.1412 (Monday March 18th 2013)==&lt;br /&gt;
&lt;br /&gt;
===New features===&lt;br /&gt;
*vision2: Added {EV_PIXEL_BUFFER}.stretched which gives you a stretched version of an EV_PIXEL_BUFFER. The quality of the stretch image is much better than of EV_PIXMAP for Windows. On Unix it is the same quality as EV_PIXMAP. (rev#91208)&lt;br /&gt;
*base: Added ability to store/retrieve expanded objects with SED (but not yet those that are reference with copy semantics).&lt;br /&gt;
&lt;br /&gt;
===Improvements===&lt;br /&gt;
*vision2: Improved stretching of EV_PIXMAP on Windows by using the Color on Color stretching mode of the Win32 API StretchBlt. (rev#91207)&lt;br /&gt;
*autotest: Now tests will be executed under the location of the ECFs, and not in the Testing subdirectory of the EIFGENs directory. (rev#91247)&lt;br /&gt;
&lt;br /&gt;
===Feature removed===&lt;br /&gt;
* {{Red|Dropped BIT type.}}&lt;br /&gt;
&lt;br /&gt;
===Bug fixes===&lt;br /&gt;
* vision2: Fixed &amp;lt;e&amp;gt;{EV_GRID_COLUMN}.required_width_of_item_span&amp;lt;/e&amp;gt; to only take into account visible item. (code review#9356052 and rev#91224).&lt;br /&gt;
* vision2: Fixed a resizing bug when you have a vertical/horizontal box with a minimum size set, if one of the item has a minimum size larger than its parent, then in some circumstances the child will be shrinked beyond its minimum size causing some visual glitches. See regression tests TEST_EV_CONTAINER.test_horizontal_box_resizing and TEST_EV_CONTAINER.test_vertical_box_resizing for scenario. (code review#9351166 and rev#91251).&lt;br /&gt;
* wel: Fixed a 64-bit truncation bug in WEL which was only found when compiling a Vision2 project using an EV_COMBO_BOX on Windows 8 using VCExpress 2012. (rev#91290).&lt;br /&gt;
* vision2/wel: Fixed a memory corruption that would occur when loading a 32-bit BMP image as a background image of a container in a 16-bit or lower display. (rev#91377).&lt;br /&gt;
&lt;br /&gt;
===User changes===&lt;br /&gt;
*{{Red|base: Storables made using SED from version 6.6 or earlier of EiffelStudio not using the `is_for_fast_retrieval' setting won't be recoverable.}}&lt;br /&gt;
&lt;br /&gt;
===Developer changes===&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Exception_mechanism_internals&amp;diff=14511</id>
		<title>Exception mechanism internals</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Exception_mechanism_internals&amp;diff=14511"/>
				<updated>2012-06-26T07:10:55Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Exception]]&lt;br /&gt;
== Overview ==&lt;br /&gt;
This article documents exception handling mechanisms at implementation level, including runtime and code generation.&lt;br /&gt;
&lt;br /&gt;
== Typical execution/trace stack operation in a routine ==&lt;br /&gt;
Once or routine with old variable is slightly different.&lt;br /&gt;
See following pseudocode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;eiffel&amp;gt;&lt;br /&gt;
-- entry&lt;br /&gt;
&lt;br /&gt;
new_exset&lt;br /&gt;
	do&lt;br /&gt;
		-- eif_stack: Create a new vector EX_CALL on eif_stack.&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if not setjmp then&lt;br /&gt;
&lt;br /&gt;
	-- Routine body&lt;br /&gt;
&lt;br /&gt;
else&lt;br /&gt;
&lt;br /&gt;
	exresc&lt;br /&gt;
&lt;br /&gt;
	do&lt;br /&gt;
&lt;br /&gt;
		-- eif_trace: Check the stack of eif_trace top element must be EN_FAIL or EN_RES&lt;br /&gt;
		&lt;br /&gt;
		-- eif_trace: Mark top node as rescued&lt;br /&gt;
&lt;br /&gt;
		-- eif_trace: Create new EN_ILVL item on eif_trace, indicating entering a new level&lt;br /&gt;
&lt;br /&gt;
		-- eif_stack: Create new EX_RESC vector on eif_stack.&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	Rescue_body&lt;br /&gt;
&lt;br /&gt;
		-- If there is retry clause, it calls &lt;br /&gt;
		&lt;br /&gt;
	exret&lt;br /&gt;
&lt;br /&gt;
	do&lt;br /&gt;
&lt;br /&gt;
		-- eif_stack: Check top vector of eif_stack is EX_RESC&lt;br /&gt;
&lt;br /&gt;
		-- eif_stack: Override top item of eif_stack with the vector of current routine (saved as local). Change the type of the vector to EX_RETY&lt;br /&gt;
&lt;br /&gt;
		-- eif_trace: Pop off eif_trace, which must be EN_ILVL item&lt;br /&gt;
&lt;br /&gt;
		-- eif_trace: unwind_trace, pop items from eif_trace until EN_ILVL item is found. Restore `exdata' at previous level.&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
		-- If no retry is called, call at the end:&lt;br /&gt;
		&lt;br /&gt;
	exfail&lt;br /&gt;
&lt;br /&gt;
	do&lt;br /&gt;
&lt;br /&gt;
		-- eif_stack: pop EX_RESC from eif_stack&lt;br /&gt;
&lt;br /&gt;
		-- eif_trace: pop EN_ILVL from eif_trace, leaving call failures created by `draise' on stack.&lt;br /&gt;
&lt;br /&gt;
		-- create last_exception (ROUTINE_FAILURE)&lt;br /&gt;
&lt;br /&gt;
		-- eif_stack: call `backtrack' which will pop eif_stack until find the top most jmpbuf.&lt;br /&gt;
&lt;br /&gt;
		-- Call longjmp with the found jmpbuf.&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
exok&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
&lt;br /&gt;
	-- eif_stack: Pop eif_stack until a EX_CALL, EX_RESC, EX_RETY or EX_OSTK is found and popped.&lt;br /&gt;
&lt;br /&gt;
	-- eif_trace: unwind_trace, pop item from eif_trace until we find EN_ILVL item. Restore `exdata' at previous level.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/eiffel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raise an exception (draise, eraise, com_raise, ) ==&lt;br /&gt;
&lt;br /&gt;
*  Create a new item on eif_trace, with the type the exception.&lt;br /&gt;
&lt;br /&gt;
*  Pop and push back eif_stack in order to get information. Fill those information into `exdata'.&lt;br /&gt;
&lt;br /&gt;
*  Setup information for top node in eif_trace.&lt;br /&gt;
&lt;br /&gt;
*  In make_exception, when building trace, traverse eif_stack, and push corresponding items into eif_trace, until jmp pointer is found. In the meantime, if the item is EX_RESC, we change it to EN_OLVL and put into eif_trace.&lt;br /&gt;
&lt;br /&gt;
*  Continue buidling trace from the rest element of eif_stack until root node is reached.&lt;br /&gt;
&lt;br /&gt;
*  Call `back_track' to really pop off items in eif_stack and call longjmp when the first jmp pointer is found.&lt;br /&gt;
&lt;br /&gt;
== System signal handler ==&lt;br /&gt;
&lt;br /&gt;
*  Push an EN_ILVL item on eif_trace&lt;br /&gt;
&lt;br /&gt;
*  Push an EX_HDLR item on eif_stack and setup a jmpbuf&lt;br /&gt;
&lt;br /&gt;
*  Call exception handler and be ready to longjmp back and call eraise to populate the exception.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Exception_mechanism_internals&amp;diff=14510</id>
		<title>Exception mechanism internals</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Exception_mechanism_internals&amp;diff=14510"/>
				<updated>2012-06-26T07:01:14Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: New page: Category:Exception == Overview == This article documents exception handling mechanisms at implementation level, including runtime and code generation.  == Typical execution/trace stack...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Exception]]&lt;br /&gt;
== Overview ==&lt;br /&gt;
This article documents exception handling mechanisms at implementation level, including runtime and code generation.&lt;br /&gt;
&lt;br /&gt;
== Typical execution/trace stack operation in a routine ==&lt;br /&gt;
Once or routine with old variable is slightly different.&lt;br /&gt;
See following pseudocode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;eiffel&amp;gt;&lt;br /&gt;
-- entry&lt;br /&gt;
&lt;br /&gt;
new_exset&lt;br /&gt;
	do&lt;br /&gt;
		-- eif_stack: Create a new vector EX_CALL on eif_stack.&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if not setjmp then&lt;br /&gt;
&lt;br /&gt;
	-- Routine body&lt;br /&gt;
&lt;br /&gt;
else&lt;br /&gt;
&lt;br /&gt;
	exresc&lt;br /&gt;
&lt;br /&gt;
	do&lt;br /&gt;
&lt;br /&gt;
		-- eif_trace: Check the stack of eif_trace top element must be EN_FAIL or EN_RES&lt;br /&gt;
		&lt;br /&gt;
		-- eif_trace: Mark top node as rescued&lt;br /&gt;
&lt;br /&gt;
		-- eif_trace: Create new EN_ILVL item on eif_trace, indicating entering a new level&lt;br /&gt;
&lt;br /&gt;
		-- eif_stack: Create new EX_RESC vector on eif_stack.&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	Rescue_body&lt;br /&gt;
&lt;br /&gt;
		-- If there is retry clause, it calls &lt;br /&gt;
		&lt;br /&gt;
	exret&lt;br /&gt;
&lt;br /&gt;
	do&lt;br /&gt;
&lt;br /&gt;
		-- eif_stack: Check top vector of eif_stack is EX_RESC&lt;br /&gt;
&lt;br /&gt;
		-- eif_stack: Override top item of eif_stack with the vector of current routine (saved as local). Change the type of the vector to EX_RETY&lt;br /&gt;
&lt;br /&gt;
		-- eif_trace: Pop off eif_trace, which must be EN_ILVL item&lt;br /&gt;
&lt;br /&gt;
		-- eif_trace: unwind_trace, pop items from eif_trace until EN_ILVL item is found. Restore `exdata' at previous level.&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
		-- If no retry is called, call at the end:&lt;br /&gt;
		&lt;br /&gt;
	exfail&lt;br /&gt;
&lt;br /&gt;
	do&lt;br /&gt;
&lt;br /&gt;
		-- eif_stack: pop EX_RESC from eif_stack&lt;br /&gt;
&lt;br /&gt;
		-- eif_trace: pop EN_ILVL from eif_trace, leaving call failures created by `draise' on stack.&lt;br /&gt;
&lt;br /&gt;
		-- create last_exception (ROUTINE_FAILURE)&lt;br /&gt;
&lt;br /&gt;
		-- eif_stack: call `backtrack' which will pop eif_stack until find the top most jmpbuf.&lt;br /&gt;
&lt;br /&gt;
		-- Call longjmp with the found jmpbuf.&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
exok&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
&lt;br /&gt;
	-- eif_stack: Pop eif_stack until a EX_CALL, EX_RESC, EX_RETY or EX_OSTK is found and popped.&lt;br /&gt;
&lt;br /&gt;
	-- eif_trace: unwind_trace, pop item from eif_trace until we find EN_ILVL item. Restore `exdata' at previous level.&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/eiffel&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Information_(EIS)_Tool.PNG&amp;diff=14509</id>
		<title>File:Information (EIS) Tool.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Information_(EIS)_Tool.PNG&amp;diff=14509"/>
				<updated>2012-06-26T04:35:34Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: uploaded a new version of &amp;quot;Image:Information (EIS) Tool.PNG&amp;quot;: For 7.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Information (EIS) Tool, screen shot&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14508</id>
		<title>Eiffel Information System</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14508"/>
				<updated>2012-06-26T04:30:50Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Syntax for Annotations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EiffelStudio]]&lt;br /&gt;
[[Category:Eiffel Information System]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The Eiffel Information System (EIS) provides a unified mechanism for linking development objects — classes, features and so on — of Eiffel systems with '''external information'''. This term refers to information other than Eiffel program texts. Usually the tools maintaining external information are separate tools, such as a browser; we call them '''external tools'''. Examples of external information and possible corresponding external tools are:&lt;br /&gt;
* Web page — the default browser&lt;br /&gt;
* PDF document — Acrobat&lt;br /&gt;
* MS Word documents — Microsoft Word&lt;br /&gt;
EIS is also intended to be the standard mechanism for obtaining help on Eiffel and EiffelStudio, replacing previous solutions. In that case &amp;quot;external tools&amp;quot; may actually be Eiffel tools.&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
The basic mechanisms that EIS makes available to users include two categories: outgoing (from Eiffel to external tools), incoming  (the reverse).&lt;br /&gt;
&lt;br /&gt;
* Examples of outgoing mechanisms include:&lt;br /&gt;
** Annotating Eiffel targets, classes and features to include references to external information. Such annotations can include tags.&lt;br /&gt;
** By selecting an annotation in EiffelStudio, automatically open the corresponding external tool to display or edit that information.&lt;br /&gt;
** Provide a list of all external information (in a class, cluster or entire system) corresponding to a specified tag.&lt;br /&gt;
** For a change to the software — either after the change has been performed, or before a contemplated change has been performed — display a list of all external information that may be affected as indicated by the annotations (not implemented in 6.2)&lt;br /&gt;
&lt;br /&gt;
* Examples of incoming mechanisms include:&lt;br /&gt;
** For supported tools, select external information linked to an Eiffel developer object and have EiffelStudio directly open on that object. In 6.2, eiffel: schema is supported on Windows.&lt;br /&gt;
&lt;br /&gt;
== Outgoing ==&lt;br /&gt;
=== Annotations ===&lt;br /&gt;
Annotations may be applicable to:&lt;br /&gt;
&lt;br /&gt;
* An individual class or feature. In this case the annotation figures in the class text, as part of an Eiffel &amp;quot;note&amp;quot; clause (&amp;quot;indexing&amp;quot; is still supported, it depends on which syntax level the user choose).&lt;br /&gt;
* A target, library or cluster. In this case the annotation figures in the associated ECF file; EiffelStudio provides support for entering it through a Information (EIS) Tool.&lt;br /&gt;
&lt;br /&gt;
Most of the following rules use note clauses as examples, but all applicable facilities must be supported by both variants; the syntax is designed to be as close as possible.&lt;br /&gt;
&lt;br /&gt;
The basic way to specify a dependency is to include such an annotation. The required part of every annotation is:&lt;br /&gt;
* The &amp;quot;EIS&amp;quot; marker.&lt;br /&gt;
&lt;br /&gt;
However the following parts are suggested:&lt;br /&gt;
* The &amp;quot;protocol&amp;quot;, indicating the type of external information, and making it possible for EIS to determine the associated external tool. Without the &amp;quot;protocol&amp;quot; part, the source defaults to a web page.&lt;br /&gt;
* The source, which identifies where to find the information itself, for example a URL, or a file name optionally complemented by a page number.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Not all information must be literal: annotations can use variables, defined at various levels including:&lt;br /&gt;
&lt;br /&gt;
* EiffelStudio installation built in variables&lt;br /&gt;
** ISE_WIKI = http://dev.eiffel.com&lt;br /&gt;
** EIFFELROOM = http://www.eiffelroom.com&lt;br /&gt;
** ISE_DOC = http://docs.eiffel.com&lt;br /&gt;
** ISE_DOC_UUID	= http://doc.eiffel.com/isedoc/uuid&lt;br /&gt;
** ISE_DOC_REF = http://doc.eiffel.com/isedoc/eis&lt;br /&gt;
** SYSTEM_PATH, the path of the system in which current entry is written&lt;br /&gt;
* Context related built in variables. These variables can be used in a specific context. For instance, '''feature_name''' refers to the name of the feature in which the annotation is written.&lt;br /&gt;
** feature_name&lt;br /&gt;
** class_name&lt;br /&gt;
** group_name&lt;br /&gt;
** target_name&lt;br /&gt;
** unique_id&lt;br /&gt;
*** The `unique_id' returns a unique id of a class in a compiled system. The id usually consists of target uuid, target name, group name and class name.&lt;br /&gt;
* Individual user preferences (Not implemented)&lt;br /&gt;
* Individual system or library preferences (in ECF)&lt;br /&gt;
* Environment variables&lt;br /&gt;
&lt;br /&gt;
It should be possible to enter an annotation graphically through the EiffelStudio Information (EIS) Tool; in that case the relevant clause (feature, class, cluster, system) will be added automatically.&lt;br /&gt;
&lt;br /&gt;
=== Protocol ===&lt;br /&gt;
&lt;br /&gt;
* URI: This protocol does not need to specified. By default, it will be taken if nothing is specified or unknown protocol is specified.&lt;br /&gt;
* PDF: PDF protocol supports three parameters for now. &amp;quot;type&amp;quot; &amp;quot;page&amp;quot; and &amp;quot;nameddest&amp;quot;. (Windows only)&lt;br /&gt;
** type: &amp;quot;file&amp;quot; is used to open PDF files in the PDF reader. Otherwise it opens in a browser.&lt;br /&gt;
** page: Specify the page number to navigate to.&lt;br /&gt;
** nameddest: Specify the named destination to navigate to.&lt;br /&gt;
* DOC: Microsoft Word document. &amp;quot;bookmark&amp;quot; parameter is supported (Windows Only)&lt;br /&gt;
** bookmark: Name of the bookmark in Word document.&lt;br /&gt;
&lt;br /&gt;
=== Syntax for Annotations ===&lt;br /&gt;
The following example illustrates the basic form of an EIS note entry:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;e&amp;gt;EIS: &amp;quot;name=Project Requirement&amp;quot;, &amp;quot;src=$(SYSTEM_PATH)/docs/requirements.pdf&amp;quot;, &amp;quot;protocol=PDF&amp;quot;, &amp;quot;nameddest=4.1&amp;quot;, &amp;quot;tag=requirement&amp;quot;&amp;lt;/e&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The label (Node_entry as called in the ECMA/ISO Eiffel Standard syntax) is '''EIS''',  '''EIS'''  Note_value tells the Eiffel Information System that this Note_entry is of interest to EIS, as distinct from any other information that might be expressed through a Note_entry. The file name (src) includes '''$PROJ''', referring to a variable — set at any of the above 5 levels, rather than the second one &amp;quot;Context related built in variables&amp;quot; — defining the project location.  The protocol is '''PDF'''. The '''nameddest'''  property (name destination) is a specific property of PDF documents. The tag '''requirement''' indicating that this entry links the enclosing Eiffel class or feature with some part of the requirements document. &lt;br /&gt;
&lt;br /&gt;
Similarly, the following example demonstrates how annotations look like in ECF files:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;note&amp;gt;&lt;br /&gt;
	&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;eis src=&amp;quot;$(ISE_DOC_UUID)/3d96626f-11f3-67a2-dec6-69f7faf4a8d6&amp;quot; tag=&amp;quot;EiffelTime&amp;quot; name=&amp;quot;EiffelTime&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/note&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is only one major difference here, targets in .ecf support automatic entry specification which enables automatic entry for classes in that target. The note element in ECF is supported in [[http://www.eiffel.com/developers/xml/configuration-1-4-0.xsd schema 1.4]] and greater.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Entry ===&lt;br /&gt;
&lt;br /&gt;
Targets in a .ecf file are allowed to specify automatic entry like this:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)/$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
When `auto' is set with `true', automatic entry is enabled in the target. In Info tool, each class in a target with automatic entry enabled displays an entry, actually not existing in code, is bound to a source `src'.&lt;br /&gt;
&lt;br /&gt;
An automatic entry of a class can be overridden too, by specifying &amp;quot;override=true&amp;quot; in one of the written entry, or check the check box in the column of Info tool.&lt;br /&gt;
&lt;br /&gt;
One can modify the automatic entry specification in a target via the first button with an &amp;quot;A&amp;quot; in Info tool. Of course, select a target node in the tree first.&lt;br /&gt;
&lt;br /&gt;
=== Information (EIS) Tool ===&lt;br /&gt;
&lt;br /&gt;
The tool is an output of the EIS outgoing mechanism. Through the tool, users can graphically manage all EIS information in current system. See [[Information (EIS) Tool]] for more information.&lt;br /&gt;
There is a screen shot of the tool.&lt;br /&gt;
&lt;br /&gt;
[[Image:Information_(EIS)_Tool.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Incoming ==&lt;br /&gt;
Incoming mechanism is based on URI, and introduces a new URI scheme: '''eiffel'''. By entering the URI into address of a browser, or clicking on the hyper link, an existing EiffelStudio instance or new EiffelStudio instance will try to resolve the URI and display corresponding resources.&lt;br /&gt;
&lt;br /&gt;
=== URI scheme Syntax ===&lt;br /&gt;
  '''eiffel:?&amp;lt;eiffel-resource&amp;gt;'''&lt;br /&gt;
&amp;lt;eiffel-resource&amp;gt; is a combination of following parts, connected by '''&amp;quot;&amp;amp;&amp;quot;''' if more than one part are required:&lt;br /&gt;
* &amp;lt;system&amp;gt;, in the form of '''system=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of system_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;target&amp;gt;, in the form of '''target=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of target_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;cluster&amp;gt;, in the form of '''cluster=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the cluster.&lt;br /&gt;
* &amp;lt;class&amp;gt;, in the form of '''class=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the class.&lt;br /&gt;
* &amp;lt;feature&amp;gt;, in the form of '''feature=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the feature.&lt;br /&gt;
{{note|All parts above are unordered.}}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
  eiffel:?class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?system=ec.D398E904-E3C8-4F8A-B9E7-6FE493CEA02F&amp;amp;target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
&lt;br /&gt;
=== Protocal Registration (Windows) ===&lt;br /&gt;
The following example shows how to register eiffel scheme on Windows, estudio.exe in this case, to handle an eiffel URI.&lt;br /&gt;
* HKEY_CLASSES_ROOT&lt;br /&gt;
** eiffel&lt;br /&gt;
** (Default) = &amp;quot;URL:Eiffel Protocol&amp;quot;&lt;br /&gt;
** URL Protocol = &amp;quot;&amp;quot;&lt;br /&gt;
*** DefaultIcon&lt;br /&gt;
*** (Default) = &amp;quot;estudio.exe&amp;quot;&lt;br /&gt;
*** shell&lt;br /&gt;
**** open&lt;br /&gt;
***** command&lt;br /&gt;
***** (Default) = &amp;quot;%ISE_EIFFEL%\studio\spec\windows\bin\estudio.exe&amp;quot; /ec_action eisi:&amp;quot;%1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== EiffelStudio Action Protocol (Incoming Implementation) ===&lt;br /&gt;
{{red|(immature and incomplete)}} &amp;lt;br&amp;gt;&lt;br /&gt;
EiffelStudio uses estudio.exe to interact with all existing instances of ec.exe. The protocol is used for this goal.&lt;br /&gt;
The action protocol can be used for those tools that want to control running EiffelStudio instances. For the moment, this is completely transparent to end users because of its immaturity.&lt;br /&gt;
It was designed to fit the requirement of EIS incoming mechanism, with limited extendibility. In the future, as required, it could be designed as XML style, after precise analysis on requirements of all kinds of new functionalities.&lt;br /&gt;
&lt;br /&gt;
The pattern EiffelStudio accept is: &lt;br /&gt;
  [&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;predefined-status&amp;gt;]&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;modulewise-action&amp;gt;&lt;br /&gt;
The part bracketed is optional condition. A command with conditional part is a conditional command.&lt;br /&gt;
Without conditional part, the command is direct command.&lt;br /&gt;
&amp;lt;eiffelstudio-module-ID&amp;gt; refers to a module defined in EiffelStudio. For example, &amp;lt;com.eiffel.compiler&amp;gt;, the compiler module in EiffelStudio; &amp;lt;com.eiffel.eis_incoming&amp;gt;, EIS incoming module.&lt;br /&gt;
&amp;lt;predefined-status&amp;gt; stands for a status of that module, as a conditional status which should trigger the actual &amp;lt;modulewise-action&amp;gt;.&lt;br /&gt;
&amp;lt;modulewise-action&amp;gt; indicate the predefined action a module in EiffelStudio should actually react.&lt;br /&gt;
&lt;br /&gt;
The following are examples now implemented on the purpose of EIS incoming functions:&lt;br /&gt;
  Example: &amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor now.&lt;br /&gt;
&lt;br /&gt;
  Example: &amp;lt;com.eiffel.compiler&amp;gt;&amp;lt;project_ready&amp;gt;&amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor, when the project is ready.&lt;br /&gt;
&lt;br /&gt;
The protocol is loaded through [https://svn.origo.ethz.ch/eiffelstudio/trunk/Src/framework/command_tunnel Command Tunnel Library]. This library is now only implemented on Windows.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14476</id>
		<title>Compiler and encoding</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14476"/>
				<updated>2012-05-31T04:19:27Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Validility */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:compiler]]&lt;br /&gt;
&lt;br /&gt;
From 6.7, the compiler has been equiped with a Unicode parser. The core of the parser only accepts UTF-8 source code, for simplicity and generality. Before source code is passed into the core process of parsing, it is preprocessed and converted into UTF-8.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
=== Data Storage ===&lt;br /&gt;
Abstracted syntax tree now stores STRING_8 as UTF-8 data on each node. There are also different features exporting UTF-8, UTF-32 or the written bytes. &lt;br /&gt;
&lt;br /&gt;
Here is an example of how a character é is represented at various levels.&lt;br /&gt;
&amp;lt;div class=&amp;quot;WordSection1&amp;quot; style=&amp;quot;layout-grid: 15.6pt&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;MsoTableGrid&amp;quot; style=&amp;quot;width: 431.25pt; border-collapse: collapse; border: none&amp;quot; width=&amp;quot;575&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Source encoding&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;UTF-8 (BOM)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;ISO-8859-1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Bytes in source&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;1. {STRING_AS}.value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;2. {STRING_AS}.binary_value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;3. {STRING_AS}.value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;4. {STRING_AS}.string_value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;5. Runtime&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9 (STRING_8)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_8)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Validility ===&lt;br /&gt;
Source code encoding is either explicitly or implicitly specified.&lt;br /&gt;
* Explicit&lt;br /&gt;
** File level: UTF-8 (BOM) is implemented&lt;br /&gt;
** Class level: note clause (not implemented)&lt;br /&gt;
** Configure file: .ecf (not implemented)&lt;br /&gt;
* Implicit&lt;br /&gt;
** Implicit encoding is taken as ISO-8859-1 for compatibility, if no source code encoding is specified.&lt;br /&gt;
&lt;br /&gt;
The following table shows how manifest strings are validated by the compiler:&lt;br /&gt;
{| class=&amp;quot;MsoTableGrid&amp;quot; style=&amp;quot;width: 431.25pt; border-collapse: collapse; border: none&amp;quot; width=&amp;quot;575&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| Explicit Encoding&lt;br /&gt;
| Implicit Encoding (ISO-8859-1)&lt;br /&gt;
|-&lt;br /&gt;
| STRING_8 manifest&lt;br /&gt;
| Unicode point (0-255)?&lt;br /&gt;
| Valid (taken as bytes)&lt;br /&gt;
|-&lt;br /&gt;
| STRING_32 manifest&lt;br /&gt;
| Valid&lt;br /&gt;
| Valid&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14475</id>
		<title>Compiler and encoding</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14475"/>
				<updated>2012-05-31T04:16:35Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Data Storage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:compiler]]&lt;br /&gt;
&lt;br /&gt;
From 6.7, the compiler has been equiped with a Unicode parser. The core of the parser only accepts UTF-8 source code, for simplicity and generality. Before source code is passed into the core process of parsing, it is preprocessed and converted into UTF-8.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
=== Data Storage ===&lt;br /&gt;
Abstracted syntax tree now stores STRING_8 as UTF-8 data on each node. There are also different features exporting UTF-8, UTF-32 or the written bytes. &lt;br /&gt;
&lt;br /&gt;
Here is an example of how a character é is represented at various levels.&lt;br /&gt;
&amp;lt;div class=&amp;quot;WordSection1&amp;quot; style=&amp;quot;layout-grid: 15.6pt&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;MsoTableGrid&amp;quot; style=&amp;quot;width: 431.25pt; border-collapse: collapse; border: none&amp;quot; width=&amp;quot;575&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Source encoding&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;UTF-8 (BOM)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;ISO-8859-1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Bytes in source&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;1. {STRING_AS}.value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;2. {STRING_AS}.binary_value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;3. {STRING_AS}.value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;4. {STRING_AS}.string_value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;5. Runtime&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9 (STRING_8)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_8)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Validility ===&lt;br /&gt;
Source code encoding is either explicitly or implicitly specified.&lt;br /&gt;
* Explicit&lt;br /&gt;
** File level: UTF-8 (BOM) is implemented&lt;br /&gt;
** Class level: note clause (not implemented)&lt;br /&gt;
** Configure file: .ecf (not implemented)&lt;br /&gt;
* Implicit&lt;br /&gt;
** Implicit encoding is taken as ISO-8859-1 for compatibility, if no source code encoding is specified.&lt;br /&gt;
&lt;br /&gt;
The following table shows how manifest strings are validated by the compiler:&lt;br /&gt;
{| class=&amp;quot;MsoTableGrid&amp;quot; style=&amp;quot;width: 431.25pt; border-collapse: collapse; border: none&amp;quot; width=&amp;quot;575&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| Explicit Encoding&lt;br /&gt;
| Implicit Encoding (ISO-8859-1)&lt;br /&gt;
|-&lt;br /&gt;
| STRING_8 manifest&lt;br /&gt;
| Only Standard ASCII is valid (0-127)&lt;br /&gt;
| Valid (taken as bytes)&lt;br /&gt;
|-&lt;br /&gt;
| STRING_32 manifest&lt;br /&gt;
| Valid&lt;br /&gt;
| Valid&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14474</id>
		<title>Compiler and encoding</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14474"/>
				<updated>2012-05-31T03:29:30Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Validility */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:compiler]]&lt;br /&gt;
&lt;br /&gt;
From 6.7, the compiler has been equiped with a Unicode parser. The core of the parser only accepts UTF-8 source code, for simplicity and generality. Before source code is passed into the core process of parsing, it is preprocessed and converted into UTF-8.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
=== Data Storage ===&lt;br /&gt;
Abstracted syntax tree now stores STRING_8 as UTF-8 data on each node. There are also different features exporting UTF-8, UTF-32 or the written bytes. &lt;br /&gt;
&lt;br /&gt;
Here is an example of how a character é is represented at various levels.&lt;br /&gt;
&amp;lt;div class=&amp;quot;WordSection1&amp;quot; style=&amp;quot;layout-grid: 15.6pt&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;MsoTableGrid&amp;quot; style=&amp;quot;width: 431.25pt; border-collapse: collapse; border: none&amp;quot; width=&amp;quot;575&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Source encoding&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;UTF-8 (BOM)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;ISO-8859-1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Bytes in source&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;1. {STRING_AS}.value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;2. {STRING_AS}.binary_value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;3. {STRING_AS}.value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;4. {STRING_AS}.string_value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;5. Runtime&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9 (STRING_8 Rejected)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_8)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Validility ===&lt;br /&gt;
Source code encoding is either explicitly or implicitly specified.&lt;br /&gt;
* Explicit&lt;br /&gt;
** File level: UTF-8 (BOM) is implemented&lt;br /&gt;
** Class level: note clause (not implemented)&lt;br /&gt;
** Configure file: .ecf (not implemented)&lt;br /&gt;
* Implicit&lt;br /&gt;
** Implicit encoding is taken as ISO-8859-1 for compatibility, if no source code encoding is specified.&lt;br /&gt;
&lt;br /&gt;
The following table shows how manifest strings are validated by the compiler:&lt;br /&gt;
{| class=&amp;quot;MsoTableGrid&amp;quot; style=&amp;quot;width: 431.25pt; border-collapse: collapse; border: none&amp;quot; width=&amp;quot;575&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| Explicit Encoding&lt;br /&gt;
| Implicit Encoding (ISO-8859-1)&lt;br /&gt;
|-&lt;br /&gt;
| STRING_8 manifest&lt;br /&gt;
| Only Standard ASCII is valid (0-127)&lt;br /&gt;
| Valid (taken as bytes)&lt;br /&gt;
|-&lt;br /&gt;
| STRING_32 manifest&lt;br /&gt;
| Valid&lt;br /&gt;
| Valid&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14473</id>
		<title>Compiler and encoding</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14473"/>
				<updated>2012-05-31T03:27:40Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Validility */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:compiler]]&lt;br /&gt;
&lt;br /&gt;
From 6.7, the compiler has been equiped with a Unicode parser. The core of the parser only accepts UTF-8 source code, for simplicity and generality. Before source code is passed into the core process of parsing, it is preprocessed and converted into UTF-8.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
=== Data Storage ===&lt;br /&gt;
Abstracted syntax tree now stores STRING_8 as UTF-8 data on each node. There are also different features exporting UTF-8, UTF-32 or the written bytes. &lt;br /&gt;
&lt;br /&gt;
Here is an example of how a character é is represented at various levels.&lt;br /&gt;
&amp;lt;div class=&amp;quot;WordSection1&amp;quot; style=&amp;quot;layout-grid: 15.6pt&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;MsoTableGrid&amp;quot; style=&amp;quot;width: 431.25pt; border-collapse: collapse; border: none&amp;quot; width=&amp;quot;575&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Source encoding&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;UTF-8 (BOM)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;ISO-8859-1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Bytes in source&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;1. {STRING_AS}.value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;2. {STRING_AS}.binary_value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;3. {STRING_AS}.value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;4. {STRING_AS}.string_value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;5. Runtime&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9 (STRING_8 Rejected)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_8)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Validility ===&lt;br /&gt;
Source code encoding is either explicitly or implicitly specified.&lt;br /&gt;
* Explicit&lt;br /&gt;
** File level: UTF-8 (BOM) is implemented&lt;br /&gt;
** Class level: note clause (not implemented)&lt;br /&gt;
** Configure file: .ecf (not implemented)&lt;br /&gt;
* Implicit&lt;br /&gt;
** Implicit encoding is taken as ISO-8859-1 for compatibility, if no source code encoding is specified.&lt;br /&gt;
&lt;br /&gt;
The following table shows how manifest strings are validated by the compiler:&lt;br /&gt;
{|&lt;br /&gt;
| &lt;br /&gt;
| Explicit Encoding&lt;br /&gt;
| Implicit Encoding (ISO-8859-1)&lt;br /&gt;
|-&lt;br /&gt;
| STRING_8 manifest&lt;br /&gt;
| Only Standard ASCII is valid (0-127)&lt;br /&gt;
| Valid (taken as bytes)&lt;br /&gt;
|-&lt;br /&gt;
| STRING_32 manifest&lt;br /&gt;
| Valid&lt;br /&gt;
| Valid&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14472</id>
		<title>Compiler and encoding</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14472"/>
				<updated>2012-05-31T03:11:00Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Internals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:compiler]]&lt;br /&gt;
&lt;br /&gt;
From 6.7, the compiler has been equiped with a Unicode parser. The core of the parser only accepts UTF-8 source code, for simplicity and generality. Before source code is passed into the core process of parsing, it is preprocessed and converted into UTF-8.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
=== Data Storage ===&lt;br /&gt;
Abstracted syntax tree now stores STRING_8 as UTF-8 data on each node. There are also different features exporting UTF-8, UTF-32 or the written bytes. &lt;br /&gt;
&lt;br /&gt;
Here is an example of how a character é is represented at various levels.&lt;br /&gt;
&amp;lt;div class=&amp;quot;WordSection1&amp;quot; style=&amp;quot;layout-grid: 15.6pt&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;MsoTableGrid&amp;quot; style=&amp;quot;width: 431.25pt; border-collapse: collapse; border: none&amp;quot; width=&amp;quot;575&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Source encoding&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;UTF-8 (BOM)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;ISO-8859-1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Bytes in source&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;1. {STRING_AS}.value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;2. {STRING_AS}.binary_value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;3. {STRING_AS}.value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;4. {STRING_AS}.string_value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;5. Runtime&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9 (STRING_8 Rejected)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_8)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Validility ===&lt;br /&gt;
Source code encoding is either explicitly or implicitly specified.&lt;br /&gt;
* Explicit&lt;br /&gt;
** File level: UTF-8 (BOM) is implemented&lt;br /&gt;
** Class level: note clause (not implemented)&lt;br /&gt;
** Configure file: .ecf (not implemented)&lt;br /&gt;
* Implicit&lt;br /&gt;
** Implicit encoding is taken as ISO-8859-1 for compatibility, if no source code encoding is specified.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14471</id>
		<title>Compiler and encoding</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14471"/>
				<updated>2012-05-30T12:04:58Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Internals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:compiler]]&lt;br /&gt;
&lt;br /&gt;
From 6.7, the compiler has been equiped with a Unicode parser. The core of the parser only accepts UTF-8 source code, for simplicity and generality. Before source code is passed into the core process of parsing, it is preprocessed and converted into UTF-8.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
Abstracted syntax tree now stores STRING_8 as UTF-8 data on each node. There are also different features exporting UTF-8, UTF-32 or the written bytes. &lt;br /&gt;
&lt;br /&gt;
Here is an example of how a character é is represented at various levels.&lt;br /&gt;
&amp;lt;div class=&amp;quot;WordSection1&amp;quot; style=&amp;quot;layout-grid: 15.6pt&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;MsoTableGrid&amp;quot; style=&amp;quot;width: 431.25pt; border-collapse: collapse; border: none&amp;quot; width=&amp;quot;575&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Source encoding&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;UTF-8 (BOM)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;ISO-8859-1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Bytes in source&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;1. {STRING_AS}.value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;2. {STRING_AS}.binary_value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;3. {STRING_AS}.value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;4. {STRING_AS}.string_value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;5. Runtime&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9 (STRING_8 Rejected)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_8)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14470</id>
		<title>Compiler and encoding</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14470"/>
				<updated>2012-05-30T12:03:09Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Internals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:compiler]]&lt;br /&gt;
&lt;br /&gt;
From 6.7, the compiler has been equiped with a Unicode parser. The core of the parser only accepts UTF-8 source code, for simplicity and generality. Before source code is passed into the core process of parsing, it is preprocessed and converted into UTF-8.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
Abstracted syntax tree now stores STRING_8 as UTF-8 data on each node. There are also different features exporting UTF-8, UTF-32 or the written bytes. Here is an example of how a character é is represented in various levels.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;WordSection1&amp;quot; style=&amp;quot;layout-grid: 15.6pt&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;MsoTableGrid&amp;quot; style=&amp;quot;width: 431.25pt; border-collapse: collapse; border: none&amp;quot; width=&amp;quot;575&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Source encoding&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;UTF-8 (BOM)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;ISO-8859-1&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;Bytes in source&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;1. {STRING_AS}.value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;2. {STRING_AS}.binary_value&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;3. {STRING_AS}.value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;4. {STRING_AS}.string_value_32&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 147.15pt; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;196&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;5. Runtime&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xC3A9 (STRING_8 Rejected)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 142.05pt; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt&amp;quot; width=&amp;quot;189&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_8)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;EN-US&amp;quot;&amp;gt;0xE9 (STRING_32)&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14469</id>
		<title>Compiler and encoding</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14469"/>
				<updated>2012-05-30T11:34:41Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:compiler]]&lt;br /&gt;
&lt;br /&gt;
From 6.7, the compiler has been equiped with a Unicode parser. The core of the parser only accepts UTF-8 source code, for simplicity and generality. Before source code is passed into the core process of parsing, it is preprocessed and converted into UTF-8.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
Abstracted syntax tree now stores STRING_8 as UTF-8 data on each node. There are also different features exporting UTF-8, UTF-32 or the written bytes. Here is an example of how a character é is represented in various levels.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14468</id>
		<title>Compiler and encoding</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Compiler_and_encoding&amp;diff=14468"/>
				<updated>2012-05-30T11:00:51Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: New page: Category:compiler  From 6.7, the compiler has been equiped with a Unicode parser. The core of the parser only accept UTF-8 source code, for simplicity and generality. Before source cod...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:compiler]]&lt;br /&gt;
&lt;br /&gt;
From 6.7, the compiler has been equiped with a Unicode parser. The core of the parser only accept UTF-8 source code, for simplicity and generality. Before source code is passed into the core process of parsing, it is preprocessed and converted into UTF-8.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14467</id>
		<title>Eiffel Information System</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14467"/>
				<updated>2012-05-07T11:16:35Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EiffelStudio]]&lt;br /&gt;
[[Category:Eiffel Information System]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The Eiffel Information System (EIS) provides a unified mechanism for linking development objects — classes, features and so on — of Eiffel systems with '''external information'''. This term refers to information other than Eiffel program texts. Usually the tools maintaining external information are separate tools, such as a browser; we call them '''external tools'''. Examples of external information and possible corresponding external tools are:&lt;br /&gt;
* Web page — the default browser&lt;br /&gt;
* PDF document — Acrobat&lt;br /&gt;
* MS Word documents — Microsoft Word&lt;br /&gt;
EIS is also intended to be the standard mechanism for obtaining help on Eiffel and EiffelStudio, replacing previous solutions. In that case &amp;quot;external tools&amp;quot; may actually be Eiffel tools.&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
The basic mechanisms that EIS makes available to users include two categories: outgoing (from Eiffel to external tools), incoming  (the reverse).&lt;br /&gt;
&lt;br /&gt;
* Examples of outgoing mechanisms include:&lt;br /&gt;
** Annotating Eiffel targets, classes and features to include references to external information. Such annotations can include tags.&lt;br /&gt;
** By selecting an annotation in EiffelStudio, automatically open the corresponding external tool to display or edit that information.&lt;br /&gt;
** Provide a list of all external information (in a class, cluster or entire system) corresponding to a specified tag.&lt;br /&gt;
** For a change to the software — either after the change has been performed, or before a contemplated change has been performed — display a list of all external information that may be affected as indicated by the annotations (not implemented in 6.2)&lt;br /&gt;
&lt;br /&gt;
* Examples of incoming mechanisms include:&lt;br /&gt;
** For supported tools, select external information linked to an Eiffel developer object and have EiffelStudio directly open on that object. In 6.2, eiffel: schema is supported on Windows.&lt;br /&gt;
&lt;br /&gt;
== Outgoing ==&lt;br /&gt;
=== Annotations ===&lt;br /&gt;
Annotations may be applicable to:&lt;br /&gt;
&lt;br /&gt;
* An individual class or feature. In this case the annotation figures in the class text, as part of an Eiffel &amp;quot;note&amp;quot; clause (&amp;quot;indexing&amp;quot; is still supported, it depends on which syntax level the user choose).&lt;br /&gt;
* A target, library or cluster. In this case the annotation figures in the associated ECF file; EiffelStudio provides support for entering it through a Information (EIS) Tool.&lt;br /&gt;
&lt;br /&gt;
Most of the following rules use note clauses as examples, but all applicable facilities must be supported by both variants; the syntax is designed to be as close as possible.&lt;br /&gt;
&lt;br /&gt;
The basic way to specify a dependency is to include such an annotation. The required part of every annotation is:&lt;br /&gt;
* The &amp;quot;EIS&amp;quot; marker.&lt;br /&gt;
&lt;br /&gt;
However the following parts are suggested:&lt;br /&gt;
* The &amp;quot;protocol&amp;quot;, indicating the type of external information, and making it possible for EIS to determine the associated external tool. Without the &amp;quot;protocol&amp;quot; part, the source defaults to a web page.&lt;br /&gt;
* The source, which identifies where to find the information itself, for example a URL, or a file name optionally complemented by a page number.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Not all information must be literal: annotations can use variables, defined at various levels including:&lt;br /&gt;
&lt;br /&gt;
* EiffelStudio installation built in variables&lt;br /&gt;
** ISE_WIKI = http://dev.eiffel.com&lt;br /&gt;
** EIFFELROOM = http://www.eiffelroom.com&lt;br /&gt;
** ISE_DOC = http://docs.eiffel.com&lt;br /&gt;
** ISE_DOC_UUID	= http://doc.eiffel.com/isedoc/uuid&lt;br /&gt;
** ISE_DOC_REF = http://doc.eiffel.com/isedoc/eis&lt;br /&gt;
** SYSTEM_PATH, the path of the system in which current entry is written&lt;br /&gt;
* Context related built in variables. These variables can be used in a specific context. For instance, '''feature_name''' refers to the name of the feature in which the annotation is written.&lt;br /&gt;
** feature_name&lt;br /&gt;
** class_name&lt;br /&gt;
** group_name&lt;br /&gt;
** target_name&lt;br /&gt;
** unique_id&lt;br /&gt;
*** The `unique_id' returns a unique id of a class in a compiled system. The id usually consists of target uuid, target name, group name and class name.&lt;br /&gt;
* Individual user preferences (Not implemented)&lt;br /&gt;
* Individual system or library preferences (in ECF)&lt;br /&gt;
* Environment variables&lt;br /&gt;
&lt;br /&gt;
It should be possible to enter an annotation graphically through the EiffelStudio Information (EIS) Tool; in that case the relevant clause (feature, class, cluster, system) will be added automatically.&lt;br /&gt;
&lt;br /&gt;
=== Protocol ===&lt;br /&gt;
&lt;br /&gt;
* URI: This protocol does not need to specified. By default, it will be taken if nothing is specified or unknown protocol is specified.&lt;br /&gt;
* PDF: PDF protocol supports three parameters for now. &amp;quot;type&amp;quot; &amp;quot;page&amp;quot; and &amp;quot;nameddest&amp;quot;. (Windows only)&lt;br /&gt;
** type: &amp;quot;file&amp;quot; is used to open PDF files in the PDF reader. Otherwise it opens in a browser.&lt;br /&gt;
** page: Specify the page number to navigate to.&lt;br /&gt;
** nameddest: Specify the named destination to navigate to.&lt;br /&gt;
* DOC: Microsoft Word document. &amp;quot;bookmark&amp;quot; parameter is supported (Windows Only)&lt;br /&gt;
** bookmark: Name of the bookmark in Word document.&lt;br /&gt;
&lt;br /&gt;
=== Syntax for Annotations ===&lt;br /&gt;
The following example illustrates the basic form of an EIS note entry:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;e&amp;gt;EIS: &amp;quot;name=Project Requirement&amp;quot;, &amp;quot;src=$(PROJ)/docs/requirements.pdf&amp;quot;, &amp;quot;protocol=PDF&amp;quot;, &amp;quot;nameddest=4.1&amp;quot;, &amp;quot;tag=requirement&amp;quot;&amp;lt;/e&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The label (Node_entry as called in the ECMA/ISO Eiffel Standard syntax) is '''EIS''',  '''EIS'''  Note_value tells the Eiffel Information System that this Note_entry is of interest to EIS, as distinct from any other information that might be expressed through a Note_entry. The file name (src) includes '''$PROJ''', referring to a variable — set at any of the above 5 levels, rather than the second one &amp;quot;Context related built in variables&amp;quot; — defining the project location.  The protocol is '''PDF'''. The '''nameddest'''  property (name destination) is a specific property of PDF documents. The tag '''requirement''' indicating that this entry links the enclosing Eiffel class or feature with some part of the requirements document. &lt;br /&gt;
&lt;br /&gt;
Similarly, the following example demonstrates how annotations look like in ECF files:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;note&amp;gt;&lt;br /&gt;
	&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;eis src=&amp;quot;$(ISE_DOC_UUID)/3d96626f-11f3-67a2-dec6-69f7faf4a8d6&amp;quot; tag=&amp;quot;EiffelTime&amp;quot; name=&amp;quot;EiffelTime&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/note&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is only one major difference here, targets in .ecf support automatic entry specification which enables automatic entry for classes in that target. The note element in ECF is supported in [[http://www.eiffel.com/developers/xml/configuration-1-4-0.xsd schema 1.4]] and greater.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Entry ===&lt;br /&gt;
&lt;br /&gt;
Targets in a .ecf file are allowed to specify automatic entry like this:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)/$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
When `auto' is set with `true', automatic entry is enabled in the target. In Info tool, each class in a target with automatic entry enabled displays an entry, actually not existing in code, is bound to a source `src'.&lt;br /&gt;
&lt;br /&gt;
An automatic entry of a class can be overridden too, by specifying &amp;quot;override=true&amp;quot; in one of the written entry, or check the check box in the column of Info tool.&lt;br /&gt;
&lt;br /&gt;
One can modify the automatic entry specification in a target via the first button with an &amp;quot;A&amp;quot; in Info tool. Of course, select a target node in the tree first.&lt;br /&gt;
&lt;br /&gt;
=== Information (EIS) Tool ===&lt;br /&gt;
&lt;br /&gt;
The tool is an output of the EIS outgoing mechanism. Through the tool, users can graphically manage all EIS information in current system. See [[Information (EIS) Tool]] for more information.&lt;br /&gt;
There is a screen shot of the tool.&lt;br /&gt;
&lt;br /&gt;
[[Image:Information_(EIS)_Tool.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Incoming ==&lt;br /&gt;
Incoming mechanism is based on URI, and introduces a new URI scheme: '''eiffel'''. By entering the URI into address of a browser, or clicking on the hyper link, an existing EiffelStudio instance or new EiffelStudio instance will try to resolve the URI and display corresponding resources.&lt;br /&gt;
&lt;br /&gt;
=== URI scheme Syntax ===&lt;br /&gt;
  '''eiffel:?&amp;lt;eiffel-resource&amp;gt;'''&lt;br /&gt;
&amp;lt;eiffel-resource&amp;gt; is a combination of following parts, connected by '''&amp;quot;&amp;amp;&amp;quot;''' if more than one part are required:&lt;br /&gt;
* &amp;lt;system&amp;gt;, in the form of '''system=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of system_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;target&amp;gt;, in the form of '''target=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of target_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;cluster&amp;gt;, in the form of '''cluster=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the cluster.&lt;br /&gt;
* &amp;lt;class&amp;gt;, in the form of '''class=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the class.&lt;br /&gt;
* &amp;lt;feature&amp;gt;, in the form of '''feature=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the feature.&lt;br /&gt;
{{note|All parts above are unordered.}}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
  eiffel:?class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?system=ec.D398E904-E3C8-4F8A-B9E7-6FE493CEA02F&amp;amp;target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
&lt;br /&gt;
=== Protocal Registration (Windows) ===&lt;br /&gt;
The following example shows how to register eiffel scheme on Windows, estudio.exe in this case, to handle an eiffel URI.&lt;br /&gt;
* HKEY_CLASSES_ROOT&lt;br /&gt;
** eiffel&lt;br /&gt;
** (Default) = &amp;quot;URL:Eiffel Protocol&amp;quot;&lt;br /&gt;
** URL Protocol = &amp;quot;&amp;quot;&lt;br /&gt;
*** DefaultIcon&lt;br /&gt;
*** (Default) = &amp;quot;estudio.exe&amp;quot;&lt;br /&gt;
*** shell&lt;br /&gt;
**** open&lt;br /&gt;
***** command&lt;br /&gt;
***** (Default) = &amp;quot;%ISE_EIFFEL%\studio\spec\windows\bin\estudio.exe&amp;quot; /ec_action eisi:&amp;quot;%1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== EiffelStudio Action Protocol (Incoming Implementation) ===&lt;br /&gt;
{{red|(immature and incomplete)}} &amp;lt;br&amp;gt;&lt;br /&gt;
EiffelStudio uses estudio.exe to interact with all existing instances of ec.exe. The protocol is used for this goal.&lt;br /&gt;
The action protocol can be used for those tools that want to control running EiffelStudio instances. For the moment, this is completely transparent to end users because of its immaturity.&lt;br /&gt;
It was designed to fit the requirement of EIS incoming mechanism, with limited extendibility. In the future, as required, it could be designed as XML style, after precise analysis on requirements of all kinds of new functionalities.&lt;br /&gt;
&lt;br /&gt;
The pattern EiffelStudio accept is: &lt;br /&gt;
  [&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;predefined-status&amp;gt;]&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;modulewise-action&amp;gt;&lt;br /&gt;
The part bracketed is optional condition. A command with conditional part is a conditional command.&lt;br /&gt;
Without conditional part, the command is direct command.&lt;br /&gt;
&amp;lt;eiffelstudio-module-ID&amp;gt; refers to a module defined in EiffelStudio. For example, &amp;lt;com.eiffel.compiler&amp;gt;, the compiler module in EiffelStudio; &amp;lt;com.eiffel.eis_incoming&amp;gt;, EIS incoming module.&lt;br /&gt;
&amp;lt;predefined-status&amp;gt; stands for a status of that module, as a conditional status which should trigger the actual &amp;lt;modulewise-action&amp;gt;.&lt;br /&gt;
&amp;lt;modulewise-action&amp;gt; indicate the predefined action a module in EiffelStudio should actually react.&lt;br /&gt;
&lt;br /&gt;
The following are examples now implemented on the purpose of EIS incoming functions:&lt;br /&gt;
  Example: &amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor now.&lt;br /&gt;
&lt;br /&gt;
  Example: &amp;lt;com.eiffel.compiler&amp;gt;&amp;lt;project_ready&amp;gt;&amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor, when the project is ready.&lt;br /&gt;
&lt;br /&gt;
The protocol is loaded through [https://svn.origo.ethz.ch/eiffelstudio/trunk/Src/framework/command_tunnel Command Tunnel Library]. This library is now only implemented on Windows.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14466</id>
		<title>Eiffel Information System</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14466"/>
				<updated>2012-05-07T11:15:19Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Protocol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EiffelStudio]]&lt;br /&gt;
[[Category:Eiffel Information System]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The Eiffel Information System (EIS) provides a unified mechanism for linking development objects — classes, features and so on — of Eiffel systems with '''external information'''. This term refers to information other than Eiffel program texts. Usually the tools maintaining external information are separate tools, such as a browser; we call them '''external tools'''. Examples of external information and possible corresponding external tools are:&lt;br /&gt;
* Web page — the default browser&lt;br /&gt;
* PDF document — Acrobat&lt;br /&gt;
* MS Word documents — Microsoft Word&lt;br /&gt;
EIS is also intended to be the standard mechanism for obtaining help on Eiffel and EiffelStudio, replacing previous solutions. In that case &amp;quot;external tools&amp;quot; may actually be Eiffel tools.&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
The basic mechanisms that EIS makes available to users include two categories: outgoing (from Eiffel to external tools), incoming  (the reverse).&lt;br /&gt;
&lt;br /&gt;
* Examples of outgoing mechanisms include:&lt;br /&gt;
** Annotating Eiffel targets, classes and features to include references to external information. Such annotations can include tags.&lt;br /&gt;
** By selecting an annotation in EiffelStudio, automatically open the corresponding external tool to display or edit that information.&lt;br /&gt;
** Provide a list of all external information (in a class, cluster or entire system) corresponding to a specified tag.&lt;br /&gt;
** For a change to the software — either after the change has been performed, or before a contemplated change has been performed — display a list of all external information that may be affected as indicated by the annotations (not implemented in 6.2)&lt;br /&gt;
&lt;br /&gt;
* Examples of incoming mechanisms include:&lt;br /&gt;
** For supported tools, select external information linked to an Eiffel developer object and have EiffelStudio directly open on that object. In 6.2, eiffel: schema is supported on Windows.&lt;br /&gt;
&lt;br /&gt;
== Outgoing ==&lt;br /&gt;
=== Annotations ===&lt;br /&gt;
Annotations may be applicable to:&lt;br /&gt;
&lt;br /&gt;
* An individual class or feature. In this case the annotation figures in the class text, as part of an Eiffel &amp;quot;note&amp;quot; clause (&amp;quot;indexing&amp;quot; is still supported, it depends on which syntax level the user choose).&lt;br /&gt;
* A target, library or cluster. In this case the annotation figures in the associated ECF file; EiffelStudio provides support for entering it through a Information (EIS) Tool.&lt;br /&gt;
&lt;br /&gt;
Most of the following rules use note clauses as examples, but all applicable facilities must be supported by both variants; the syntax is designed to be as close as possible.&lt;br /&gt;
&lt;br /&gt;
The basic way to specify a dependency is to include such an annotation. The required part of every annotation is:&lt;br /&gt;
* The &amp;quot;EIS&amp;quot; marker.&lt;br /&gt;
&lt;br /&gt;
However the following parts are suggested:&lt;br /&gt;
* The &amp;quot;protocol&amp;quot;, indicating the type of external information, and making it possible for EIS to determine the associated external tool. Without the &amp;quot;protocol&amp;quot; part, the source defaults to a web page.&lt;br /&gt;
* The source, which identifies where to find the information itself, for example a URL, or a file name optionally complemented by a page number.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Not all information must be literal: annotations can use variables, defined at various levels including:&lt;br /&gt;
&lt;br /&gt;
* EiffelStudio installation built in variables&lt;br /&gt;
** ISE_WIKI = http://dev.eiffel.com&lt;br /&gt;
** EIFFELROOM = http://www.eiffelroom.com&lt;br /&gt;
** ISE_DOC = http://docs.eiffel.com&lt;br /&gt;
** ISE_DOC_UUID	= http://doc.eiffel.com/isedoc/uuid&lt;br /&gt;
** ISE_DOC_REF = http://doc.eiffel.com/isedoc/eis&lt;br /&gt;
** SYSTEM_PATH, the written location of current entry&lt;br /&gt;
* Context related built in variables. These variables can be used in a specific context. For instance, '''feature_name''' refers to the name of the feature in which the annotation is written.&lt;br /&gt;
** feature_name&lt;br /&gt;
** class_name&lt;br /&gt;
** group_name&lt;br /&gt;
** target_name&lt;br /&gt;
** unique_id&lt;br /&gt;
*** The `unique_id' returns a unique id of a class in a compiled system. The id usually consists of target uuid, target name, group name and class name.&lt;br /&gt;
* Individual user preferences (Not implemented)&lt;br /&gt;
* Individual system or library preferences (in ECF)&lt;br /&gt;
* Environment variables&lt;br /&gt;
&lt;br /&gt;
It should be possible to enter an annotation graphically through the EiffelStudio Information (EIS) Tool; in that case the relevant clause (feature, class, cluster, system) will be added automatically.&lt;br /&gt;
&lt;br /&gt;
=== Protocol ===&lt;br /&gt;
&lt;br /&gt;
* URI: This protocol does not need to specified. By default, it will be taken if nothing is specified or unknown protocol is specified.&lt;br /&gt;
* PDF: PDF protocol supports three parameters for now. &amp;quot;type&amp;quot; &amp;quot;page&amp;quot; and &amp;quot;nameddest&amp;quot;. (Windows only)&lt;br /&gt;
** type: &amp;quot;file&amp;quot; is used to open PDF files in the PDF reader. Otherwise it opens in a browser.&lt;br /&gt;
** page: Specify the page number to navigate to.&lt;br /&gt;
** nameddest: Specify the named destination to navigate to.&lt;br /&gt;
* DOC: Microsoft Word document. &amp;quot;bookmark&amp;quot; parameter is supported (Windows Only)&lt;br /&gt;
** bookmark: Name of the bookmark in Word document.&lt;br /&gt;
&lt;br /&gt;
=== Syntax for Annotations ===&lt;br /&gt;
The following example illustrates the basic form of an EIS note entry:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;e&amp;gt;EIS: &amp;quot;name=Project Requirement&amp;quot;, &amp;quot;src=$(PROJ)/docs/requirements.pdf&amp;quot;, &amp;quot;protocol=PDF&amp;quot;, &amp;quot;nameddest=4.1&amp;quot;, &amp;quot;tag=requirement&amp;quot;&amp;lt;/e&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The label (Node_entry as called in the ECMA/ISO Eiffel Standard syntax) is '''EIS''',  '''EIS'''  Note_value tells the Eiffel Information System that this Note_entry is of interest to EIS, as distinct from any other information that might be expressed through a Note_entry. The file name (src) includes '''$PROJ''', referring to a variable — set at any of the above 5 levels, rather than the second one &amp;quot;Context related built in variables&amp;quot; — defining the project location.  The protocol is '''PDF'''. The '''nameddest'''  property (name destination) is a specific property of PDF documents. The tag '''requirement''' indicating that this entry links the enclosing Eiffel class or feature with some part of the requirements document. &lt;br /&gt;
&lt;br /&gt;
Similarly, the following example demonstrates how annotations look like in ECF files:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;note&amp;gt;&lt;br /&gt;
	&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;eis src=&amp;quot;$(ISE_DOC_UUID)/3d96626f-11f3-67a2-dec6-69f7faf4a8d6&amp;quot; tag=&amp;quot;EiffelTime&amp;quot; name=&amp;quot;EiffelTime&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/note&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is only one major difference here, targets in .ecf support automatic entry specification which enables automatic entry for classes in that target. The note element in ECF is supported in [[http://www.eiffel.com/developers/xml/configuration-1-4-0.xsd schema 1.4]] and greater.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Entry ===&lt;br /&gt;
&lt;br /&gt;
Targets in a .ecf file are allowed to specify automatic entry like this:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)/$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
When `auto' is set with `true', automatic entry is enabled in the target. In Info tool, each class in a target with automatic entry enabled displays an entry, actually not existing in code, is bound to a source `src'.&lt;br /&gt;
&lt;br /&gt;
An automatic entry of a class can be overridden too, by specifying &amp;quot;override=true&amp;quot; in one of the written entry, or check the check box in the column of Info tool.&lt;br /&gt;
&lt;br /&gt;
One can modify the automatic entry specification in a target via the first button with an &amp;quot;A&amp;quot; in Info tool. Of course, select a target node in the tree first.&lt;br /&gt;
&lt;br /&gt;
=== Information (EIS) Tool ===&lt;br /&gt;
&lt;br /&gt;
The tool is an output of the EIS outgoing mechanism. Through the tool, users can graphically manage all EIS information in current system. See [[Information (EIS) Tool]] for more information.&lt;br /&gt;
There is a screen shot of the tool.&lt;br /&gt;
&lt;br /&gt;
[[Image:Information_(EIS)_Tool.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Incoming ==&lt;br /&gt;
Incoming mechanism is based on URI, and introduces a new URI scheme: '''eiffel'''. By entering the URI into address of a browser, or clicking on the hyper link, an existing EiffelStudio instance or new EiffelStudio instance will try to resolve the URI and display corresponding resources.&lt;br /&gt;
&lt;br /&gt;
=== URI scheme Syntax ===&lt;br /&gt;
  '''eiffel:?&amp;lt;eiffel-resource&amp;gt;'''&lt;br /&gt;
&amp;lt;eiffel-resource&amp;gt; is a combination of following parts, connected by '''&amp;quot;&amp;amp;&amp;quot;''' if more than one part are required:&lt;br /&gt;
* &amp;lt;system&amp;gt;, in the form of '''system=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of system_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;target&amp;gt;, in the form of '''target=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of target_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;cluster&amp;gt;, in the form of '''cluster=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the cluster.&lt;br /&gt;
* &amp;lt;class&amp;gt;, in the form of '''class=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the class.&lt;br /&gt;
* &amp;lt;feature&amp;gt;, in the form of '''feature=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the feature.&lt;br /&gt;
{{note|All parts above are unordered.}}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
  eiffel:?class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?system=ec.D398E904-E3C8-4F8A-B9E7-6FE493CEA02F&amp;amp;target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
&lt;br /&gt;
=== Protocal Registration (Windows) ===&lt;br /&gt;
The following example shows how to register eiffel scheme on Windows, estudio.exe in this case, to handle an eiffel URI.&lt;br /&gt;
* HKEY_CLASSES_ROOT&lt;br /&gt;
** eiffel&lt;br /&gt;
** (Default) = &amp;quot;URL:Eiffel Protocol&amp;quot;&lt;br /&gt;
** URL Protocol = &amp;quot;&amp;quot;&lt;br /&gt;
*** DefaultIcon&lt;br /&gt;
*** (Default) = &amp;quot;estudio.exe&amp;quot;&lt;br /&gt;
*** shell&lt;br /&gt;
**** open&lt;br /&gt;
***** command&lt;br /&gt;
***** (Default) = &amp;quot;%ISE_EIFFEL%\studio\spec\windows\bin\estudio.exe&amp;quot; /ec_action eisi:&amp;quot;%1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== EiffelStudio Action Protocol (Incoming Implementation) ===&lt;br /&gt;
{{red|(immature and incomplete)}} &amp;lt;br&amp;gt;&lt;br /&gt;
EiffelStudio uses estudio.exe to interact with all existing instances of ec.exe. The protocol is used for this goal.&lt;br /&gt;
The action protocol can be used for those tools that want to control running EiffelStudio instances. For the moment, this is completely transparent to end users because of its immaturity.&lt;br /&gt;
It was designed to fit the requirement of EIS incoming mechanism, with limited extendibility. In the future, as required, it could be designed as XML style, after precise analysis on requirements of all kinds of new functionalities.&lt;br /&gt;
&lt;br /&gt;
The pattern EiffelStudio accept is: &lt;br /&gt;
  [&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;predefined-status&amp;gt;]&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;modulewise-action&amp;gt;&lt;br /&gt;
The part bracketed is optional condition. A command with conditional part is a conditional command.&lt;br /&gt;
Without conditional part, the command is direct command.&lt;br /&gt;
&amp;lt;eiffelstudio-module-ID&amp;gt; refers to a module defined in EiffelStudio. For example, &amp;lt;com.eiffel.compiler&amp;gt;, the compiler module in EiffelStudio; &amp;lt;com.eiffel.eis_incoming&amp;gt;, EIS incoming module.&lt;br /&gt;
&amp;lt;predefined-status&amp;gt; stands for a status of that module, as a conditional status which should trigger the actual &amp;lt;modulewise-action&amp;gt;.&lt;br /&gt;
&amp;lt;modulewise-action&amp;gt; indicate the predefined action a module in EiffelStudio should actually react.&lt;br /&gt;
&lt;br /&gt;
The following are examples now implemented on the purpose of EIS incoming functions:&lt;br /&gt;
  Example: &amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor now.&lt;br /&gt;
&lt;br /&gt;
  Example: &amp;lt;com.eiffel.compiler&amp;gt;&amp;lt;project_ready&amp;gt;&amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor, when the project is ready.&lt;br /&gt;
&lt;br /&gt;
The protocol is loaded through [https://svn.origo.ethz.ch/eiffelstudio/trunk/Src/framework/command_tunnel Command Tunnel Library]. This library is now only implemented on Windows.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14465</id>
		<title>Eiffel Information System</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14465"/>
				<updated>2012-05-07T11:13:43Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EiffelStudio]]&lt;br /&gt;
[[Category:Eiffel Information System]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The Eiffel Information System (EIS) provides a unified mechanism for linking development objects — classes, features and so on — of Eiffel systems with '''external information'''. This term refers to information other than Eiffel program texts. Usually the tools maintaining external information are separate tools, such as a browser; we call them '''external tools'''. Examples of external information and possible corresponding external tools are:&lt;br /&gt;
* Web page — the default browser&lt;br /&gt;
* PDF document — Acrobat&lt;br /&gt;
* MS Word documents — Microsoft Word&lt;br /&gt;
EIS is also intended to be the standard mechanism for obtaining help on Eiffel and EiffelStudio, replacing previous solutions. In that case &amp;quot;external tools&amp;quot; may actually be Eiffel tools.&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
The basic mechanisms that EIS makes available to users include two categories: outgoing (from Eiffel to external tools), incoming  (the reverse).&lt;br /&gt;
&lt;br /&gt;
* Examples of outgoing mechanisms include:&lt;br /&gt;
** Annotating Eiffel targets, classes and features to include references to external information. Such annotations can include tags.&lt;br /&gt;
** By selecting an annotation in EiffelStudio, automatically open the corresponding external tool to display or edit that information.&lt;br /&gt;
** Provide a list of all external information (in a class, cluster or entire system) corresponding to a specified tag.&lt;br /&gt;
** For a change to the software — either after the change has been performed, or before a contemplated change has been performed — display a list of all external information that may be affected as indicated by the annotations (not implemented in 6.2)&lt;br /&gt;
&lt;br /&gt;
* Examples of incoming mechanisms include:&lt;br /&gt;
** For supported tools, select external information linked to an Eiffel developer object and have EiffelStudio directly open on that object. In 6.2, eiffel: schema is supported on Windows.&lt;br /&gt;
&lt;br /&gt;
== Outgoing ==&lt;br /&gt;
=== Annotations ===&lt;br /&gt;
Annotations may be applicable to:&lt;br /&gt;
&lt;br /&gt;
* An individual class or feature. In this case the annotation figures in the class text, as part of an Eiffel &amp;quot;note&amp;quot; clause (&amp;quot;indexing&amp;quot; is still supported, it depends on which syntax level the user choose).&lt;br /&gt;
* A target, library or cluster. In this case the annotation figures in the associated ECF file; EiffelStudio provides support for entering it through a Information (EIS) Tool.&lt;br /&gt;
&lt;br /&gt;
Most of the following rules use note clauses as examples, but all applicable facilities must be supported by both variants; the syntax is designed to be as close as possible.&lt;br /&gt;
&lt;br /&gt;
The basic way to specify a dependency is to include such an annotation. The required part of every annotation is:&lt;br /&gt;
* The &amp;quot;EIS&amp;quot; marker.&lt;br /&gt;
&lt;br /&gt;
However the following parts are suggested:&lt;br /&gt;
* The &amp;quot;protocol&amp;quot;, indicating the type of external information, and making it possible for EIS to determine the associated external tool. Without the &amp;quot;protocol&amp;quot; part, the source defaults to a web page.&lt;br /&gt;
* The source, which identifies where to find the information itself, for example a URL, or a file name optionally complemented by a page number.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Not all information must be literal: annotations can use variables, defined at various levels including:&lt;br /&gt;
&lt;br /&gt;
* EiffelStudio installation built in variables&lt;br /&gt;
** ISE_WIKI = http://dev.eiffel.com&lt;br /&gt;
** EIFFELROOM = http://www.eiffelroom.com&lt;br /&gt;
** ISE_DOC = http://docs.eiffel.com&lt;br /&gt;
** ISE_DOC_UUID	= http://doc.eiffel.com/isedoc/uuid&lt;br /&gt;
** ISE_DOC_REF = http://doc.eiffel.com/isedoc/eis&lt;br /&gt;
** SYSTEM_PATH, the written location of current entry&lt;br /&gt;
* Context related built in variables. These variables can be used in a specific context. For instance, '''feature_name''' refers to the name of the feature in which the annotation is written.&lt;br /&gt;
** feature_name&lt;br /&gt;
** class_name&lt;br /&gt;
** group_name&lt;br /&gt;
** target_name&lt;br /&gt;
** unique_id&lt;br /&gt;
*** The `unique_id' returns a unique id of a class in a compiled system. The id usually consists of target uuid, target name, group name and class name.&lt;br /&gt;
* Individual user preferences (Not implemented)&lt;br /&gt;
* Individual system or library preferences (in ECF)&lt;br /&gt;
* Environment variables&lt;br /&gt;
&lt;br /&gt;
It should be possible to enter an annotation graphically through the EiffelStudio Information (EIS) Tool; in that case the relevant clause (feature, class, cluster, system) will be added automatically.&lt;br /&gt;
&lt;br /&gt;
=== Protocol ===&lt;br /&gt;
&lt;br /&gt;
* URI: This protocol does not need to specified. By default, it will be taken if nothing is specified or unknown protocol is specified.&lt;br /&gt;
* PDF: PDF protocol supports three attributes for now. &amp;quot;type&amp;quot; &amp;quot;page&amp;quot; and &amp;quot;nameddest&amp;quot;. (Windows only)&lt;br /&gt;
** type: &amp;quot;file&amp;quot; is used to open PDF files in the PDF reader. Otherwise it opens in a browser.&lt;br /&gt;
** page: Specify the page number to navigate to.&lt;br /&gt;
** nameddest: Specify the named destination to navigate to.&lt;br /&gt;
* DOC: Microsoft Word document. (Not implemented)&lt;br /&gt;
&lt;br /&gt;
=== Syntax for Annotations ===&lt;br /&gt;
The following example illustrates the basic form of an EIS note entry:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;e&amp;gt;EIS: &amp;quot;name=Project Requirement&amp;quot;, &amp;quot;src=$(PROJ)/docs/requirements.pdf&amp;quot;, &amp;quot;protocol=PDF&amp;quot;, &amp;quot;nameddest=4.1&amp;quot;, &amp;quot;tag=requirement&amp;quot;&amp;lt;/e&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The label (Node_entry as called in the ECMA/ISO Eiffel Standard syntax) is '''EIS''',  '''EIS'''  Note_value tells the Eiffel Information System that this Note_entry is of interest to EIS, as distinct from any other information that might be expressed through a Note_entry. The file name (src) includes '''$PROJ''', referring to a variable — set at any of the above 5 levels, rather than the second one &amp;quot;Context related built in variables&amp;quot; — defining the project location.  The protocol is '''PDF'''. The '''nameddest'''  property (name destination) is a specific property of PDF documents. The tag '''requirement''' indicating that this entry links the enclosing Eiffel class or feature with some part of the requirements document. &lt;br /&gt;
&lt;br /&gt;
Similarly, the following example demonstrates how annotations look like in ECF files:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;note&amp;gt;&lt;br /&gt;
	&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;eis src=&amp;quot;$(ISE_DOC_UUID)/3d96626f-11f3-67a2-dec6-69f7faf4a8d6&amp;quot; tag=&amp;quot;EiffelTime&amp;quot; name=&amp;quot;EiffelTime&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/note&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is only one major difference here, targets in .ecf support automatic entry specification which enables automatic entry for classes in that target. The note element in ECF is supported in [[http://www.eiffel.com/developers/xml/configuration-1-4-0.xsd schema 1.4]] and greater.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Entry ===&lt;br /&gt;
&lt;br /&gt;
Targets in a .ecf file are allowed to specify automatic entry like this:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)/$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
When `auto' is set with `true', automatic entry is enabled in the target. In Info tool, each class in a target with automatic entry enabled displays an entry, actually not existing in code, is bound to a source `src'.&lt;br /&gt;
&lt;br /&gt;
An automatic entry of a class can be overridden too, by specifying &amp;quot;override=true&amp;quot; in one of the written entry, or check the check box in the column of Info tool.&lt;br /&gt;
&lt;br /&gt;
One can modify the automatic entry specification in a target via the first button with an &amp;quot;A&amp;quot; in Info tool. Of course, select a target node in the tree first.&lt;br /&gt;
&lt;br /&gt;
=== Information (EIS) Tool ===&lt;br /&gt;
&lt;br /&gt;
The tool is an output of the EIS outgoing mechanism. Through the tool, users can graphically manage all EIS information in current system. See [[Information (EIS) Tool]] for more information.&lt;br /&gt;
There is a screen shot of the tool.&lt;br /&gt;
&lt;br /&gt;
[[Image:Information_(EIS)_Tool.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Incoming ==&lt;br /&gt;
Incoming mechanism is based on URI, and introduces a new URI scheme: '''eiffel'''. By entering the URI into address of a browser, or clicking on the hyper link, an existing EiffelStudio instance or new EiffelStudio instance will try to resolve the URI and display corresponding resources.&lt;br /&gt;
&lt;br /&gt;
=== URI scheme Syntax ===&lt;br /&gt;
  '''eiffel:?&amp;lt;eiffel-resource&amp;gt;'''&lt;br /&gt;
&amp;lt;eiffel-resource&amp;gt; is a combination of following parts, connected by '''&amp;quot;&amp;amp;&amp;quot;''' if more than one part are required:&lt;br /&gt;
* &amp;lt;system&amp;gt;, in the form of '''system=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of system_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;target&amp;gt;, in the form of '''target=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of target_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;cluster&amp;gt;, in the form of '''cluster=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the cluster.&lt;br /&gt;
* &amp;lt;class&amp;gt;, in the form of '''class=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the class.&lt;br /&gt;
* &amp;lt;feature&amp;gt;, in the form of '''feature=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the feature.&lt;br /&gt;
{{note|All parts above are unordered.}}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
  eiffel:?class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?system=ec.D398E904-E3C8-4F8A-B9E7-6FE493CEA02F&amp;amp;target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
&lt;br /&gt;
=== Protocal Registration (Windows) ===&lt;br /&gt;
The following example shows how to register eiffel scheme on Windows, estudio.exe in this case, to handle an eiffel URI.&lt;br /&gt;
* HKEY_CLASSES_ROOT&lt;br /&gt;
** eiffel&lt;br /&gt;
** (Default) = &amp;quot;URL:Eiffel Protocol&amp;quot;&lt;br /&gt;
** URL Protocol = &amp;quot;&amp;quot;&lt;br /&gt;
*** DefaultIcon&lt;br /&gt;
*** (Default) = &amp;quot;estudio.exe&amp;quot;&lt;br /&gt;
*** shell&lt;br /&gt;
**** open&lt;br /&gt;
***** command&lt;br /&gt;
***** (Default) = &amp;quot;%ISE_EIFFEL%\studio\spec\windows\bin\estudio.exe&amp;quot; /ec_action eisi:&amp;quot;%1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== EiffelStudio Action Protocol (Incoming Implementation) ===&lt;br /&gt;
{{red|(immature and incomplete)}} &amp;lt;br&amp;gt;&lt;br /&gt;
EiffelStudio uses estudio.exe to interact with all existing instances of ec.exe. The protocol is used for this goal.&lt;br /&gt;
The action protocol can be used for those tools that want to control running EiffelStudio instances. For the moment, this is completely transparent to end users because of its immaturity.&lt;br /&gt;
It was designed to fit the requirement of EIS incoming mechanism, with limited extendibility. In the future, as required, it could be designed as XML style, after precise analysis on requirements of all kinds of new functionalities.&lt;br /&gt;
&lt;br /&gt;
The pattern EiffelStudio accept is: &lt;br /&gt;
  [&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;predefined-status&amp;gt;]&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;modulewise-action&amp;gt;&lt;br /&gt;
The part bracketed is optional condition. A command with conditional part is a conditional command.&lt;br /&gt;
Without conditional part, the command is direct command.&lt;br /&gt;
&amp;lt;eiffelstudio-module-ID&amp;gt; refers to a module defined in EiffelStudio. For example, &amp;lt;com.eiffel.compiler&amp;gt;, the compiler module in EiffelStudio; &amp;lt;com.eiffel.eis_incoming&amp;gt;, EIS incoming module.&lt;br /&gt;
&amp;lt;predefined-status&amp;gt; stands for a status of that module, as a conditional status which should trigger the actual &amp;lt;modulewise-action&amp;gt;.&lt;br /&gt;
&amp;lt;modulewise-action&amp;gt; indicate the predefined action a module in EiffelStudio should actually react.&lt;br /&gt;
&lt;br /&gt;
The following are examples now implemented on the purpose of EIS incoming functions:&lt;br /&gt;
  Example: &amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor now.&lt;br /&gt;
&lt;br /&gt;
  Example: &amp;lt;com.eiffel.compiler&amp;gt;&amp;lt;project_ready&amp;gt;&amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor, when the project is ready.&lt;br /&gt;
&lt;br /&gt;
The protocol is loaded through [https://svn.origo.ethz.ch/eiffelstudio/trunk/Src/framework/command_tunnel Command Tunnel Library]. This library is now only implemented on Windows.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14464</id>
		<title>Eiffel Information System</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Eiffel_Information_System&amp;diff=14464"/>
				<updated>2012-05-07T09:21:05Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Protocol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EiffelStudio]]&lt;br /&gt;
[[Category:Eiffel Information System]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The Eiffel Information System (EIS) provides a unified mechanism for linking development objects — classes, features and so on — of Eiffel systems with '''external information'''. This term refers to information other than Eiffel program texts. Usually the tools maintaining external information are separate tools, such as a browser; we call them '''external tools'''. Examples of external information and possible corresponding external tools are:&lt;br /&gt;
* Web page — the default browser&lt;br /&gt;
* PDF document — Acrobat&lt;br /&gt;
* MS Word documents — Microsoft Word&lt;br /&gt;
EIS is also intended to be the standard mechanism for obtaining help on Eiffel and EiffelStudio, replacing previous solutions. In that case &amp;quot;external tools&amp;quot; may actually be Eiffel tools.&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
The basic mechanisms that EIS makes available to users include two categories: outgoing (from Eiffel to external tools), incoming  (the reverse).&lt;br /&gt;
&lt;br /&gt;
* Examples of outgoing mechanisms include:&lt;br /&gt;
** Annotating Eiffel targets, classes and features to include references to external information. Such annotations can include tags.&lt;br /&gt;
** By selecting an annotation in EiffelStudio, automatically open the corresponding external tool to display or edit that information.&lt;br /&gt;
** Provide a list of all external information (in a class, cluster or entire system) corresponding to a specified tag.&lt;br /&gt;
** For a change to the software — either after the change has been performed, or before a contemplated change has been performed — display a list of all external information that may be affected as indicated by the annotations (not implemented in 6.2)&lt;br /&gt;
&lt;br /&gt;
* Examples of incoming mechanisms include:&lt;br /&gt;
** For supported tools, select external information linked to an Eiffel developer object and have EiffelStudio directly open on that object. In 6.2, eiffel: schema is supported on Windows.&lt;br /&gt;
&lt;br /&gt;
== Outgoing ==&lt;br /&gt;
=== Annotations ===&lt;br /&gt;
Annotations may be applicable to:&lt;br /&gt;
&lt;br /&gt;
* An individual class or feature. In this case the annotation figures in the class text, as part of an Eiffel &amp;quot;note&amp;quot; clause (&amp;quot;indexing&amp;quot; is still supported, it depends on which syntax level the user choose).&lt;br /&gt;
* A target, library or cluster. In this case the annotation figures in the associated ECF file; EiffelStudio provides support for entering it through a Information (EIS) Tool.&lt;br /&gt;
&lt;br /&gt;
Most of the following rules use note clauses as examples, but all applicable facilities must be supported by both variants; the syntax is designed to be as close as possible.&lt;br /&gt;
&lt;br /&gt;
The basic way to specify a dependency is to include such an annotation. The required part of every annotation is:&lt;br /&gt;
* The &amp;quot;EIS&amp;quot; marker.&lt;br /&gt;
&lt;br /&gt;
However the following parts are suggested:&lt;br /&gt;
* The &amp;quot;protocol&amp;quot;, indicating the type of external information, and making it possible for EIS to determine the associated external tool. Without the &amp;quot;protocol&amp;quot; part, the source defaults to a web page.&lt;br /&gt;
* The source, which identifies where to find the information itself, for example a URL, or a file name optionally complemented by a page number.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Not all information must be literal: annotations can use variables, defined at various levels including:&lt;br /&gt;
&lt;br /&gt;
* EiffelStudio installation built in variables&lt;br /&gt;
** ISE_WIKI = http://dev.eiffel.com&lt;br /&gt;
** EIFFELROOM = http://www.eiffelroom.com&lt;br /&gt;
** ISE_DOC = http://docs.eiffel.com&lt;br /&gt;
** ISE_DOC_UUID	= http://doc.eiffel.com/isedoc/uuid&lt;br /&gt;
** ISE_DOC_REF = http://doc.eiffel.com/isedoc/eis&lt;br /&gt;
* Context related built in variables. These variables can be used in a specific context. For instance, '''feature_name''' refers to the name of the feature in which the annotation is written.&lt;br /&gt;
** feature_name&lt;br /&gt;
** class_name&lt;br /&gt;
** group_name&lt;br /&gt;
** target_name&lt;br /&gt;
** unique_id&lt;br /&gt;
*** The `unique_id' returns a unique id of a class in a compiled system. The id usually consists of target uuid, target name, group name and class name.&lt;br /&gt;
* Individual user preferences (Not implemented)&lt;br /&gt;
* Individual system or library preferences (in ECF)&lt;br /&gt;
* Environment variables&lt;br /&gt;
&lt;br /&gt;
It should be possible to enter an annotation graphically through the EiffelStudio Information (EIS) Tool; in that case the relevant clause (feature, class, cluster, system) will be added automatically.&lt;br /&gt;
&lt;br /&gt;
=== Protocol ===&lt;br /&gt;
&lt;br /&gt;
* URI: This protocol does not need to specified. By default, it will be taken if nothing is specified or unknown protocol is specified.&lt;br /&gt;
* PDF: PDF protocol supports three attributes for now. &amp;quot;type&amp;quot; &amp;quot;page&amp;quot; and &amp;quot;nameddest&amp;quot;. (Windows only)&lt;br /&gt;
** type: &amp;quot;file&amp;quot; is used to open PDF files in the PDF reader. Otherwise it opens in a browser.&lt;br /&gt;
** page: Specify the page number to navigate to.&lt;br /&gt;
** nameddest: Specify the named destination to navigate to.&lt;br /&gt;
* DOC: Microsoft Word document. (Not implemented)&lt;br /&gt;
&lt;br /&gt;
=== Syntax for Annotations ===&lt;br /&gt;
The following example illustrates the basic form of an EIS note entry:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;e&amp;gt;EIS: &amp;quot;name=Project Requirement&amp;quot;, &amp;quot;src=$(PROJ)/docs/requirements.pdf&amp;quot;, &amp;quot;protocol=PDF&amp;quot;, &amp;quot;nameddest=4.1&amp;quot;, &amp;quot;tag=requirement&amp;quot;&amp;lt;/e&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The label (Node_entry as called in the ECMA/ISO Eiffel Standard syntax) is '''EIS''',  '''EIS'''  Note_value tells the Eiffel Information System that this Note_entry is of interest to EIS, as distinct from any other information that might be expressed through a Note_entry. The file name (src) includes '''$PROJ''', referring to a variable — set at any of the above 5 levels, rather than the second one &amp;quot;Context related built in variables&amp;quot; — defining the project location.  The protocol is '''PDF'''. The '''nameddest'''  property (name destination) is a specific property of PDF documents. The tag '''requirement''' indicating that this entry links the enclosing Eiffel class or feature with some part of the requirements document. &lt;br /&gt;
&lt;br /&gt;
Similarly, the following example demonstrates how annotations look like in ECF files:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;note&amp;gt;&lt;br /&gt;
	&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;eis src=&amp;quot;$(ISE_DOC_UUID)/3d96626f-11f3-67a2-dec6-69f7faf4a8d6&amp;quot; tag=&amp;quot;EiffelTime&amp;quot; name=&amp;quot;EiffelTime&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/note&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is only one major difference here, targets in .ecf support automatic entry specification which enables automatic entry for classes in that target. The note element in ECF is supported in [[http://www.eiffel.com/developers/xml/configuration-1-4-0.xsd schema 1.4]] and greater.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Entry ===&lt;br /&gt;
&lt;br /&gt;
Targets in a .ecf file are allowed to specify automatic entry like this:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;eis auto=&amp;quot;true&amp;quot; src=&amp;quot;$(ISE_DOC_REF)/$(unique_id)&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
When `auto' is set with `true', automatic entry is enabled in the target. In Info tool, each class in a target with automatic entry enabled displays an entry, actually not existing in code, is bound to a source `src'.&lt;br /&gt;
&lt;br /&gt;
An automatic entry of a class can be overridden too, by specifying &amp;quot;override=true&amp;quot; in one of the written entry, or check the check box in the column of Info tool.&lt;br /&gt;
&lt;br /&gt;
One can modify the automatic entry specification in a target via the first button with an &amp;quot;A&amp;quot; in Info tool. Of course, select a target node in the tree first.&lt;br /&gt;
&lt;br /&gt;
=== Information (EIS) Tool ===&lt;br /&gt;
&lt;br /&gt;
The tool is an output of the EIS outgoing mechanism. Through the tool, users can graphically manage all EIS information in current system. See [[Information (EIS) Tool]] for more information.&lt;br /&gt;
There is a screen shot of the tool.&lt;br /&gt;
&lt;br /&gt;
[[Image:Information_(EIS)_Tool.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Incoming ==&lt;br /&gt;
Incoming mechanism is based on URI, and introduces a new URI scheme: '''eiffel'''. By entering the URI into address of a browser, or clicking on the hyper link, an existing EiffelStudio instance or new EiffelStudio instance will try to resolve the URI and display corresponding resources.&lt;br /&gt;
&lt;br /&gt;
=== URI scheme Syntax ===&lt;br /&gt;
  '''eiffel:?&amp;lt;eiffel-resource&amp;gt;'''&lt;br /&gt;
&amp;lt;eiffel-resource&amp;gt; is a combination of following parts, connected by '''&amp;quot;&amp;amp;&amp;quot;''' if more than one part are required:&lt;br /&gt;
* &amp;lt;system&amp;gt;, in the form of '''system=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of system_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;target&amp;gt;, in the form of '''target=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; consists of target_name or uuid of the system, or both connected by '''&amp;quot;.&amp;quot;'''.&lt;br /&gt;
* &amp;lt;cluster&amp;gt;, in the form of '''cluster=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the cluster.&lt;br /&gt;
* &amp;lt;class&amp;gt;, in the form of '''class=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the class.&lt;br /&gt;
* &amp;lt;feature&amp;gt;, in the form of '''feature=to_be_replaced''', &amp;quot;to_be_replaced&amp;quot; is the name of the feature.&lt;br /&gt;
{{note|All parts above are unordered.}}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
  eiffel:?class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
  eiffel:?system=ec.D398E904-E3C8-4F8A-B9E7-6FE493CEA02F&amp;amp;target=base&amp;amp;cluster=elks&amp;amp;class=STRING_8&amp;amp;feature=is_equal&lt;br /&gt;
&lt;br /&gt;
=== Protocal Registration (Windows) ===&lt;br /&gt;
The following example shows how to register eiffel scheme on Windows, estudio.exe in this case, to handle an eiffel URI.&lt;br /&gt;
* HKEY_CLASSES_ROOT&lt;br /&gt;
** eiffel&lt;br /&gt;
** (Default) = &amp;quot;URL:Eiffel Protocol&amp;quot;&lt;br /&gt;
** URL Protocol = &amp;quot;&amp;quot;&lt;br /&gt;
*** DefaultIcon&lt;br /&gt;
*** (Default) = &amp;quot;estudio.exe&amp;quot;&lt;br /&gt;
*** shell&lt;br /&gt;
**** open&lt;br /&gt;
***** command&lt;br /&gt;
***** (Default) = &amp;quot;%ISE_EIFFEL%\studio\spec\windows\bin\estudio.exe&amp;quot; /ec_action eisi:&amp;quot;%1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== EiffelStudio Action Protocol (Incoming Implementation) ===&lt;br /&gt;
{{red|(immature and incomplete)}} &amp;lt;br&amp;gt;&lt;br /&gt;
EiffelStudio uses estudio.exe to interact with all existing instances of ec.exe. The protocol is used for this goal.&lt;br /&gt;
The action protocol can be used for those tools that want to control running EiffelStudio instances. For the moment, this is completely transparent to end users because of its immaturity.&lt;br /&gt;
It was designed to fit the requirement of EIS incoming mechanism, with limited extendibility. In the future, as required, it could be designed as XML style, after precise analysis on requirements of all kinds of new functionalities.&lt;br /&gt;
&lt;br /&gt;
The pattern EiffelStudio accept is: &lt;br /&gt;
  [&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;predefined-status&amp;gt;]&amp;lt;eiffelstudio-module-ID&amp;gt;&amp;lt;modulewise-action&amp;gt;&lt;br /&gt;
The part bracketed is optional condition. A command with conditional part is a conditional command.&lt;br /&gt;
Without conditional part, the command is direct command.&lt;br /&gt;
&amp;lt;eiffelstudio-module-ID&amp;gt; refers to a module defined in EiffelStudio. For example, &amp;lt;com.eiffel.compiler&amp;gt;, the compiler module in EiffelStudio; &amp;lt;com.eiffel.eis_incoming&amp;gt;, EIS incoming module.&lt;br /&gt;
&amp;lt;predefined-status&amp;gt; stands for a status of that module, as a conditional status which should trigger the actual &amp;lt;modulewise-action&amp;gt;.&lt;br /&gt;
&amp;lt;modulewise-action&amp;gt; indicate the predefined action a module in EiffelStudio should actually react.&lt;br /&gt;
&lt;br /&gt;
The following are examples now implemented on the purpose of EIS incoming functions:&lt;br /&gt;
  Example: &amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor now.&lt;br /&gt;
&lt;br /&gt;
  Example: &amp;lt;com.eiffel.compiler&amp;gt;&amp;lt;project_ready&amp;gt;&amp;lt;com.eiffel.eis_incoming&amp;gt;&amp;lt;eiffel:?class=string_8&amp;amp;feature=out&amp;gt;&lt;br /&gt;
  Explanation: Demand EiffelStudio open the feature {STRING_8}.out in the editor, when the project is ready.&lt;br /&gt;
&lt;br /&gt;
The protocol is loaded through [https://svn.origo.ethz.ch/eiffelstudio/trunk/Src/framework/command_tunnel Command Tunnel Library]. This library is now only implemented on Windows.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_6_1_result.PNG&amp;diff=14463</id>
		<title>File:Behavior 6 1 result.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_6_1_result.PNG&amp;diff=14463"/>
				<updated>2012-05-04T06:58:27Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Paste_with_Indentation&amp;diff=14462</id>
		<title>Paste with Indentation</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Paste_with_Indentation&amp;diff=14462"/>
				<updated>2012-05-04T06:58:02Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Editor]]&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
This article describes a new pasting behavior which is smarter than the regular paste-as-it-is behavior in terms of indentation. However the implementation will remain simple without using heavy Eiffel parser to reformat the text being pasted.&lt;br /&gt;
&lt;br /&gt;
= Behaviors =&lt;br /&gt;
&lt;br /&gt;
In general:&lt;br /&gt;
Adjust the number of leading tabs for each line in the pasting text by the result of the number of existing tabs before the editor cursor subtracting the number of leading tabs in the pasting text.&lt;br /&gt;
&lt;br /&gt;
Except:&lt;br /&gt;
* There is a non-tabulation character before the editor cursor&lt;br /&gt;
* NC = 0&lt;br /&gt;
* NP = 0&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Number of tabulations before the cursor (NC)&lt;br /&gt;
* Number of leading tabulations of the text being pasted (NP)&lt;br /&gt;
&lt;br /&gt;
== Behavior 1: Multiple lines with leading tabs in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_copied_text.PNG]]&lt;br /&gt;
=== Behavior 1.1 ===&lt;br /&gt;
&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
&lt;br /&gt;
=== Behavior 1.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is not modified when (NC - NP) = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 1.3 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_3_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_3_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NC = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 2: Multiple lines with no tab in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 2.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NP = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 2.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NP = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 3: Single line with leading tabs in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_copied_text.PNG]]&lt;br /&gt;
=== Behavior 3.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
&lt;br /&gt;
=== Behavior 3.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is not modified when (NC - NP) = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 3.3 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_3_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_3_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing is done to the text pasted when NC = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 4 ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 4.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
* This is a good example to show this pasting behavior's advantage. Paste-as-it-is requires 4 steps to get this result.&lt;br /&gt;
&lt;br /&gt;
== Behavior 5: Multiple lines with improperly formatted pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_5_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 5.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_5_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_5_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
* The result is not perfect before the copied text is improperly formatted. One has to adjust it manually after pasting.&lt;br /&gt;
&lt;br /&gt;
== Behavior 6: Paste immediately after copy ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_5_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 6.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_5_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_6_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Paste as it is if the selection is the same as the text being pasted.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_5_1_result.PNG&amp;diff=14461</id>
		<title>File:Behavior 5 1 result.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_5_1_result.PNG&amp;diff=14461"/>
				<updated>2012-05-04T06:11:29Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_5_1_pasted_at.PNG&amp;diff=14460</id>
		<title>File:Behavior 5 1 pasted at.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_5_1_pasted_at.PNG&amp;diff=14460"/>
				<updated>2012-05-04T06:11:12Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_5_copied_text.PNG&amp;diff=14459</id>
		<title>File:Behavior 5 copied text.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_5_copied_text.PNG&amp;diff=14459"/>
				<updated>2012-05-04T06:10:45Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Paste_with_Indentation&amp;diff=14458</id>
		<title>Paste with Indentation</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Paste_with_Indentation&amp;diff=14458"/>
				<updated>2012-05-04T05:41:54Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Behavior 5: Multiple lines with improperly formatted pasting text == */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Editor]]&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
This article describes a new pasting behavior which is smarter than the regular paste-as-it-is behavior in terms of indentation. However the implementation will remain simple without using heavy Eiffel parser to reformat the text being pasted.&lt;br /&gt;
&lt;br /&gt;
= Behaviors =&lt;br /&gt;
&lt;br /&gt;
In general:&lt;br /&gt;
Adjust the number of leading tabs for each line in the pasting text by the result of the number of existing tabs before the editor cursor subtracting the number of leading tabs in the pasting text.&lt;br /&gt;
&lt;br /&gt;
Except:&lt;br /&gt;
* There is a non-tabulation character before the editor cursor&lt;br /&gt;
* NC = 0&lt;br /&gt;
* NP = 0&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Number of tabulations before the cursor (NC)&lt;br /&gt;
* Number of leading tabulations of the text being pasted (NP)&lt;br /&gt;
&lt;br /&gt;
== Behavior 1: Multiple lines with leading tabs in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_copied_text.PNG]]&lt;br /&gt;
=== Behavior 1.1 ===&lt;br /&gt;
&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
&lt;br /&gt;
=== Behavior 1.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is not modified when (NC - NP) = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 1.3 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_3_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_3_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NC = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 2: Multiple lines with no tab in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 2.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NP = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 2.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NP = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 3: Single line with leading tabs in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_copied_text.PNG]]&lt;br /&gt;
=== Behavior 3.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
&lt;br /&gt;
=== Behavior 3.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is not modified when (NC - NP) = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 3.3 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_3_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_3_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing is done to the text pasted when NC = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 4 ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 4.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
* This is a good example to show this pasting behavior's advantage. Paste-as-it-is requires 4 steps to get this result.&lt;br /&gt;
&lt;br /&gt;
== Behavior 5: Multiple lines with improperly formatted pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_5_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 5.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_5_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_5_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
* The result is not perfect before the copied text is improperly formatted. One has to adjust it manually after pasting.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Paste_with_Indentation&amp;diff=14457</id>
		<title>Paste with Indentation</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Paste_with_Indentation&amp;diff=14457"/>
				<updated>2012-05-04T05:41:23Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Editor]]&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
This article describes a new pasting behavior which is smarter than the regular paste-as-it-is behavior in terms of indentation. However the implementation will remain simple without using heavy Eiffel parser to reformat the text being pasted.&lt;br /&gt;
&lt;br /&gt;
= Behaviors =&lt;br /&gt;
&lt;br /&gt;
In general:&lt;br /&gt;
Adjust the number of leading tabs for each line in the pasting text by the result of the number of existing tabs before the editor cursor subtracting the number of leading tabs in the pasting text.&lt;br /&gt;
&lt;br /&gt;
Except:&lt;br /&gt;
* There is a non-tabulation character before the editor cursor&lt;br /&gt;
* NC = 0&lt;br /&gt;
* NP = 0&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Number of tabulations before the cursor (NC)&lt;br /&gt;
* Number of leading tabulations of the text being pasted (NP)&lt;br /&gt;
&lt;br /&gt;
== Behavior 1: Multiple lines with leading tabs in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_copied_text.PNG]]&lt;br /&gt;
=== Behavior 1.1 ===&lt;br /&gt;
&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
&lt;br /&gt;
=== Behavior 1.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is not modified when (NC - NP) = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 1.3 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_3_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_3_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NC = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 2: Multiple lines with no tab in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 2.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NP = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 2.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NP = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 3: Single line with leading tabs in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_copied_text.PNG]]&lt;br /&gt;
=== Behavior 3.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
&lt;br /&gt;
=== Behavior 3.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is not modified when (NC - NP) = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 3.3 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_3_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_3_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing is done to the text pasted when NC = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 4 ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 4.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
* This is a good example to show this pasting behavior's advantage. Paste-as-it-is requires 4 steps to get this result.&lt;br /&gt;
&lt;br /&gt;
== Behavior 5: Multiple lines with improperly formatted pasting text == ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_5_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 5.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_5_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_5_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
* The result is not perfect before the copied text is improperly formatted. One has to adjust it manually after pasting.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_1_1_result.PNG&amp;diff=14456</id>
		<title>File:Behavior 1 1 result.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_1_1_result.PNG&amp;diff=14456"/>
				<updated>2012-04-28T01:35:03Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: uploaded a new version of &amp;quot;Image:Behavior 1 1 result.PNG&amp;quot;: Corrected the image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_2_1_pasted_at.PNG&amp;diff=14454</id>
		<title>File:Behavior 2 1 pasted at.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_2_1_pasted_at.PNG&amp;diff=14454"/>
				<updated>2012-04-27T09:29:58Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_2_1_result.PNG&amp;diff=14453</id>
		<title>File:Behavior 2 1 result.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_2_1_result.PNG&amp;diff=14453"/>
				<updated>2012-04-27T09:29:04Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_3_3_result.PNG&amp;diff=14452</id>
		<title>File:Behavior 3 3 result.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_3_3_result.PNG&amp;diff=14452"/>
				<updated>2012-04-27T09:27:25Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Paste_with_Indentation&amp;diff=14451</id>
		<title>Paste with Indentation</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Paste_with_Indentation&amp;diff=14451"/>
				<updated>2012-04-27T06:09:23Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Behaviors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Editor]]&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
This article describes a new pasting behavior which is smarter than the regular paste-as-it-is behavior in terms of indentation. However the implementation will remain simple without using heavy Eiffel parser to reformat the text being pasted.&lt;br /&gt;
&lt;br /&gt;
= Behaviors =&lt;br /&gt;
&lt;br /&gt;
In general:&lt;br /&gt;
Adjust the number of leading tabs for each line in the pasting text by the result of the number of existing tabs before the editor cursor&lt;br /&gt;
substracting the number of leading tabs in the pasting text.&lt;br /&gt;
&lt;br /&gt;
Except:&lt;br /&gt;
* There is already non-tabulation character before the editor cursor&lt;br /&gt;
* NC = 0&lt;br /&gt;
* NP = 0&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Number of tabulations before the cursor (NC)&lt;br /&gt;
* Number of leading tabulations of the text being pasted (NP)&lt;br /&gt;
&lt;br /&gt;
== Behavior 1: Multiple lines with leading tabs in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_copied_text.PNG]]&lt;br /&gt;
=== Behavior 1.1 ===&lt;br /&gt;
&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
&lt;br /&gt;
=== Behavior 1.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is not modified when (NC - NP) = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 1.3 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_3_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_3_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NC = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 2: Multiple lines with no tab in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 2.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NP = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 2.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NP = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 3: Single line with leading tabs in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_copied_text.PNG]]&lt;br /&gt;
=== Behavior 3.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
&lt;br /&gt;
=== Behavior 3.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is not modified when (NC - NP) = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 3.3 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_3_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_3_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing is done to the text pasted when NC = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 4 ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 4.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
* This is a good example to show this pasting behavior's advantage. Paste-as-it-is requires 4 steps to get this result.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_4_1_result.PNG&amp;diff=14450</id>
		<title>File:Behavior 4 1 result.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_4_1_result.PNG&amp;diff=14450"/>
				<updated>2012-04-27T05:57:38Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_4_1_pasted_at.PNG&amp;diff=14449</id>
		<title>File:Behavior 4 1 pasted at.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_4_1_pasted_at.PNG&amp;diff=14449"/>
				<updated>2012-04-27T05:57:27Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_4_copied_text.PNG&amp;diff=14448</id>
		<title>File:Behavior 4 copied text.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_4_copied_text.PNG&amp;diff=14448"/>
				<updated>2012-04-27T05:56:53Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_3_3_pasted_at.PNG&amp;diff=14447</id>
		<title>File:Behavior 3 3 pasted at.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_3_3_pasted_at.PNG&amp;diff=14447"/>
				<updated>2012-04-27T05:56:02Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_3_2_result.PNG&amp;diff=14446</id>
		<title>File:Behavior 3 2 result.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_3_2_result.PNG&amp;diff=14446"/>
				<updated>2012-04-27T05:55:07Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_3_2_pasted_at.PNG&amp;diff=14445</id>
		<title>File:Behavior 3 2 pasted at.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_3_2_pasted_at.PNG&amp;diff=14445"/>
				<updated>2012-04-27T05:54:54Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_3_1_result.PNG&amp;diff=14444</id>
		<title>File:Behavior 3 1 result.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_3_1_result.PNG&amp;diff=14444"/>
				<updated>2012-04-27T05:54:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_3_1_pasted_at.PNG&amp;diff=14443</id>
		<title>File:Behavior 3 1 pasted at.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_3_1_pasted_at.PNG&amp;diff=14443"/>
				<updated>2012-04-27T05:54:10Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_3_copied_text.PNG&amp;diff=14442</id>
		<title>File:Behavior 3 copied text.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_3_copied_text.PNG&amp;diff=14442"/>
				<updated>2012-04-27T05:53:08Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_2_2_result.PNG&amp;diff=14441</id>
		<title>File:Behavior 2 2 result.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_2_2_result.PNG&amp;diff=14441"/>
				<updated>2012-04-27T05:52:53Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_2_2_pasted_at.PNG&amp;diff=14440</id>
		<title>File:Behavior 2 2 pasted at.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_2_2_pasted_at.PNG&amp;diff=14440"/>
				<updated>2012-04-27T05:52:32Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=File:Behavior_2_copied_text.PNG&amp;diff=14439</id>
		<title>File:Behavior 2 copied text.PNG</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=File:Behavior_2_copied_text.PNG&amp;diff=14439"/>
				<updated>2012-04-27T05:49:44Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Paste_with_Indentation&amp;diff=14438</id>
		<title>Paste with Indentation</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Paste_with_Indentation&amp;diff=14438"/>
				<updated>2012-04-27T05:47:57Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Behavior 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Editor]]&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
This article describes a new pasting behavior which is smarter than the regular paste-as-it-is behavior in terms of indentation. However the implementation will remain simple without using heavy Eiffel parser to reformat the text being pasted.&lt;br /&gt;
&lt;br /&gt;
= Behaviors =&lt;br /&gt;
Note:&lt;br /&gt;
* Number of tabulations before the cursor (NC)&lt;br /&gt;
* Number of leading tabulations of the text being pasted (NP)&lt;br /&gt;
&lt;br /&gt;
== Behavior 1: Multiple lines with leading tabs in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_copied_text.PNG]]&lt;br /&gt;
=== Behavior 1.1 ===&lt;br /&gt;
&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
&lt;br /&gt;
=== Behavior 1.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is not modified when (NC - NP) = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 1.3 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_3_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_3_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NC = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 2: Multiple lines with no tab in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 2.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NP = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 2.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NP = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 3: Single line with leading tabs in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_copied_text.PNG]]&lt;br /&gt;
=== Behavior 3.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
&lt;br /&gt;
=== Behavior 3.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is not modified when (NC - NP) = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 3.3 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_3_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_3_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing is done to the text pasted when NC = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 4 ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 4.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_4_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
* This is a good example to show this pasting behavior's advantage. Paste-as-it-is requires 4 steps to get this result.&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Paste_with_Indentation&amp;diff=14437</id>
		<title>Paste with Indentation</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Paste_with_Indentation&amp;diff=14437"/>
				<updated>2012-04-27T05:41:40Z</updated>
		
		<summary type="html">&lt;p&gt;Ted: /* Behavior 3: Single line with leading tabs in pasting text */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Editor]]&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
This article describes a new pasting behavior which is smarter than the regular paste-as-it-is behavior in terms of indentation. However the implementation will remain simple without using heavy Eiffel parser to reformat the text being pasted.&lt;br /&gt;
&lt;br /&gt;
= Behaviors =&lt;br /&gt;
Note:&lt;br /&gt;
* Number of tabulations before the cursor (NC)&lt;br /&gt;
* Number of leading tabulations of the text being pasted (NP)&lt;br /&gt;
&lt;br /&gt;
== Behavior 1: Multiple lines with leading tabs in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_copied_text.PNG]]&lt;br /&gt;
=== Behavior 1.1 ===&lt;br /&gt;
&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
&lt;br /&gt;
=== Behavior 1.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is not modified when (NC - NP) = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 1.3 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_3_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_1_3_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NC = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 2: Multiple lines with no tab in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_copied_text.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Behavior 2.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NP = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 2.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_2_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing has been done to the pasted text when NP = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 3: Single line with leading tabs in pasting text ==&lt;br /&gt;
Copied text:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_copied_text.PNG]]&lt;br /&gt;
=== Behavior 3.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_1_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_1_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is indented by one tabulation (NC - NP)&lt;br /&gt;
&lt;br /&gt;
=== Behavior 3.2 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_2_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_2_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Remove tabs before the cursor.&lt;br /&gt;
* The text pasted is not modified when (NC - NP) = 0&lt;br /&gt;
&lt;br /&gt;
=== Behavior 3.3 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_3_pasted_at.PNG]]&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:Behavior_3_3_result.PNG]]&lt;br /&gt;
&lt;br /&gt;
Summury:&lt;br /&gt;
* Nothing is done to the text pasted when NC = 0&lt;br /&gt;
&lt;br /&gt;
== Behavior 4 ==&lt;br /&gt;
Copied text:&lt;br /&gt;
=== Behavior 4.1 ===&lt;br /&gt;
Pasted at:&lt;br /&gt;
Result:&lt;br /&gt;
Comment:&lt;/div&gt;</summary>
		<author><name>Ted</name></author>	</entry>

	</feed>