diff --git a/documentation/current/eiffelstudio/software-installation/index.wiki b/documentation/current/eiffelstudio/software-installation/index.wiki index c4790aab..05df7df8 100644 --- a/documentation/current/eiffelstudio/software-installation/index.wiki +++ b/documentation/current/eiffelstudio/software-installation/index.wiki @@ -1,5 +1,6 @@ [[Property:title|Software Installation]] [[Property:weight|-2]] +[[Property:uuid|90bc1970-bd1d-9707-3030-a4a9f613524a]] For detailed installation instructions please follow the link for the product your are installing. ==[[Software Installation for EiffelStudio 6.2|EiffelStudio 6.3]]== diff --git a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-freebsd.wiki b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-freebsd.wiki index 04241e00..4a64244f 100644 --- a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-freebsd.wiki +++ b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-freebsd.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelStudio 6.2 for FreeBSD]] [[Property:link_title|FreeBSD]] [[Property:weight|1]] +[[Property:uuid|b26ddd99-521b-6a10-79e6-e2a5d30f907c]] ==Requirements== {| diff --git a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-hp-tru64-unix.wiki b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-hp-tru64-unix.wiki index dcc562d5..685571fa 100644 --- a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-hp-tru64-unix.wiki +++ b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-hp-tru64-unix.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelStudio 6.2 for HP Tru64 UNIX]] [[Property:link_title|HP Tru64 UNIX]] [[Property:weight|4]] +[[Property:uuid|f9ef1897-fa95-1c62-d905-54111ad234f1]] ==Requirements== {| diff --git a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-hp-ux.wiki b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-hp-ux.wiki index ce0a2db2..8bd46717 100644 --- a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-hp-ux.wiki +++ b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-hp-ux.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelStudio 6.2 for HP-UX]] [[Property:link_title|HP-UX]] [[Property:weight|3]] +[[Property:uuid|c1982828-16bf-8984-bd8a-18df4b48cf27]] ==Requirements== {| diff --git a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-linux.wiki b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-linux.wiki index e08e235f..9ce14417 100644 --- a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-linux.wiki +++ b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-linux.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelStudio 6.2 for Linux]] [[Property:link_title|Linux]] [[Property:weight|5]] +[[Property:uuid|db132d4c-7c65-59c0-6f9f-731b81c37373]] ==Requirements== {| diff --git a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-linuxppc.wiki b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-linuxppc.wiki index fc79f3b1..b21b35a5 100644 --- a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-linuxppc.wiki +++ b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-linuxppc.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelStudio 6.2 for LinuxPPC]] [[Property:link_title|LinuxPPC]] [[Property:weight|6]] +[[Property:uuid|6b1c2e2b-9512-3f71-9007-63f45be705aa]] ==Requirements== {| diff --git a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-mac-os-x.wiki b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-mac-os-x.wiki index 888530d5..f0972521 100644 --- a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-mac-os-x.wiki +++ b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-mac-os-x.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelStudio 6.2 for Mac OS X]] [[Property:link_title|Mac OS X]] [[Property:weight|0]] +[[Property:uuid|7cf4e0e5-0858-58bb-351e-52becea59ede]] ==Requirements== {| diff --git a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-sgi-irix.wiki b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-sgi-irix.wiki index e7afe4d6..c78cac87 100644 --- a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-sgi-irix.wiki +++ b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-sgi-irix.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelStudio 6.2 for SGI Irix]] [[Property:link_title|SGI Irix]] [[Property:weight|8]] +[[Property:uuid|f8de85e3-0786-071c-3ece-bbde6656dc20]] ==Requirements== {| diff --git a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-solaris.wiki b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-solaris.wiki index f58d171f..838bc565 100644 --- a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-solaris.wiki +++ b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/eiffelstudio-solaris.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelStudio 6.2 for Solaris]] [[Property:link_title|Solaris]] [[Property:weight|9]] +[[Property:uuid|3b85b8dc-c2b8-021a-f4bc-a8d19ad63b81]] ==Requirements== {| diff --git a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/index.wiki b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/index.wiki index f72b0c1d..5339f543 100644 --- a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/index.wiki +++ b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/index.wiki @@ -1,6 +1,7 @@ [[Property:title|Software Installation for EiffelStudio 6.2]] [[Property:link_title|Software Installation for EiffelStudio]] [[Property:weight|0]] +[[Property:uuid|b92cecd4-4a0c-e2f5-b63e-5d01d39ba990]] Select the operating system you are using for detailed installation instructions: * [[EiffelStudio 6.2 for Mac OS X|Apple Mac OS X]] diff --git a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/windows.wiki b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/windows.wiki index ad038bfa..af47cdd5 100644 --- a/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/windows.wiki +++ b/documentation/current/eiffelstudio/software-installation/software-installation-eiffelstudio/windows.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelStudio 6.2 for Windows]] [[Property:link_title|Windows]] [[Property:weight|7]] +[[Property:uuid|d177e0bc-63e6-63b3-7fdb-5e7136945e21]] ==Requirements== {| diff --git a/documentation/current/eiffelstudio/software-installation/third-party-tools-installation-help.wiki b/documentation/current/eiffelstudio/software-installation/third-party-tools-installation-help.wiki index febf923f..fe38001e 100644 --- a/documentation/current/eiffelstudio/software-installation/third-party-tools-installation-help.wiki +++ b/documentation/current/eiffelstudio/software-installation/third-party-tools-installation-help.wiki @@ -1,6 +1,7 @@ [[Property:title|Third Party Tools Installalation Help]] [[Property:link_title|Third Party Tools Installation Help]] [[Property:weight|1]] +[[Property:uuid|5896dc5f-a3dd-2535-e2c3-81593363d8e9]] Here you can find help for installing third party tools and programs which may be necessary for your Eiffel programming needs. * ==[http://dev.eiffel.com/Installing_Microsoft_C_compiler Free Microsoft C Compiler ]== diff --git a/documentation/current/method/eiffel-tutorial-et/et-agents.wiki b/documentation/current/method/eiffel-tutorial-et/et-agents.wiki index fd8af2a1..cb120a5c 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-agents.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-agents.wiki @@ -1,6 +1,7 @@ [[Property:title|11 Agents]] [[Property:link_title|ET: Agents]] [[Property:weight|-3]] +[[Property:uuid|ba49a80d-5ddf-8b30-4943-528974fd0ddd]] Our last mechanism, agents, adds one final level of expressive power to the framework describe so far. Agents apply object-oriented concepts to the modeling of operations. ==Objects for operations== diff --git a/documentation/current/method/eiffel-tutorial-et/et-design-contract-tm-assertions-and-exceptions.wiki b/documentation/current/method/eiffel-tutorial-et/et-design-contract-tm-assertions-and-exceptions.wiki index a942b0b8..5f4722c6 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-design-contract-tm-assertions-and-exceptions.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-design-contract-tm-assertions-and-exceptions.wiki @@ -9,11 +9,11 @@ Eiffel directly implements the ideas of Design by Contract™ , which enhance A system -- a software system in particular, but the ideas are more general -- is made of a number of cooperating components. Design by Contract™ states that their cooperation should be based on precise specifications -- contracts -- describing each party's expectations and guarantees. An Eiffel contract is similar to a real-life contract between two people or two companies, which it is convenient to express in the form of tables listing the expectations and guarantees. Here for example is how we could sketch the contract between a homeowner and the telephone company: -{| +{| border="1" |- -| provide_service|| style="width=10%;" -| '''OBLIGATIONS'''|| style="width=35%;" -| '''BENEFITS'''|| style="width=35%;" +| provide_service|| style="width=10%" +| '''OBLIGATIONS'''|| style="width=35%" +| '''BENEFITS'''|| style="width=35%" |- | '''Client''' | (Satisfy precondition:)
@@ -93,7 +93,7 @@ The precondition of a routine expresses conditions that the routine is imposing The postcondition of a routine expresses what the routine guaranteed to its clients for calls satisfying the precondition. The notation old expression , valid in postconditions ( ensure clauses) only, denotes the value that expression had on entry to the routine. The precondition and postcondition state the terms of the contract between the routine and its clients, similar to the earlier example of a human contract: -{| +{| border="1" |- | deposit|| style="width=10%;" | '''OBLIGATIONS'''|| style="width=35%;" diff --git a/documentation/current/method/eiffel-tutorial-et/et-dynamic-structure-execution-model.wiki b/documentation/current/method/eiffel-tutorial-et/et-dynamic-structure-execution-model.wiki index 2d6d0b04..dbd1f524 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-dynamic-structure-execution-model.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-dynamic-structure-execution-model.wiki @@ -1,6 +1,7 @@ [[Property:title|6 The Dynamic Structure: Execution Model]] [[Property:link_title|ET: The Dynamic Structure: Execution Model]] [[Property:weight|-10]] +[[Property:uuid|1f3f2707-9129-4dca-76c7-157143d7ae74]] A system with a certain static structure describes a set of possible executions. The run-time model governs the structure of the data ( objects ) created during such executions. The properties of the run-time model are not just of interest to implementers; they also involve concepts directly relevant to the needs of system modelers and analysts at the most abstract levels. diff --git a/documentation/current/method/eiffel-tutorial-et/et-eiffel-tutorial-copyright.wiki b/documentation/current/method/eiffel-tutorial-et/et-eiffel-tutorial-copyright.wiki new file mode 100644 index 00000000..aae2d526 --- /dev/null +++ b/documentation/current/method/eiffel-tutorial-et/et-eiffel-tutorial-copyright.wiki @@ -0,0 +1,35 @@ +[[Property:title|Eiffel Tutorial Copyright]] +[[Property:link_title|ET: Eiffel Tutorial Copyright]] +[[Property:weight|0]] +[[Property:uuid|105e9956-f168-b060-a6be-e78b221f269a]] +====MANUAL IDENTIFICATION AND COPYRIGHT==== + +Title: An Eiffel Tutorial, Eiffel Software Technical Report TR-EI-66/TU. + +Publication history + +First published July 2001. Corresponds to release 5.0 of the EiffelStudio environment. + +Author + +Software credits + +See acknowledgments in book [http://www.eiffel.com/doc/page.html Eiffel: The Language] . + +Cover design + +Rich Ayling. + +Copyright notice and proprietary information + +Copyright Interactive Software Engineering Inc. (Eiffel Software), 2001. May not be reproduced in any form (including electronic storage) without the written permission of Eiffel Software . "Eiffel Power" and the Eiffel Power logo are trademarks of Eiffel Software . + +All uses of the product documented here are subject to the terms and conditions of the Eiffel Software Eiffel user license. Any other use or duplication is a violation of the applicable laws on copyright, trade secrets and intellectual property. + +Special duplication permission for educational institutions + +Degree-granting educational institutions using Eiffel Software Eiffel for teaching purposes as part of the [http://www.eiffel.com/educators/resources.html Eiffel University Partnership Program] may be permitted under certain conditions to copy specific parts of this book. Contact Eiffel Software for details. + + + + diff --git a/documentation/current/method/eiffel-tutorial-et/et-general-properties.wiki b/documentation/current/method/eiffel-tutorial-et/et-general-properties.wiki index 87c69249..f5893685 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-general-properties.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-general-properties.wiki @@ -1,6 +1,7 @@ [[Property:title|2 General Properties]] [[Property:link_title|ET: General Properties]] [[Property:weight|-14]] +[[Property:uuid|1ad0b1d5-7ac6-9f55-92ec-ba6f42aee690]] Here is an overview of the facilities supported by Eiffel:
* Completely ''object-oriented'' approach. Eiffel is a full-fledged application of object technology, not a "hybrid" of O-O and traditional concepts. * ''External interfaces''. Eiffel is a software composition tool and is easily interfaced with software written in such languages as C, C++, Java and C#. diff --git a/documentation/current/method/eiffel-tutorial-et/et-genericity-and-arrays.wiki b/documentation/current/method/eiffel-tutorial-et/et-genericity-and-arrays.wiki index ee7a5e6c..2601f7e4 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-genericity-and-arrays.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-genericity-and-arrays.wiki @@ -1,6 +1,7 @@ [[Property:title|7 Genericity and Arrays]] [[Property:link_title|ET: Genericity and Arrays]] [[Property:weight|-9]] +[[Property:uuid|7f3bd1d7-357e-031d-9faa-b00594aa9ae0]] Some of the classes that we will need, particularly in libraries, are '''container''' classes, describing data structures made of a number of objects of the same or similar types. Examples of containers include arrays, stacks and lists. The class DEPOSIT_LIST posited in earlier examples describes containers. It is not hard, with the mechanisms seen so far, to write the class DEPOSIT_LIST , which would include such features as count (query returning the number of deposit objects in the list) and put (command to insert a new deposit object). diff --git a/documentation/current/method/eiffel-tutorial-et/et-hello-world.wiki b/documentation/current/method/eiffel-tutorial-et/et-hello-world.wiki index 4162a8a7..8076b9d6 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-hello-world.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-hello-world.wiki @@ -1,6 +1,7 @@ [[Property:title|4 Hello World]] [[Property:link_title|ET: Hello World]] [[Property:weight|-12]] +[[Property:uuid|5b286f94-dd63-1169-a64e-74b5f8c5ef14]] When discovering any approach to software construction, however ambitious its goals, it is reassuring to see first a small example of the big picture -- a complete program to print the famous "Hello World" string. Here is how to perform this fascinating task in the Eiffel notation. You write a class HELLO with a single procedure, say make , also serving as creation procedure. If you like short texts, here is a minimal version: diff --git a/documentation/current/method/eiffel-tutorial-et/et-inheritance.wiki b/documentation/current/method/eiffel-tutorial-et/et-inheritance.wiki index e734bbfe..4f7a1c34 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-inheritance.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-inheritance.wiki @@ -1,6 +1,7 @@ [[Property:title|9 Inheritance]] [[Property:link_title|ET: Inheritance]] [[Property:weight|-7]] +[[Property:uuid|c90e6ee3-b39d-48e5-2321-a34e12fd5327]] Inheritance is a powerful and attractive technique. A look at either the practice or literature shows, however, that it is not always well applied. Eiffel has made a particular effort to tame inheritance for the benefit of modelers and software developers. Many of the techniques are original with Eiffel. Paul Dubois has written (comp.lang.python Usenet newsgroup, 23 March 1997): there are two things that [Eiffel] got right that nobody else got right anywhere else: support for design by contract, and multiple inheritance. Everyone should understand these "correct answers" if only to understand how to work around the limitations in other languages. ==Basic inheritance structure== diff --git a/documentation/current/method/eiffel-tutorial-et/et-learn-more.wiki b/documentation/current/method/eiffel-tutorial-et/et-learn-more.wiki index 2db84030..31e00652 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-learn-more.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-learn-more.wiki @@ -1,6 +1,7 @@ [[Property:title|13 To Learn More]] [[Property:link_title|ET: To Learn More]] [[Property:weight|-1]] +[[Property:uuid|74a5c826-8f21-8cf2-4f2c-dee4ee28ead5]] Beyond this introduction, you will find the following two books essential to a mastery of the method and language:
* [http://eiffel.com/doc/oosc/ Object-Oriented Software Construction] , Bertrand Meyer, Prentice Hall, 2nd edition 1997. (Make sure to get the second edition.) About object technology in general; presents the method behind Eiffel. * [http://eiffel.com/doc/ Eiffel: The Language] , Bertrand Meyer, Prentice Hall, 1992. Language manual and reference. diff --git a/documentation/current/method/eiffel-tutorial-et/et-lexical-conventions-and-style-rules.wiki b/documentation/current/method/eiffel-tutorial-et/et-lexical-conventions-and-style-rules.wiki index d390ede7..0299223d 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-lexical-conventions-and-style-rules.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-lexical-conventions-and-style-rules.wiki @@ -1,12 +1,13 @@ [[Property:title|12 Lexical Conventions and Style Rules]] [[Property:link_title|ET: Lexical Conventions and Style Rules]] [[Property:weight|-2]] +[[Property:uuid|60fdf029-8626-166d-cc4f-9069aacdda7f]] Eiffel software texts are free-format: distribution into lines is not semantically significant, and any number of successive space and line-return characters is equivalent to just one space. The style rules suggest indenting software texts as illustrated by the examples in this chapter. Successive declarations or instructions may be separated by semicolons. Eiffel's syntax has been so designed, however, that (except in rare cases) '''the semicolon is optional'''. Omitting semicolons for elements appearing on separate lines lightens text and is the recommended practice since semicolons, as used by most programming languages, just obscure the text by distracting attention from the actual contents. Do use semicolons if you occasionally include successive elements on a single line. 63 names -- all unabbreviated single English words, except for elseif which is made of two words -- are reserved, meaning that you cannot use them to declare new entities. Here is the list: -{| +{| border="1" |- | agent | alias diff --git a/documentation/current/method/eiffel-tutorial-et/et-other-mechanisms.wiki b/documentation/current/method/eiffel-tutorial-et/et-other-mechanisms.wiki index 83649f51..4d1163e2 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-other-mechanisms.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-other-mechanisms.wiki @@ -1,6 +1,7 @@ [[Property:title|10 Other Mechanisms]] [[Property:link_title|ET: Other Mechanisms]] [[Property:weight|-4]] +[[Property:uuid|c0a01664-194c-4e84-0517-8e7c1ca61dec]] We now examine a few important mechanisms that complement the preceding picture: shared objects; constants; instructions; and lexical conventions. ==Once routines and shared objects== diff --git a/documentation/current/method/eiffel-tutorial-et/et-overview.wiki b/documentation/current/method/eiffel-tutorial-et/et-overview.wiki index 2913de55..38cc279d 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-overview.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-overview.wiki @@ -1,6 +1,7 @@ [[Property:title|1 Overview]] [[Property:link_title|ET: Overview]] [[Property:weight|-15]] +[[Property:uuid|0eaddff9-5d72-87fc-663a-2fc8a9152c25]] Eiffel is a method and language for the efficient description and development of quality systems. As a language, Eiffel is more than a programming language. It covers not just programming in the restricted sense of implementation but the whole spectrum of software development:
diff --git a/documentation/current/method/eiffel-tutorial-et/et-software-process-eiffel.wiki b/documentation/current/method/eiffel-tutorial-et/et-software-process-eiffel.wiki index dab68dc5..f02bcb8d 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-software-process-eiffel.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-software-process-eiffel.wiki @@ -1,6 +1,7 @@ [[Property:title|3 The Software Process in Eiffel]] [[Property:link_title|ET: The Software Process in Eiffel]] [[Property:weight|-13]] +[[Property:uuid|eef7f31a-25de-93cc-9a33-41d991c51ccb]] Eiffel, as noted, supports the entire lifecycle. The underlying view of the system development lifecycle is radically different not only from the traditional "Waterfall" model (implying a sequence of discrete steps, such as analysis, global design, detailed design, implementation, separated by major changes of method and notation) but also from its more recent variants such as the spiral model or "rapid prototyping", which remain predicated on a synchronous, full-product process, and retain the gaps between successive steps. Clearly, not everyone using Eiffel will follow to the letter the principles outlined below; in fact, some highly competent and successful Eiffel developers may disagree with some of them and use a different process model. In the author's mind, however, these principles fit best with the language and the rest of the method, even if practical developments may fall short of applying their ideal form. diff --git a/documentation/current/method/eiffel-tutorial-et/et-static-picture-system-organization.wiki b/documentation/current/method/eiffel-tutorial-et/et-static-picture-system-organization.wiki index cd42257d..20826c75 100644 --- a/documentation/current/method/eiffel-tutorial-et/et-static-picture-system-organization.wiki +++ b/documentation/current/method/eiffel-tutorial-et/et-static-picture-system-organization.wiki @@ -1,6 +1,7 @@ [[Property:title|5 The Static Picture: System Organization]] [[Property:link_title|ET: The Static Picture: System Organization]] [[Property:weight|-11]] +[[Property:uuid|46d3f41e-d41c-a443-4574-403dfebb60aa]] We now look at the overall organization of Eiffel software. References to Eiffel Software's libraries appearing in subsequent examples include: '''EiffelBase''', the fundamental open-source library covering data structures and algorithms; the '''kernel library''', a subset of EiffelBase covering the most basic notions such as arrays and strings; and '''EiffelVision 2''', an advanced graphics and GUI library providing full compatibility across platforms (Unix, Windows, OpenVMS) with native look-and-feel on each. diff --git a/documentation/current/method/eiffel-tutorial-et/index.wiki b/documentation/current/method/eiffel-tutorial-et/index.wiki index dda4eb7e..3200910f 100644 --- a/documentation/current/method/eiffel-tutorial-et/index.wiki +++ b/documentation/current/method/eiffel-tutorial-et/index.wiki @@ -2,5 +2,5 @@ [[Property:link_title|Tutorial]] [[Property:weight|2]] [[Property:uuid|4dbc41e2-ecfc-8c50-9288-fce30f4abd90]] -From this tutorial you should get a solid understanding of what Eiffel is all about and why it is different from other technologies. Still more detail is available in [http://www.eiffel.com/doc/oosc/ Object-oriented Software Construction, 2nd Edition]. +From this tutorial you should get a broad understanding of what Eiffel is all about and why it is different from other technologies. Still more detail is available in [http://www.eiffel.com/doc/oosc/ Object-oriented Software Construction, 2nd Edition]. diff --git a/documentation/current/method/index.wiki b/documentation/current/method/index.wiki index 7c97f3b8..a371cfd8 100644 --- a/documentation/current/method/index.wiki +++ b/documentation/current/method/index.wiki @@ -6,10 +6,11 @@ Here you can learn about the Eiffel development method and Eiffel the language. -At the heart of the Eiffel Development Framework is the Eiffel method. Everything else, the language, the tools, the libraries exist because of the method. The method is laid out in detail in [http://www.eiffel.com/doc/oosc/ Object-oriented Software Construction, 2nd Edition]. But you will find some introductory material here. An "invitation" to Eiffel which is fairly short, and a tutorial which is more detailed. +At the heart of the Eiffel Development Framework is the Eiffel method. Everything else, the language, the tools, the libraries exist because of the method. -In order for us to communicate effectively about the activities of the method we must some way to record the products of those activities. That is what Eiffel the language does for us ... with the added benefit that, ultimately, we implement whole running software systems in the language. +In order for us to communicate effectively about the activities of the method we must have some way to record the products of those activities. That is what Eiffel the language does for us ... with the added benefit that, ultimately, we implement whole running software systems in the language. +The method is laid out in wonderful detail in [http://www.eiffel.com/doc/oosc/ Object-oriented Software Construction, 2nd Edition]. But, if you're just getting started, you will find some good introductory material on this page. The invitation to Eiffel is fairly short introduction to the method and language. and the tutorial gives a more detailed look. * An [[Invitation to Eiffel|Invitation to Eiffel]] diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-combining-genericity-and-inheritance.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-combining-genericity-and-inheritance.wiki index 44d57810..2e849e24 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-combining-genericity-and-inheritance.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-combining-genericity-and-inheritance.wiki @@ -1,6 +1,7 @@ [[Property:title|12 Combining Genericity and Inheritance]] [[Property:link_title|I2E: Combining Genericity and Inheritance]] [[Property:weight|-3]] +[[Property:uuid|912e4c38-9add-e478-59c3-5c10aa75d784]] Genericity and inheritance, the two fundamental mechanisms for generalizing classes, may be combined in two fruitful ways. The first technique yields '''polymorphic data structures'''. Assume that in the generic class LIST [ G ] the insertion procedure put has a formal argument of type G , representing the element to be inserted. Then with a declaration such as diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-deferred-classes-and-seamless-development.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-deferred-classes-and-seamless-development.wiki index 116a8073..0c941739 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-deferred-classes-and-seamless-development.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-deferred-classes-and-seamless-development.wiki @@ -1,6 +1,7 @@ [[Property:title|13 Deferred Classes and Seamless Development]] [[Property:link_title|I2E: Deferred Classes and Seamless Development]] [[Property:weight|-2]] +[[Property:uuid|b3264238-f160-a6fc-0b03-adcd80b1f55a]] The inheritance mechanism includes one more major notion: deferred features and classes. Declaring a feature f as deferred in a class C expresses that there is no default implementation of f in C ; such implementations will appear in eventual descendants of C . A class that has one or more deferred routines is itself said to be deferred. A non-deferred routine or class -- like all those seen until now -- is said to be '''effective'''. diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-design-contract-and-assertions.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-design-contract-and-assertions.wiki index e8888ddb..a5dbb3dd 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-design-contract-and-assertions.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-design-contract-and-assertions.wiki @@ -1,6 +1,7 @@ [[Property:title|6 Design by Contract and Assertions]] [[Property:link_title|I2E: Design by Contract and Assertions]] [[Property:weight|-9]] +[[Property:uuid|f563aa75-3a5a-5110-b4f1-07da5448f668]] If classes are to deserve their definition as abstract data type implementations, they must be known not just by the available operations, but also by the formal properties of these operations, which did not yet appear in the preceding example. ==The role of assertions== diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-design-principles.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-design-principles.wiki index 768b0638..55bda873 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-design-principles.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-design-principles.wiki @@ -1,6 +1,7 @@ [[Property:title|2 Design Principles]] [[Property:link_title|I2E: Design Principles]] [[Property:weight|-13]] +[[Property:uuid|529659bd-ec13-5805-87f2-2fd9318ad442]] The aim of Eiffel is to help specify, design, implement and modify quality software. This goal of quality in software is a combination of many factors; the language design concentrated on the three factors which, in the current state of the industry, are in direct need of improvements: reusability, extendibility and reliability. Also important were other factors such as efficiency, openness and portability. '''Reusability''' is the ability to produce components that may serve in many different applications. Central to the Eiffel approach is the presence of predefined libraries such as EiffelBase, and the language's support for the production of new libraries. diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-event-driven-programming-and-agents.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-event-driven-programming-and-agents.wiki index 640bf506..615a7c97 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-event-driven-programming-and-agents.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-event-driven-programming-and-agents.wiki @@ -1,6 +1,7 @@ [[Property:title|8 Event-Driven Programming and Agents]] [[Property:link_title|I2E: Event-Driven Programming and Agents]] [[Property:weight|-7]] +[[Property:uuid|16fdab60-ae42-1bb8-f4bb-89e34d18a842]] The division of roles in object technology is clear: of the two principal constituents of a system, object types and operations, the first dominates. Classes, representing object types, determines the structure of the software; every routine, representing an operations, belongs to a class. In some circumstances it is useful to define an object that denotes an operation. This is especially useful if you want to build an object structure that refers to operations, so that you can later traverse the structure and execute the operations encountered. A typical application is '''event-driven programming''' for Graphical User Interfaces (GUI), including Web programming. In GUI programming you will want to record properties of the form diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-exceptions.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-exceptions.wiki index a7189d16..777b4304 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-exceptions.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-exceptions.wiki @@ -1,6 +1,7 @@ [[Property:title|7 Exceptions]] [[Property:link_title|I2E: Exceptions]] [[Property:weight|-8]] +[[Property:uuid|e3e10dac-0dd7-bbe1-240c-6a6985c7376a]] Whenever there is a contract, the risk exists that someone will break it. This is where exceptions come in. Exceptions -- contract violations -- may arise from several causes. One is an assertion violation, if you've selected run-time assertion monitoring. Another is a signal triggered by the hardware or operating system to indicate an abnormal condition such as arithmetic overflow, or an attempt to create a new object when there's not enough memory available. diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-genericity.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-genericity.wiki index 9525baf5..4b9015c8 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-genericity.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-genericity.wiki @@ -1,6 +1,7 @@ [[Property:title|9 Genericity]] [[Property:link_title|I2E: Genericity]] [[Property:weight|-6]] +[[Property:uuid|091c0b65-73de-b454-b3f2-d8752983780e]] Building software components (classes) as implementations of abstract data types yields systems with a solid architecture but does not in itself ensure reusability and extendibility. Two key techniques address the problem: generosity (unconstrained or constrained) and inheritance. Let us look first at the unconstrained form. To make a class generic is to give it '''formal generic parameters''' representing as unknown types, as in these examples from EiffelBase, an open-source library covering basic data structures and algorithms: diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-inheritance.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-inheritance.wiki index 6c7cc202..9dcc9f6a 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-inheritance.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-inheritance.wiki @@ -1,6 +1,7 @@ [[Property:title|10 Inheritance]] [[Property:link_title|I2E: Inheritance]] [[Property:weight|-5]] +[[Property:uuid|acf84989-0e7c-f2f7-427a-19e7fce404ce]] Inheritance, the other fundamental generalization mechanism, makes it possible to define a new class by combination and specialization of existing classes rather than from scratch. The following simple example, from the Data Structure Library in EiffelBase, is typical. LIST , as noted, describes lists in any representation. One such representation if the lists have a fixed number of elements uses an array. We may define the corresponding class by combination of LIST and ARRAY , as follows: diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-invitation-eiffel-copyright.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-invitation-eiffel-copyright.wiki new file mode 100644 index 00000000..633463d7 --- /dev/null +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-invitation-eiffel-copyright.wiki @@ -0,0 +1,38 @@ +[[Property:title|Invitation to Eiffel Copyright]] +[[Property:link_title|I2E: Invitation to Eiffel Copyright]] +[[Property:weight|0]] +[[Property:uuid|ce7b4af4-b669-9fec-92e1-c24c4f089336]] +Title: Invitation to Eiffel, Eiffel Software Technical Report TR-EI-67/IV. + +==Publication history== +First published 1987. Some revisions (in particular Web versions) have used the title "Eiffel in a Nutshell"
+This version: July 2001. Introduces coverage of agents; several other improvements. Corresponds to release 5.0 of the EiffelStudio environment. +==Author== +Bertrand Meyer +==Software Credits== +See acknowledgments in book [http://www.eiffel.com/doc/page.html Eiffel: The Language] . +==Cover Design== +Rich Ayling. +==Copyright notice and proprietary information== +Copyright Interactive Software Engineering Inc. (Eiffel Software), 2001. May not be reproduced in any form (including electronic storage) without the written permission of Eiffel Software . "Eiffel Power" and the Eiffel Power logo are trademarks of Eiffel Software . All uses of the product documented here are subject to the terms and conditions of the Eiffel Software Eiffel user license. Any other use or duplication is a violation of the applicable laws on copyright, trade secrets and intellectual property. +==Special duplication permission for educational institutions== +Degree-granting educational institutions using Eiffel Software Eiffel for teaching purposes as part of the [http://www.eiffel.com/educators/resources.html Eiffel University Partnership Program] may be permitted under certain conditions to copy specific parts of this book. Contact Eiffel Software for details. +{{info|About Eiffel Software (Interactive Software Engineering) helps you produce software better, faster and cheaper. Eiffel Software provides a wide range of products and services based on object technology, including Eiffel Software Eiffel, a complete development environment for the full system life cycle. Eiffel Software's training courses, available worldwide, cover key management and technical topics. Eiffel Software's consultants are available to address your project needs at all levels. Eiffel Software's TOOLS (Technology of Object-Oriented Languages and Systems) conferences, [http://www.tools-conferences.com http://www.tools-conferences.com] , are the meeting point for anyone interested in the software technologies of the future. Eiffel Software originated one of the earliest . NET products and offers a full range of . NET services and training at [http://www.dotnetexperts.com http://www.dotnetexperts.com] . }} + +==For more information== +Interactive Software Engineering Inc.
+Eiffel Software Building,
+356 Storke Road,
+Goleta,
+CA, 93117
+USA.
+
+Telephone 805-685-1006,
+Fax 805-685-6869 +==Internet and email== +Eiffel Software maintains a rich source of information at [http://eiffel.com http://eiffel.com] , with more than 1200 Web pages including online documentation, downloadable files, product descriptions, links to Eiffel Software partners, University Partnership program, mailing list archives, announcements, press coverage, Frequently Asked Questions, Support pages, and much more. Visit [http://www.eiffel.com/general/contact_details.html http://www.eiffel.com/general/contact_details.html] to request information about products and services. To subscribe to the Eiffel Software Eiffel user list, go to [http://groups.eiffel.com/join http://groups.eiffel.com/join] . +==Support programs== +Eiffel Software offers a variety of support options tailored to the diverse needs of its customers. See [http://support.eiffel.com http://support.eiffel.com] for details. + + + diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-object-oriented-design.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-object-oriented-design.wiki index 7345d7d9..1a9edfa2 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-object-oriented-design.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-object-oriented-design.wiki @@ -1,6 +1,7 @@ [[Property:title|3 Object-Oriented Design]] [[Property:link_title|I2E: Object-Oriented Design]] [[Property:weight|-12]] +[[Property:uuid|e0a1f24e-5dd7-e5f8-8be8-8da32cc6a91c]] To achieve reusability, extendibility and reliability, the principles of object-oriented design provide the best known technical answer. An in-depth discussion of these principles fall beyond the scope of this introduction but here is a short definition: diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-polymorphism-and-dynamic-binding.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-polymorphism-and-dynamic-binding.wiki index 6b00f809..9e009d86 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-polymorphism-and-dynamic-binding.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-polymorphism-and-dynamic-binding.wiki @@ -1,6 +1,7 @@ [[Property:title|11 Polymorphism and Dynamic Binding]] [[Property:link_title|I2E: Polymorphism and Dynamic Binding]] [[Property:weight|-4]] +[[Property:uuid|1c3221be-0237-1c9a-407d-652a4084de12]] Inheritance is not just a module combination and enrichment mechanism. It also enables the definition of flexible entities that may become attached to objects of various forms at run time, a property known as polymorphism. This remarkable facility must be reconciled with static typing. The language convention is simple: an assignment of the form a : b is permitted not only if a and b are of the same type, but more generally if a and b are of reference types A and B , based on classes A and B such that B is a descendant of A . diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-putting-system-together.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-putting-system-together.wiki index df1e3b33..be28b047 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-putting-system-together.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-putting-system-together.wiki @@ -1,6 +1,7 @@ [[Property:title|14 Putting a System Together]] [[Property:link_title|I2E: Putting a System Together]] [[Property:weight|-1]] +[[Property:uuid|97460714-8ae1-a7cb-8216-235827045ea6]] We have now studied the constituents of Eiffel software. It remains to see how you can combine these elements into executable '''systems''' (the Eiffel concept closest to the traditional notion of program) and libraries. How do you get an executable system? All you need is to
diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-types.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-types.wiki index da20602c..6b3b9481 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-types.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-types.wiki @@ -1,6 +1,7 @@ [[Property:title|5 Types]] [[Property:link_title|I2E: Types]] [[Property:weight|-10]] +[[Property:uuid|344a9fdc-3346-5e2d-5fdd-77464e92f72f]] Eiffel is strongly typed for readability and reliability. Every entity is declared of a certain type, which may be either a reference type or an expanded type. Any type T is based on a class, which defines the operations that will be applicable to instances of T . The difference between the two categories of type affects the semantics of an entity x declared of type T : for a reference type, the most common case, possible values for x are references to objects; for an expanded type, the values are objects. In both cases, the type rules guarantee that the objects will be instances of T . diff --git a/documentation/current/method/invitation-eiffel-i2e/i2e-what-must-i-know-first.wiki b/documentation/current/method/invitation-eiffel-i2e/i2e-what-must-i-know-first.wiki index f39d1ae1..0e04881a 100644 --- a/documentation/current/method/invitation-eiffel-i2e/i2e-what-must-i-know-first.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/i2e-what-must-i-know-first.wiki @@ -1,6 +1,7 @@ [[Property:title|1 What Must I Know First?]] [[Property:link_title|I2E: What Must I Know First?]] [[Property:weight|-14]] +[[Property:uuid|f40b4a30-87f7-2c27-b6e7-ef2f2a74661b]] This Invitation assumes that you have some experience of software development, but that's all. Previous exposure to object technology is not required. If you've had it, it will help; but if it has all been to notations like UML or programming languages like C++ and Java, you should not let it guide your study of this Invitation. Although Eiffel shares a number of properties with these other approaches, it takes a fresh path to object technology, based on a small number of simple, far-reaching concepts. Once you are familiar with the basic ideas you may want to try them with EiffelStudio, which provides a direct implementation of the Eiffel concepts, available in a completely portable way across Windows, Linux, many versions of Unix and OpenVMS. diff --git a/documentation/current/method/invitation-eiffel-i2e/index.wiki b/documentation/current/method/invitation-eiffel-i2e/index.wiki index 5dbd8976..5e33b911 100644 --- a/documentation/current/method/invitation-eiffel-i2e/index.wiki +++ b/documentation/current/method/invitation-eiffel-i2e/index.wiki @@ -1,7 +1,7 @@ [[Property:title|Invitation to Eiffel]] [[Property:weight|-15]] [[Property:uuid|7a606387-2653-b122-b4ef-e283a389656e]] -The Invitation to Eiffel is a short set of pages that should give you the "essence" of what Eiffel is all about, without taking too much of your time. Enjoy this profoundly different way of thinking about developing software! When you are done, move on to the more detailed Eiffel tutorial. +The Invitation to Eiffel is a short set of pages that should provide you with the essence the Eiffel way, without taking too much of your time. Enjoy this profoundly different way of thinking about developing software! When you are done, move on to the more detailed Eiffel tutorial. diff --git a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/eiffelcom-interface-content/index.wiki b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/eiffelcom-interface-content/index.wiki index 61cff1ae..6026a1a7 100644 --- a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/eiffelcom-interface-content/index.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/eiffelcom-interface-content/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelCOM Content]] [[Property:link_title|EiffelCOM Interface Content]] [[Property:weight|-2]] +[[Property:uuid|a6543000-6009-970e-8a68-a6f3b18c1fc6]] The EiffelCOM library includes the following clusters: * A [[ref:libraries/com/reference/index|Constants]] cluster provides standard COM constants and enumerations. * A [[Interfaces|Interfaces]] cluster includes wrappers for standard interfaces that the EiffelCOM wizard does not generate and deferred classes: [[ref:libraries/com/reference/ecom_interface_chart|ECOM_INTERFACE]] , [[ref:libraries/com/reference/ecom_queriable_chart|ECOM_QUERIABLE]] , and [[ref:libraries/com/reference/ecom_stub_chart|ECOM_STUB]] . diff --git a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/eiffelcom-interface-content/interfaces.wiki b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/eiffelcom-interface-content/interfaces.wiki index a595aa24..8887999e 100644 --- a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/eiffelcom-interface-content/interfaces.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/eiffelcom-interface-content/interfaces.wiki @@ -1,5 +1,6 @@ [[Property:title|Interfaces]] [[Property:weight|0]] +[[Property:uuid|7f65c561-cac3-6870-5d1c-6f73beeed872]] COM interfaces have several facets. First, an interface is a deferred, or an abstract, class. This means that an interface is a specification of a type. Second, an interface pointer represents a COM object, which is callable by a client application. An object can expose several interfaces, or represent several types. ==ECOM_INTERFACE== diff --git a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/eiffelcom-interface-content/structures.wiki b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/eiffelcom-interface-content/structures.wiki index 8ae66993..31773cc4 100644 --- a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/eiffelcom-interface-content/structures.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/eiffelcom-interface-content/structures.wiki @@ -1,5 +1,6 @@ [[Property:title|Structures]] [[Property:weight|1]] +[[Property:uuid|fc2071f0-213c-cc88-4914-833b598ceb83]] The [[ref:libraries/com/reference/index|Structures]] cluster includes wrappers for data structures useful when using the COM technology. ==ECOM_ARRAY== diff --git a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/index.wiki b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/index.wiki index d7f00a0c..3c54e4a0 100644 --- a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/index.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-library/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelCOM Library]] [[Property:weight|8]] +[[Property:uuid|b5c66d71-515f-3c73-9c67-c50e4a8d6685]] Type: Library
Platform: Windows
diff --git a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/access-type.wiki b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/access-type.wiki index 35ddcf1a..e0f46b5e 100644 --- a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/access-type.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/access-type.wiki @@ -1,5 +1,6 @@ [[Property:title|Access Type]] [[Property:weight|5]] +[[Property:uuid|0d049617-9737-7cc8-810a-9f6f9ca603ec]] Regardless of its location, a COM components can be accessed either directly through interface's virtual table or through OLE Automation. ==Automation== Accessing a COM component through Automation means using a well known interface to access to a group of methods and properties. This interface is called IDispatch, and it includes the method invoke that allows to call a method, set or get a property on the Automation server. One advantage of that approach is that the interface has a known virtual table layout. As a result, Windows can include a built-in marshaler for that interface (See [[Deeper into COM|Marshaling]] for information on what a marshaler is). The supported types (known as Automation types) and their Eiffel equivalents are listed in the following table: diff --git a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/com-concepts.wiki b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/com-concepts.wiki index 114e76f7..9393c2bf 100644 --- a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/com-concepts.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/com-concepts.wiki @@ -1,6 +1,7 @@ [[Property:title|Generalities]] [[Property:link_title|COM Concepts]] [[Property:weight|1]] +[[Property:uuid|9cb19fc1-3d26-5752-6232-ea23f2668c32]] COM is a binary standard that describes how the component can communicate with the outer-world. The component communicates through well defined interfaces. Each interface is a specification of a group of properties and methods, and it does not contain the implementation of these routines but only their specification (signatures). The actual implementation lies in the coclass. There can be different implementations of a same interface in different coclasses. Finally, each coclass can be instantiated using a class object or class factory. These three notions will be discussed further in the forthcoming paragraphs. {{seealso| '''See Also'''
[[EiffelCOM Wizard|EiffelCOM wizard]]
diff --git a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/com-interfaces.wiki b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/com-interfaces.wiki index 635117c0..7959586a 100644 --- a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/com-interfaces.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/com-interfaces.wiki @@ -1,5 +1,6 @@ [[Property:title|COM Interfaces]] [[Property:weight|2]] +[[Property:uuid|1dbc3fb2-cf0b-b129-1102-ba01e26d8f74]] Interfaces are at the heart of any COM component. Interfaces are described in the definition file of a component. They consist of a group of semantically related functions that can be accessed by the clients of the component. Although they are a specification, they also have a physical representation. A client can request a pointer on an interface and access the component functions through that pointer. Interfaces are the only possible way to access functions from a component. They enforce information hiding by providing only the public functions to the client. Interfaces also define the type of a component. Each interface corresponds to a specific view of the component. It can be compared to polymorphism in the Object Oriented world. Whenever an interface from a component is requested, only the functions defined on that interface are accessible as if the component was polymorphically cast into an object of the type of that interface. diff --git a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/component-location.wiki b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/component-location.wiki index 5cab58d0..574631bd 100644 --- a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/component-location.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/component-location.wiki @@ -1,5 +1,6 @@ [[Property:title|The Component Location]] [[Property:weight|4]] +[[Property:uuid|083c0120-2eda-9353-ceae-f63e7f407341]]
==Types of Components== ActiveX, DirectX, OCX, COM+, ADO+, ASP etc. who never heard of these technologies? They all represent yet another use of the COM standard. This paragraph will focus on categorizing COM components according to their own properties as well as the context in which they are used. The categorization will define how the EiffelCOM wizard should be used to wrap or create a component.
The first criteria that defines the type of component is from where it will be accessed: will the component be loaded in the client process or will the component be a remote server for a distributed application? In the former case, the component is compiled as a Dynamic Link Libraries (DLL) while in the latter case it is a standard executable.
diff --git a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/eiffelcom-introduction.wiki b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/eiffelcom-introduction.wiki index b2533acb..9f19473a 100644 --- a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/eiffelcom-introduction.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/eiffelcom-introduction.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelCOM: Introduction]] [[Property:weight|0]] +[[Property:uuid|adadc51d-3dec-320a-9405-0842eacca4f7]] This chapter covers enough information about COM for Eiffel developers to use the EiffelCOM wizard in an effective way. It does not cover all of COM since it would require an entire book but presents the main concepts needed to understand how to build an EiffelCOM system. Briefly said, the Component Object Model is a Microsoft binary standard that establishes how two binary units can access each other at runtime. Such binary units can run in the same process, in different processes on the same machine, or even on different machines. Components can be implemented in any language as long as the compiler produces COM standard compliant binaries. diff --git a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/index.wiki b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/index.wiki index 4c42cbed..40e11b9f 100644 --- a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/index.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/com-and-eiffel/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelCOM]] [[Property:link_title|COM and Eiffel]] [[Property:weight|-15]] +[[Property:uuid|32e79152-1e8f-43cd-e014-a83aab18e440]] * [[EiffelCOM: Introduction|Introduction]] * [[Generalities|Generalities]] * [[COM Interfaces|Interfaces]] diff --git a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/index.wiki b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/index.wiki index 4ae2a3de..ac7eb17a 100644 --- a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/index.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelCOM Wizard]] [[Property:weight|4]] +[[Property:uuid|49d5c1b9-14f8-5bea-6641-50e9cf6715cf]] Type: Wizard
Platform: Windows diff --git a/documentation/current/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/index.wiki b/documentation/current/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/index.wiki index 64ef8f8b..5327087a 100644 --- a/documentation/current/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/index.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/net/eiffel-aspnet-documentation/index.wiki @@ -1,5 +1,6 @@ [[Property:title|Eiffel for ASP.NET Documentation]] [[Property:weight|6]] +[[Property:uuid|158e298e-e4b3-3246-651c-557f2f630957]] CodeDom is a Microsoft .NET technology which allows representing source code programatically so that it may be rendered in different languages. The Eiffel CodeDom Provider is installed through Eiffel for ASP.NET which is available for download for free on the Eiffel Software web site ( [http://www.eiffel.com http://www.eiffel.com] ).
The following documents cover different aspects of the Eiffel CodeDom Provider: * [[Writing ASP.NET pages in Eiffel|Writing ASP.NET pages in Eiffel]] covers topics related to writing Eiffel pages in ASP.NET. diff --git a/documentation/current/platform-specifics/microsoft-windows/net/index.wiki b/documentation/current/platform-specifics/microsoft-windows/net/index.wiki index 2220948e..e80b8818 100644 --- a/documentation/current/platform-specifics/microsoft-windows/net/index.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/net/index.wiki @@ -1,5 +1,6 @@ [[Property:title|.NET]] [[Property:weight|-15]] +[[Property:uuid|55eda2f0-0c60-f08c-b141-913e31a49c2f]] * [[.NET Installation instructions|Installation instructions]] * [[Building a .NET application|Building a .NET application]] * [[The Eiffel for .NET language|Eiffel for .NET language description]] diff --git a/documentation/current/platform-specifics/microsoft-windows/resourcebench/index.wiki b/documentation/current/platform-specifics/microsoft-windows/resourcebench/index.wiki index 2b62e2c4..be60b019 100644 --- a/documentation/current/platform-specifics/microsoft-windows/resourcebench/index.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/resourcebench/index.wiki @@ -1,5 +1,6 @@ [[Property:title|ResourceBench]] [[Property:weight|1]] +[[Property:uuid|a39ba4ef-460f-eab7-080d-c83d91546484]] Type: Tool
Platform: Any
Version: 5.4
diff --git a/documentation/current/platform-specifics/microsoft-windows/wel/index.wiki b/documentation/current/platform-specifics/microsoft-windows/wel/index.wiki index d209e6fa..ea4ef3db 100644 --- a/documentation/current/platform-specifics/microsoft-windows/wel/index.wiki +++ b/documentation/current/platform-specifics/microsoft-windows/wel/index.wiki @@ -1,6 +1,7 @@ [[Property:title|WEL Library]] [[Property:link_title|WEL]] [[Property:weight|-13]] +[[Property:uuid|a8f57de5-a0eb-262e-a825-95a706392640]] Type: Library
Platform: Windows
diff --git a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-samples/eiffelbase-sample-calculator.wiki b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-samples/eiffelbase-sample-calculator.wiki index 39ed9239..133611ea 100644 --- a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-samples/eiffelbase-sample-calculator.wiki +++ b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-samples/eiffelbase-sample-calculator.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBase Sample: Calculator]] [[Property:weight|0]] +[[Property:uuid|12c3409d-165b-b1df-e26a-b05d49969661]] This sample consists of a command line reverse Polish notation (RPN) calculator. {{note| '''Note:''' A RPN calculator works slightly differently from standard calculators. It consists of a stack of numbers. Operations are applied to the two numbers on top of the stack. The result is then put on top of the stack so that it can be used in the next operation. This sample refers to the top of the stack as ''Accumulator''. diff --git a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-samples/index.wiki b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-samples/index.wiki new file mode 100644 index 00000000..10693b75 --- /dev/null +++ b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-samples/index.wiki @@ -0,0 +1,8 @@ +[[Property:title|EiffelBase Samples]] +[[Property:weight|3]] +[[Property:uuid|5095bbdf-0dd6-7d7b-68d4-59a8293950ee]] +* [[EiffelBase Sample: Calculator|Calculator]] + + + + diff --git a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-abstract-container-structures-taxonomy.wiki b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-abstract-container-structures-taxonomy.wiki index a4b5969f..3caf0c62 100644 --- a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-abstract-container-structures-taxonomy.wiki +++ b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-abstract-container-structures-taxonomy.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBase, Abstract Container Structures: The Taxonomy]] [[Property:weight|0]] +[[Property:uuid|15ec3e87-45c6-ab53-ddad-d1348a9d8d75]] A container data structure (or container in the sequel) is an object which serves to store and access collections of objects, called the '''items''' of the container. All classes describing containers are descendants of the deferred class [[ref:libraries/base/reference/container_chart|CONTAINER]] . A container can be studied from three viewpoints: access, storage and traversal. diff --git a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-data-structures-lists.wiki b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-data-structures-lists.wiki index 36201b8f..3146f391 100644 --- a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-data-structures-lists.wiki +++ b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-data-structures-lists.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBase Data Structures, Lists]] [[Property:weight|1]] +[[Property:uuid|23f540e0-16d5-807c-30af-74d3416a5709]] Many applications need sequential structures, also called linear structures, in particular lists and circular chains. Apart from three classes describing individual list cells, all the classes involved are descendants of class [[ref:/libraries/base/reference/linear_chart|LINEAR]] , one of the deferred classes describing general traversal properties and introduced in the chapter that described the general data structure taxonomy. More precisely, all but one of the classes of interest for the present discussion are descendants, direct or indirect, from a class called [[ref:/libraries/base/reference/chain_chart|CHAIN]] which describes general sequential structures possessing a cursor as well as insertion properties. The exception is class [[ref:/libraries/base/reference/countable_sequence_chart|COUNTABLE_SEQUENCE]] , which describes infinite structures; all the others describe finite structures.
[[ref:/libraries/base/reference/chain_chart|CHAIN]] is an heir of [[ref:/libraries/base/reference/sequence_chart|SEQUENCE]] , which describes a more general notion of sequence. [[ref:/libraries/base/reference/sequence_chart|SEQUENCE]] is a descendant of [[ref:/libraries/base/reference/linear_chart|LINEAR]] . There are two main categories of sequential structures: some, called circular chains, are cyclic; others, called lists, are not. Another distinction exists between dynamic structures, which may be extended at will, and fixed ones, which have a bounded capacity.
In all of the structures under review you may insert two or more occurrences of a given item in such a way that the occurrences are distinguishable. In other words, the structures are bags rather than just sets, although it is possible to use them to implement sets. diff --git a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-dispensers.wiki b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-dispensers.wiki index 8490a545..1ebeca76 100644 --- a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-dispensers.wiki +++ b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-dispensers.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBase, Dispensers]] [[Property:weight|2]] +[[Property:uuid|4f65d62b-940b-c3c2-557e-d709a2a1bcaf]] A dispenser is called that way because of the image of a vending machine (a dispenser) of a rather primitive nature, in which there is only one button. If you press the button and the dispenser is not empty, you get one of its items in the exit tray at the bottom, but you do not choose that item: the machine does. There is also an input slot at the top, into which you may deposit new items; but you have no control over the order in which successive button press operations will retrieve these items. The deferred class [[ref:/libraries/base/reference/dispenser_chart|DISPENSER]] provides the facilities which will be shared by all specialized classes. In fact, the interface of all dispenser classes is nearly identical, with the exception of a few extra possibilities offered by priority queues. Many kinds of dispenser are possible, each defined by the relation that the machine defines between the order in which items are inserted and the order in which they arereturned. The Base libraries support three important categories - stacks, queues, and priority queues: diff --git a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-iteration.wiki b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-iteration.wiki index 09e34670..dbf7c0e7 100644 --- a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-iteration.wiki +++ b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-iteration.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBase, Iteration]] [[Property:weight|6]] +[[Property:uuid|9c0313bf-571d-0c8d-5c49-8bd99f86bed5]] The classes of the Iteration cluster encapsulate control structures representing common traversal operations. =Iterators and Agents= diff --git a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-sets.wiki b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-sets.wiki index 4bc85314..c48a0816 100644 --- a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-sets.wiki +++ b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-sets.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBase, Sets]] [[Property:weight|4]] +[[Property:uuid|44d33f46-cfa9-2aca-6b4f-2d9d91723d85]] Sets are containers where successive occurrences of the same item are not distinguished: inserting the same item twice has the same observable effect as inserting it once. ==Deferred classes== diff --git a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-tables.wiki b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-tables.wiki index 88cbf3e3..d0c78417 100644 --- a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-tables.wiki +++ b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-tables.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBase, Tables]] [[Property:weight|5]] +[[Property:uuid|194a63a2-e440-18dc-c9d5-6959dbe169fb]] Hash tables are a convenient mechanism tostore and retrieve objects identified by unique keys. ==Why use hash tables?== The main advantage of hash tables is the efficiency of the basic operations: store ( [[ref:libraries/base/reference/hash_table_chart|put]] ) and retrieve ( [[ref:libraries/base/reference/hash_table_chart|item]] , [[ref:libraries/base/reference/hash_table_chart|remove]] ).
diff --git a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-trees.wiki b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-trees.wiki index ed96a7bf..47f5ca45 100644 --- a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-trees.wiki +++ b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/eiffelbase-trees.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBase, Trees]] [[Property:weight|3]] +[[Property:uuid|8357fc1a-a089-c846-aee8-18b8fb26c288]] Trees and their immediate generalization, forests, are useful for any system that manipulates hierarchically organized information. The range of applications is broad, from abstract syntax trees in compilers through document structures in text processing systems to company organization charts in business software.
Trees, in particular binary trees and their variants, also provide convenient implementations of container data structures. diff --git a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/index.wiki b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/index.wiki index 6769db29..86b7b1c0 100644 --- a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/index.wiki +++ b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-data-structures-overview/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBase Data Structures Overview]] [[Property:weight|1]] +[[Property:uuid|195085fd-0b2f-8211-3d70-81c32cc13566]] The data structures cluster of EiffelBase includes classes that cover a wide range of data structures classes for you to reuse in your systems. The cluster is divided into a number of subclusters. Each subcluster contains one or more '''deferred''' classes, which provide the general high-level abstractions; other classes in the cluster inherit from the deferred ones. The highest-level class is [[ref:libraries/base/reference/container_chart| CONTAINER]] , with the following heirs: diff --git a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-kernel.wiki b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-kernel.wiki index 37040cfe..720237f6 100644 --- a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-kernel.wiki +++ b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-kernel.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBase, The Kernel]] [[Property:weight|0]] +[[Property:uuid|f6229125-dd7e-a50d-5b97-3ad7cd6071d5]] In addition to basic concepts close to the language level, the Kernel covers such common needs as '''input''' and '''output''', '''storage''' and '''retrieval''' of objects on persistent storage, fine control over '''exception handling''' and '''memory management''', and access to '''operating system facilities'''. The kernel can be divided into 5 logical clusters of classes: * The first cluster contains the universal class defining facilities accessible to all other classes: [[ref:/libraries/base/reference/any_chart|ANY]] . Every developer-defined class is a descendant of this class. * The second cluster includes classes whose facilities are directly related to language concepts: diff --git a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-support-cluster.wiki b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-support-cluster.wiki index 6326884c..b7f99575 100644 --- a/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-support-cluster.wiki +++ b/documentation/current/solutions/basic-computing/eiffelbase/eiffelbase-tutorial/eiffelbase-support-cluster.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBase Support Cluster]] [[Property:weight|2]] +[[Property:uuid|f9c2a003-9836-6688-db1f-5aa31313b317]] The support cluster offers some commonly needed functionality that do not belong to the kernel. ==Conversions, mathematical properties and ASCII characters== diff --git a/documentation/current/solutions/basic-computing/eiffelbase/index.wiki b/documentation/current/solutions/basic-computing/eiffelbase/index.wiki new file mode 100644 index 00000000..ec82d819 --- /dev/null +++ b/documentation/current/solutions/basic-computing/eiffelbase/index.wiki @@ -0,0 +1,13 @@ +[[Property:title|EiffelBase]] +[[Property:weight|1]] +[[Property:uuid|0153c1de-bf88-fa0d-52a5-e50ffcc4e8c8]] +EiffelBase, covered by the open-source [[IFELL|IFFEL license]] , is one of the principal contributions of Eiffel: a library of fundamental structures and algorithms covering the basics of computing, and resulting from a "Linnaean" effort at a general-purpose taxonomy of computing structures. EiffelBase is one of the most carefully designed and extensively used libraries in the object-oriented industry. + +The EiffelBase library includes: +* A [[EiffelBase, The Kernel|Kernel]] that defines the core classes of all Eiffel systems. +* A [[EiffelBase Data Structures Overview|Data Structures]] cluster including classes for all the major data structures (sets, lists, tables etc...) +* A [[EiffelBase Support Cluster|Support]] cluster that provide access to the environment, basic math operations and a few other helper classes. + + + + diff --git a/documentation/current/solutions/basic-computing/index.wiki b/documentation/current/solutions/basic-computing/index.wiki index 864c0283..50046ab6 100644 --- a/documentation/current/solutions/basic-computing/index.wiki +++ b/documentation/current/solutions/basic-computing/index.wiki @@ -3,8 +3,8 @@ [[Property:weight|-15]] [[Property:uuid|be2b9c40-f2ff-d6dc-738d-b240deb69407]] * EiffelBase -**EiffelBase Tutorial http://ise181.ise/book/documentation/eiffelbase +**[[EiffelBase|EiffelBase Tutorial]] **EiffelBase class reference -**EiffelBase samples http://ise181.ise/book/documentation/eiffelbase-samples +**[[EiffelBase Samples|EiffelBase samples]] diff --git a/documentation/current/solutions/concurrent-computing/eiffelthread/eiffelthread-tutorial/compilation-multithreaded-systems.wiki b/documentation/current/solutions/concurrent-computing/eiffelthread/eiffelthread-tutorial/compilation-multithreaded-systems.wiki index 227de9d1..7dbace23 100644 --- a/documentation/current/solutions/concurrent-computing/eiffelthread/eiffelthread-tutorial/compilation-multithreaded-systems.wiki +++ b/documentation/current/solutions/concurrent-computing/eiffelthread/eiffelthread-tutorial/compilation-multithreaded-systems.wiki @@ -1,5 +1,6 @@ [[Property:title|Compilation of multithreaded systems]] [[Property:weight|3]] +[[Property:uuid|24e474b5-3cb7-16ff-365f-73be8e73bd56]] ==Settings== * Set the option multithreaded in the project settings under Advanced. * Do not use a non-multi-threaded precompiled library. The corresponding multi-threaded libraries of base, WEL and Vision2 should be located in $ISE_EIFFEL/precomp/spec/$PLATFORM/ with the mt prefix. diff --git a/documentation/current/solutions/concurrent-computing/eiffelthread/eiffelthread-tutorial/multithread-faq.wiki b/documentation/current/solutions/concurrent-computing/eiffelthread/eiffelthread-tutorial/multithread-faq.wiki index 44e6d5aa..9c5f58ec 100644 --- a/documentation/current/solutions/concurrent-computing/eiffelthread/eiffelthread-tutorial/multithread-faq.wiki +++ b/documentation/current/solutions/concurrent-computing/eiffelthread/eiffelthread-tutorial/multithread-faq.wiki @@ -1,5 +1,6 @@ [[Property:title|Multithread FAQ]] [[Property:weight|6]] +[[Property:uuid|a0e1ddf6-cc19-b6f8-0e05-075908ddd347]] ===I've launched several threads and they do not seem to be executed:=== The thread that launched the several threads may be dead before its children. diff --git a/documentation/current/solutions/concurrent-computing/eiffelthread/eiffelthread-tutorial/thread-library-overview.wiki b/documentation/current/solutions/concurrent-computing/eiffelthread/eiffelthread-tutorial/thread-library-overview.wiki index eb8f67c5..273a0551 100644 --- a/documentation/current/solutions/concurrent-computing/eiffelthread/eiffelthread-tutorial/thread-library-overview.wiki +++ b/documentation/current/solutions/concurrent-computing/eiffelthread/eiffelthread-tutorial/thread-library-overview.wiki @@ -1,5 +1,6 @@ [[Property:title|Thread library overview]] [[Property:weight|1]] +[[Property:uuid|2bdeeb91-1917-f443-ebfc-4f877107edd7]] This is only a quick overview of the [[EiffelThread Library|Thread library]] . The reference of this library should give all its content. ==Creating and launching threads: the class THREAD (deferred)== @@ -40,7 +41,7 @@ To run the thread, use the feature launch from THREAD my_thread.launch On the Eiffel side, the procedure execute will be launched. This procedures deferred in class THREAD, you have to define it in MY_THREAD. On the C side, a C thread will be created and launched. -{{warning| '''Caution''': you may call join_all and the end of the execution of the parent thread if you do not want it to die before its child, otherwise they may prematurely terminate. +{{warning| '''Caution''': you may call join_all and the end of the execution of the parent thread if you do not want it to die before its child, otherwise they may prematurely terminate. }} ==The class MUTEX== The implementation of the class MUTEX is mapped on the C standard thread library. An instance of class MUTEX can be shared between different thread. diff --git a/documentation/current/solutions/concurrent-computing/eiffelthread/index.wiki b/documentation/current/solutions/concurrent-computing/eiffelthread/index.wiki index eaaa2e2c..86ba4456 100644 --- a/documentation/current/solutions/concurrent-computing/eiffelthread/index.wiki +++ b/documentation/current/solutions/concurrent-computing/eiffelthread/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelThread]] [[Property:weight|0]] +[[Property:uuid|d1e4c873-3e04-f49a-f6d2-6b9845f1e109]] The EiffelThread library includes the main components needed to build multithreaded systems.
See: * [[EiffelThread: Introduction|Introduction]] diff --git a/documentation/current/solutions/concurrent-computing/index.wiki b/documentation/current/solutions/concurrent-computing/index.wiki new file mode 100644 index 00000000..da78f160 --- /dev/null +++ b/documentation/current/solutions/concurrent-computing/index.wiki @@ -0,0 +1,8 @@ +[[Property:title|Multi-threading]] +[[Property:link_title|Concurrent computing]] +[[Property:weight|-10]] +[[Property:uuid|7c7a399a-076f-fd13-9b5f-f110c212e2e8]] +== Multi-threading == +* [[Threads|Threads tutorial]] +* EiffelThread class reference + diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/esql-sample.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/esql-sample.wiki index b09d2603..9e94e06f 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/esql-sample.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/esql-sample.wiki @@ -1,5 +1,6 @@ [[Property:title|Esql Sample]] [[Property:weight|0]] +[[Property:uuid|04d03117-fdb2-8b73-677f-9b1a0c333dc4]] This sample consists of a command line SQL parser. SQL statements are filtered through a monitor and sent to the RDBMS. ==Compiling== diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/index.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/index.wiki new file mode 100644 index 00000000..dec8004c --- /dev/null +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/index.wiki @@ -0,0 +1,13 @@ +[[Property:title|EiffelStore Samples]] +[[Property:weight|3]] +[[Property:uuid|65a0aab3-bc1d-28b8-a6f0-6d71b4c6d54d]] +=EiffelStore Samples= + +The following basic examples showcases the different EiffelStore capabilities: +* [[Esql Sample|esql]] : A command line SQL parser: very useful to test your Database connection! +* [[Selector Sample|select]] : A basic example to perform smart database queries. +* [[Inserter Sample|insert]] : A basic example to easily insert data in your database. + + + + diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/inserter-sample.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/inserter-sample.wiki index eefcfd2e..288270ab 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/inserter-sample.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/inserter-sample.wiki @@ -1,5 +1,6 @@ [[Property:title|Inserter Sample]] [[Property:weight|2]] +[[Property:uuid|fa0b8601-ca7a-b1cc-384d-f366be33ac40]] This sample lets the user insert a DB_BOOK object in your database using EiffelStore insertion facilities. ==Compiling== diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/selector-sample.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/selector-sample.wiki index cc086d24..591bd8c9 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/selector-sample.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-samples/selector-sample.wiki @@ -1,5 +1,6 @@ [[Property:title|Selector Sample]] [[Property:weight|1]] +[[Property:uuid|3d608710-5537-04e4-fa89-a608ee6864cd]] This sample creates a DB_BOOK table in your database, enters sample data in it and lets you select rows from this table with author's name. ==Compiling== diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-dataview-cluster.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-dataview-cluster.wiki index 375228f4..10ab2db9 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-dataview-cluster.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-dataview-cluster.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelStore DataView Cluster]] [[Property:weight|3]] +[[Property:uuid|75f8cc72-7ccf-28a4-f6b2-beeb2219dc43]] ==1. Introduction== DataView cluster helps the programmer creating a GUI for a RDBMS. It gives a basic solution for a RDBMS GUI and also enables the developer to customize his GUI from this basic interface. diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-generation-cluster/data-structures-creation.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-generation-cluster/data-structures-creation.wiki index 2c0ee4df..4201b4b4 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-generation-cluster/data-structures-creation.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-generation-cluster/data-structures-creation.wiki @@ -1,5 +1,6 @@ [[Property:title|Data structures creation]] [[Property:weight|1]] +[[Property:uuid|d8845cb9-2581-f85d-aad1-460816711356]] ==1. Overview== EiffelStore enables to create data structures mapped to your own database. This part describes how the EiffelStore wizard generates these structures mapped to your database and how you can map your own classes to your database with EiffelStore. diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-generation-cluster/data-structures-use.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-generation-cluster/data-structures-use.wiki index 5d706f72..23fc45bf 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-generation-cluster/data-structures-use.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-generation-cluster/data-structures-use.wiki @@ -1,5 +1,6 @@ [[Property:title|Data structures use]] [[Property:weight|0]] +[[Property:uuid|25885469-d6c8-5d1c-bbf8-c5fca5524d36]] ==1. Overview== EiffelStore affords a context that optimizes and facilitates the use of the classes that maps your database content. diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-generation-cluster/index.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-generation-cluster/index.wiki index d67d639c..7b667de9 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-generation-cluster/index.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-generation-cluster/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelStore Generation Cluster]] [[Property:weight|2]] +[[Property:uuid|f443ed73-14bb-9a3a-b7c7-35c2660e7784]] The EiffelStore library lets the user associate database elements with Eiffel objects. These database elements are basically database table rows, database view rows or more generally sets of database attribute values. The easiest way to manipulate database elements is to insert their content into Eiffel objects and to work on these Eiffel objects as database elements. A first solution to implement this is to use some adaptable structures that will fit to any database element. This is done in EiffelStore through the [[ref:libraries/store/reference/db_tuple_flatshort|DB_TUPLE]] class, which contains mainly an [[ref:libraries/base/reference/array_chart|ARRAY]] [[[ref:libraries/base/reference/string_8_chart|STRING]] ] containing element attribute names and an [[ref:libraries/base/reference/array_chart|ARRAY]] [[[ref:libraries/base/reference/any_chart|ANY]] ] containing element attribute values. This solution has one major drawback: any static checking is impossible: the developer cannot be sure at compile time of the nature of a [[ref:libraries/store/reference/db_tuple_flatshort|DB_TUPLE]] , i.e. what it represents, and cannot know if attributes number, names and types are correct. To overcome this problem, a second solution is to use data structures that statically fits to the expected database element, as introduced in the [[Data Object Coupling|DataObject Coupling]] section. diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-implementation-layer.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-implementation-layer.wiki index 937146dd..f9c5e013 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-implementation-layer.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-implementation-layer.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelStore Implementation Layer]] [[Property:weight|1]] +[[Property:uuid|80cd0938-6837-3c17-8515-b4ac60a51d09]] Each interface class has an implementation counterpart that implements specific DBMS handling. The class prefix indicates clearly its layer, for instance: * [[ref:/libraries/store/reference/db_selection_flatshort|DB_SELECTION]] is the interface to perform a database selection query. * [[ref:/libraries/store/reference/database_selection_flatshort|DATABASE_SELECTION]] [[[ref:/libraries/store/reference/database_flatshort|DATABASE]] ] is its implementation. diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/data-modification.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/data-modification.wiki index 923f1938..1cdb03d4 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/data-modification.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/data-modification.wiki @@ -1,5 +1,6 @@ [[Property:title|Data Modification]] [[Property:weight|1]] +[[Property:uuid|ef5568ff-dc7c-4c85-0174-335fdab1bd84]] Use the [[ref:/libraries/store/reference/db_change_flatshort|DB_CHANGE]] class to perform any operation on your database that does not require access to a result. You can for instance modify table row content, drop table rows, create and delete tables. {{note| '''Note''': Take a look at the [[Data Object Coupling|Data Storing]] capability if you want to '''insert''' table rows. }} diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/data-object-coupling.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/data-object-coupling.wiki index 4e678279..fe42f04e 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/data-object-coupling.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/data-object-coupling.wiki @@ -1,5 +1,6 @@ [[Property:title|Data Object Coupling]] [[Property:weight|4]] +[[Property:uuid|c51311cd-8782-0bc3-3ef7-000ea6eee37c]] A smart way to work with relational databases is to have Eiffel objects directly mapping relational tables. Three EiffelStore classes enable this coupling: * [[ref:/libraries/store/reference/db_repository_flatshort|DB_REPOSITORY]] objects [[#describe|describe a relational table]] and allow Eiffel to create objects mapping database tables. * [[ref:/libraries/store/reference/db_store_flatshort|DB_STORE]] works directly with [[ref:/libraries/store/reference/db_repository_flatshort|DB_REPOSITORY]] objects to [[#insert|insert data into relational tables]] . diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-connection.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-connection.wiki index afddf4a5..d432a37e 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-connection.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-connection.wiki @@ -1,5 +1,6 @@ [[Property:title|Database Connection]] [[Property:weight|0]] +[[Property:uuid|2cf2cb7c-e28d-5d06-b03e-e2b17c1f6879]] # To connect to your database, you have to create a '''handle''': this handle actually links the interface classes with corresponding implementation classes mapped to your DBMS. This handle is implemented by the DATABASE_APPL class: database_appl: DATABASE_APPL [ODBC] diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-control.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-control.wiki index 1b8414af..200e218e 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-control.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-control.wiki @@ -1,5 +1,6 @@ [[Property:title|Database control]] [[Property:weight|7]] +[[Property:uuid|432c6e51-36d5-b469-c924-eb821713256a]] Use the [[ref:/libraries/store/reference/db_control_flatshort|DB_CONTROL]] class to check or change database status and behavior. The main operations you are likely to use are: * [[#errors|Handling]] database errors. * [[#connection|Connecting]] to the database. diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-selection.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-selection.wiki index c85526f3..5e44eb12 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-selection.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-selection.wiki @@ -1,5 +1,6 @@ [[Property:title|Database Selection]] [[Property:weight|2]] +[[Property:uuid|de759a74-b3e1-c937-e620-67526c116925]] Use the [[ref:/libraries/store/reference/db_selection_flatshort|DB_SELECTION]] class to select data from the database. Once you have selected the data, you can [[Selection Access|access]] it with convenience using adaptative EiffelStore structures. {{note| '''Note''': Take a look at the [[Data Object Coupling|Database/Eiffel objects Coupling]] if you need information about your database structure. }} diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/index.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/index.wiki index 7a79d296..c13c4a01 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/index.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelStore Interface Layer]] [[Property:weight|0]] +[[Property:uuid|abd6c880-e0d8-0961-8cd2-d2ca43c1ce28]] The Interface layer gathers a set of classes covering all the capabilities an application need to interface efficiently with a DBMS. The interface affords these main capabilities: diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/query-variables.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/query-variables.wiki index 56528a69..2df11a5f 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/query-variables.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/query-variables.wiki @@ -1,5 +1,6 @@ [[Property:title|Query variables]] [[Property:weight|5]] +[[Property:uuid|37222a07-a8f8-e57d-45f0-3b28cd66d660]] If you have to execute database queries which only differ in the expression values, you can create a template query and then bind variables into this template for each execution. This mechanism can be applied for requests with a result ([[ref:/libraries/store/reference/db_selection_chart|DB_SELECTION]] ) or without ([[ref:/libraries/store/reference/db_change_chart|DB_CHANGE]] ). Hence both classes inherits from STRING_HDL that actually handle variable binding. diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/selection-access.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/selection-access.wiki index accd1e4d..083a8f91 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/selection-access.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/selection-access.wiki @@ -1,5 +1,6 @@ [[Property:title|Selection Access]] [[Property:weight|3]] +[[Property:uuid|3b4fdde3-d903-55c8-0068-cee2407db280]] Once you have [[Database Selection|selected data]] from the database, it returns a set of rows containing queried columns values. Each row loaded with DB_SELECTION is stored in a DB_RESULT object. The easiest way to access the data is thus to refer to DB_RESULT objects themselves. {{note| '''Note''': Take a look at the [[Data Object Coupling|Database/Eiffel objects Coupling]] to learn advanced data handling features. }} diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/stored-procedures.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/stored-procedures.wiki index 918e66e7..09c54eb0 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/stored-procedures.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/stored-procedures.wiki @@ -1,5 +1,6 @@ [[Property:title|Stored Procedures]] [[Property:weight|6]] +[[Property:uuid|9979af90-07c3-8b20-448e-04454a75c801]] When sending requests to the database, the request is first parsed then executed. Instead of parsing many times the same requests, i.e. with only changes in expression values, most of RDBMS enable to '''precompile''' requests. These requests can then be executed as routines and are identified by a name and a signature. EiffelStore lets you use stored procedures with [[ref:/libraries/store/reference/db_proc_flatshort|DB_PROC]] class to: diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/index.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/index.wiki index 4ea6eddf..3d4be796 100644 --- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/index.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelStore Content]] [[Property:link_title|EiffelStore Tutorial]] [[Property:weight|1]] +[[Property:uuid|542caa33-5dc1-d2ea-414b-b1739045edd9]] EiffelStore main classes are grouped into 2 main layers: * The [[EiffelStore Interface Layer|interface layer]] provides a high-level, unique interface for every DBMS. * The [[EiffelStore Implementation Layer|implementation layer]] customizes high-level routines to various DBMS handles. diff --git a/documentation/current/solutions/database-access/eiffelstore/index.wiki b/documentation/current/solutions/database-access/eiffelstore/index.wiki index 10fae3c5..f48fccc1 100644 --- a/documentation/current/solutions/database-access/eiffelstore/index.wiki +++ b/documentation/current/solutions/database-access/eiffelstore/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelStore Library]] [[Property:link_title|EiffelStore]] [[Property:weight|1]] +[[Property:uuid|f43ab3e6-4551-632a-384b-4964d1436730]] Type: Library
Platform: Any
diff --git a/documentation/current/solutions/database-access/index.wiki b/documentation/current/solutions/database-access/index.wiki index 2c1ae19d..52f72e5a 100644 --- a/documentation/current/solutions/database-access/index.wiki +++ b/documentation/current/solutions/database-access/index.wiki @@ -2,9 +2,9 @@ [[Property:weight|-8]] [[Property:uuid|f5d26942-de52-76cc-0f41-66b959a78999]] == Database access == -* EiffelStore http://ise181.ise/book/documentation/eiffelstore-library -** EiffelStore introduction http://ise181.ise/book/documentation/eiffelstore-introduction -** EiffelStore tutorial http://ise181.ise/book/documentation/eiffelstore-content +* [[EiffelStore Library|EiffelStore]] +** [[EiffelStore introduction|EiffelStore introduction]] +** [[EiffelStore Content|EiffelStore tutorial]] ** EiffelStore class reference -** EiffelStore samples http://ise181.ise/book/documentation/eiffelstore-samples +** [[EiffelStore Samples|EiffelStore samples]] diff --git a/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/absolute-time.wiki b/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/absolute-time.wiki index 0a67f1db..509079cb 100644 --- a/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/absolute-time.wiki +++ b/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/absolute-time.wiki @@ -1,5 +1,6 @@ [[Property:title|Absolute time]] [[Property:weight|0]] +[[Property:uuid|195849fc-1a9c-d734-2d2b-acae78133886]] The classes dealing with date and those dealing with time have almost the same construction. At the top of the hierarchy are the constants and the notion of value ([[ref:libraries/time/reference/time_value_chart|TIME_VALUE]] , [[ref:libraries/time/reference/date_value_chart|DATE_VALUE]] , [[ref:libraries/time/reference/date_time_value_chart|DATE_TIME_VALUE]] ). From this notion come two kinds of heirs which are the absolute notion of time (classes [[ref:libraries/time/reference/date_chart|DATE]] , [[ref:libraries/time/reference/time_chart|TIME]] and [[ref:libraries/time/reference/date_time_chart|DATE_TIME]] ) and the notion of duration (classes [[ref:libraries/time/reference/date_duration_chart|DATE_DURATION]] , [[ref:libraries/time/reference/time_duration_chart|TIME_DURATION]] , [[ref:libraries/time/reference/date_time_duration_chart|DATE_TIME_DURATION]] ). [[ref:libraries/time/reference/date_chart|DATE]] , [[ref:libraries/time/reference/time_chart|TIME]] and [[ref:libraries/time/reference/date_time_chart|DATE_TIME]] inherit from the deferred class ABSOLUTE. It implies that instances of these classes are used as absolutes. We can imagine an oriented axis on which are reported values. ABSOLUTE inherits COMPARABLE, there is a complete order inside the class and its heir. ABSOLUTE is a client of DURATION, so that each instance of ABSOLUTE is linked with the duration between the origin and itself. diff --git a/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/date-time-string-conversion.wiki b/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/date-time-string-conversion.wiki index ffa57075..c4b956af 100644 --- a/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/date-time-string-conversion.wiki +++ b/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/date-time-string-conversion.wiki @@ -1,5 +1,6 @@ [[Property:title|DATE / TIME to STRING Conversion]] [[Property:weight|3]] +[[Property:uuid|88972ba4-694b-8558-b0c8-87b1fc40afc4]] The following table lists format conversion codes. {| |- diff --git a/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/duration.wiki b/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/duration.wiki index b93041c9..fd24cf50 100644 --- a/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/duration.wiki +++ b/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/duration.wiki @@ -1,5 +1,6 @@ [[Property:title|Duration]] [[Property:weight|1]] +[[Property:uuid|64672bd0-b696-0c39-1e30-5ac64aae4a99]] TIME_DURATION, DATE_DURATION AND DATE_TIME_DURATION The classes dealing with duration inherit DURATION, which inherits GROUP_ELEMENT and PART_COMPARABLE. An instance of TIME_DURATION, DATE_DURATION or DATE_TIME_DURATION is an element of a group, i.e. there is a zero and addition operations (infix +,infix -, prefix + and prefix -). Duration is used as an amount of time, without link to an origin. It may be added to the respective absolute notion (time + time_duration is possible, not time + date_time_duration nor date_time + time_duration...see classes TIME, DATE and DATE_TIME). diff --git a/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/index.wiki b/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/index.wiki new file mode 100644 index 00000000..bcd3ac23 --- /dev/null +++ b/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/index.wiki @@ -0,0 +1,9 @@ +[[Property:title|EiffelTime]] +[[Property:link_title|EiffelTime Tutorial]] +[[Property:weight|0]] +[[Property:uuid|2c1bfedd-d515-cd6b-bd22-b06326fc98d8]] +The library EiffelTime is built on three notions of time. The absolute notion (for example, what time is it? 3:45 p.m.) is used for events. It may be useful also to deal with an interval between two events (the meeting is between 3:45 p.m. and 6:00 p.m.). Finally EiffelTime has the notion of duration, which is the length of an interval (the meeting will take 2:15). The notion of absolute is linked with duration by the use of an origin. + + + + diff --git a/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/interval.wiki b/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/interval.wiki index 10b71efa..db17ef4a 100644 --- a/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/interval.wiki +++ b/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/interval.wiki @@ -1,5 +1,6 @@ [[Property:title|Interval]] [[Property:weight|2]] +[[Property:uuid|d33d0216-fa71-60dc-f3b0-61ff42d621e6]] Class INTERVAL deals with intervals between two instances of the same class which conform to ABSOLUTE ( DATE, TIME, DATE_TIME). The notions of interval is directly linked with the notion of order. The start_bound must be before the end_bound. diff --git a/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/more-precision.wiki b/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/more-precision.wiki index 68402fc1..64e44d42 100644 --- a/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/more-precision.wiki +++ b/documentation/current/solutions/dates-and-times/eiffeltime/eiffeltime-tutorial/more-precision.wiki @@ -1,5 +1,6 @@ [[Property:title|More precision]] [[Property:weight|4]] +[[Property:uuid|fadf5bc2-bb72-f681-b9c4-bab7f0633209]] TIME and TIME_DURATION are designed to deal with high precision in time. The only limit is the one from number representation. The classes TIME and TIME_DURATION have an attribute fine_second (inherited from TIME_VALUE) which allows high precision. This attribute represents the number of seconds with fractions (it is an instance of DOUBLE). From this attribute are calculated second and fractional_second (which are functions): second is the truncated-to-integer part and fractional_second is the difference between the two previous one, so that the sum of second and fractional_second is always equal to fine_second (see invariant in TIME_VALUE). diff --git a/documentation/current/solutions/dates-and-times/eiffeltime/index.wiki b/documentation/current/solutions/dates-and-times/eiffeltime/index.wiki index 2ee94db1..9b9f0a4e 100644 --- a/documentation/current/solutions/dates-and-times/eiffeltime/index.wiki +++ b/documentation/current/solutions/dates-and-times/eiffeltime/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelTime Library]] [[Property:link_title|EiffelTime]] [[Property:weight|9]] +[[Property:uuid|3d96626f-11f3-67a2-dec6-69f7faf4a8d6]] Type: Library
Platform: Any
diff --git a/documentation/current/solutions/dates-and-times/index.wiki b/documentation/current/solutions/dates-and-times/index.wiki index 73bac0f1..4963cfd0 100644 --- a/documentation/current/solutions/dates-and-times/index.wiki +++ b/documentation/current/solutions/dates-and-times/index.wiki @@ -2,8 +2,8 @@ [[Property:link_title|Dates and times]] [[Property:weight|-13]] [[Property:uuid|082fd8e1-b531-6cf1-3409-9cd9bc6483ad]] -* Date and time manipulation -** EiffelTime -*** EiffelTime tutorial http://ise181.ise/book/documentation/eiffeltime -*** EiffelTime class reference +== Date and time manipulation == +* [[EiffelTime Library|EiffelTime]] +** [[EiffelTime|EiffelTime tutorial]] +** EiffelTime class reference diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/create-object.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/create-object.wiki index 6b80de5b..0e09520f 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/create-object.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/create-object.wiki @@ -1,5 +1,6 @@ [[Property:title|Create an object]] [[Property:weight|1]] +[[Property:uuid|b2ef8e81-a045-dce2-725f-c8db5ab1b6db]] An EiffelBuild [[EiffelBuild Notation|object]] is a representation of a Vision2 component and its properties. To create a new instance of an object, [[EiffelBuild Notation|pick]] a type from the [[Type selector|type selector]] and [[EiffelBuild Notation|drop]] onto an existing [[EiffelBuild Notation|object]] (Accessible from the [[Layout constructor|layout constructor]] or [[Builder window|builder window]] ). You will only be able to complete the [[EiffelBuild Notation|drop]] if the targeted [[EiffelBuild Notation|object]] will accept a new object of the transported type. diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/delete-object.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/delete-object.wiki index dfc9f575..aaf8366a 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/delete-object.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/delete-object.wiki @@ -1,5 +1,6 @@ [[Property:title|Delete an object]] [[Property:weight|2]] +[[Property:uuid|87dbc23d-4f9c-bd2a-8451-30031b494d37]] To remove an [[EiffelBuild Notation|object]] from your EiffelBuild system, [[EiffelBuild Notation|pick]] the object you wish to delete, and [[EiffelBuild Notation|drop]] it on [[Image:icon-delete-small-color]] in the [[Main toolbar|main toolbar]] . You may also delete via the keyboard by pressing the delete key while the tool containing the objects representation has the focus. Whichever [[EiffelBuild Notation|object]] has the selection is deleted. diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/eiffelbuild-starting-project/eiffelbuild-creating-new-project.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/eiffelbuild-starting-project/eiffelbuild-creating-new-project.wiki index 3aa9a26d..02e919d7 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/eiffelbuild-starting-project/eiffelbuild-creating-new-project.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/eiffelbuild-starting-project/eiffelbuild-creating-new-project.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild: Creating a new project]] [[Property:weight|0]] +[[Property:uuid|8668676c-a189-5512-319e-34d70d4039e3]] When a project is not open in Build, there are only two menu options available. 'File' and 'Help'. To create a new project, select 'file', 'New project' as illustrated below: [[Image:new-project]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/eiffelbuild-starting-project/index.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/eiffelbuild-starting-project/index.wiki index cd449235..cde13423 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/eiffelbuild-starting-project/index.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/eiffelbuild-starting-project/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild: Starting a project]] [[Property:weight|0]] +[[Property:uuid|803e2034-dec3-340c-e68e-fdbaefac8a5a]] * [[EiffelBuild: Creating a new project|Creating a new project]] * [[Retrieving a project from a Build project file|Retrieving a project from a Build project file]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/eiffelbuild-starting-project/retrieving-project-build-project-file.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/eiffelbuild-starting-project/retrieving-project-build-project-file.wiki index f949bb1c..004036a5 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/eiffelbuild-starting-project/retrieving-project-build-project-file.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/eiffelbuild-starting-project/retrieving-project-build-project-file.wiki @@ -1,5 +1,6 @@ [[Property:title|Retrieving a project from a Build project file]] [[Property:weight|1]] +[[Property:uuid|556cfd8a-f4df-9778-cbb1-eb4a9d795f01]] When a project is not open in Build, there are only two menus available, 'File' and 'Help'. To retrieve an existing project, select 'file', 'Open Project [[Image:open-project]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/import-project.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/import-project.wiki index a185903f..4dec57ae 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/import-project.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/import-project.wiki @@ -1,5 +1,6 @@ [[Property:title|Import a project]] [[Property:weight|5]] +[[Property:uuid|ad0b96e1-ca74-5344-44f1-e066205fb76d]] The contents of an existing project may be imported into the currently open project, permitting re-use of existing structures. All versions of EiffelBuild before 5.4 limited each project to a single titled window, with 5.4 removing this limitation. The ability to import multiple EiffelBuild projects into a single project is useful for maintaining larger systems with many windows. To import the contents of an existing project, select 'Import Project' from the 'File' menu as illustrated below: diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/index.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/index.wiki index 5be6dcdd..be55f673 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/index.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild How To's]] [[Property:weight|0]] +[[Property:uuid|1df547c8-ca5b-f014-5b4f-a39ecefaa746]] * [[EiffelBuild: Starting a project|Starting a project]] * [[Create an object|Create an object]] * [[Delete an object|Delete an object]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/reparent-object.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/reparent-object.wiki index 457d95a7..f9cc0480 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/reparent-object.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/reparent-object.wiki @@ -1,5 +1,6 @@ [[Property:title|Reparent an Object]] [[Property:weight|4]] +[[Property:uuid|bf920606-6a40-83fc-5069-034d32f8cd7a]] To reparent an [[EiffelBuild Notation|object]] , you need to [[EiffelBuild Notation|pick]] the [[EiffelBuild Notation|object]] and [[EiffelBuild Notation|drop]] it on the [[EiffelBuild Notation|object]] you wish it to be parented in. The [[EiffelBuild Notation|object]] will be removed from its current parent, and inserted in the new parent at the next available position. When an [[EiffelBuild Notation|object]] is inserted into a parent, it is always added at the next available position. If you wish to place an [[EiffelBuild Notation|object]] at a particular position within a parent, you must hold down the '''Shift''' key, and drop on an [[EiffelBuild Notation|object]] already contained in parent, Your [[EiffelBuild Notation|object]] will then be inserted in the parent, in the position preceding the child [[EiffelBuild Notation|object]] that you dropped on. diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/save-project.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/save-project.wiki index 86d5f209..b9f520b3 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/save-project.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-how-tos/save-project.wiki @@ -1,5 +1,6 @@ [[Property:title|Save a project]] [[Property:weight|3]] +[[Property:uuid|f2c46797-34c5-5de7-fcad-3447c3db61f5]] To save the project that is currently open, select '''Save''' from the '''File''' menu or click on [[Image:icon-save-color]] in the [[Main toolbar|main toolbar]] . Alternatively, you may use the keyboard shortcut - '''Ctrl+S''' diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/builder-window.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/builder-window.wiki index 146f0ec3..e5e509a0 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/builder-window.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/builder-window.wiki @@ -1,5 +1,6 @@ [[Property:title|Builder window]] [[Property:weight|7]] +[[Property:uuid|e82ca336-cab6-bc60-6ddc-b359a7c86811]] The Builder window provides a view of the [[EiffelBuild Notation|objects]] in your system, in which the [[EiffelBuild Notation|objects]] may be manipulated. This window may either be shown or hidden (default). To change between these two states, click [[Image:icon-builder-window-color]] on the [[Main toolbar| main toolbar]] , or select '''Show/Hide builder window''' from the '''View''' menu. diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/component-selector.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/component-selector.wiki index 29727ed2..4d46a4b5 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/component-selector.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/component-selector.wiki @@ -1,5 +1,6 @@ [[Property:title|Component selector]] [[Property:weight|8]] +[[Property:uuid|c70ce7e5-e720-ca96-8f1f-5024e9d6dabe]] The component selector allows you to build and retrieve user defined [[EiffelBuild Notation|components]] for use in your project. [[Image:component-selector]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/component-viewer.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/component-viewer.wiki index 06fbfed4..aaad1e5f 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/component-viewer.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/component-viewer.wiki @@ -1,5 +1,6 @@ [[Property:title|Component viewer]] [[Property:weight|10]] +[[Property:uuid|51a8cb3e-7486-7ab4-b608-95acfedd32f7]] The Component viewer allows you to view the structure of a [[EiffelBuild Notation|component]] without having to create new [[EiffelBuild Notation|objects]] from the [[EiffelBuild Notation|component]] . This tool is displayed in a separate window, and may either be shown or hidden (default). To change between these two states, click [[Image:icon-component-viewer-color]] on the [[Main toolbar| main toolbar]] , or select '''Show/Hide component viewer''' from the '''View''' menu. diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/constants.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/constants.wiki index a0ac37ec..1e17d9b6 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/constants.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/constants.wiki @@ -1,5 +1,6 @@ [[Property:title|Constants]] [[Property:weight|12]] +[[Property:uuid|f658bc39-da5f-1f12-ccf6-16b9c08732c2]] EiffelBuild supports the use of constants, permitting you to define a particular value and use it comprehensively throughout your system. If a constant is in use, any changes are reflected immediately in all clients, providing a quick way of globally changing object properties. The Eiffel code generated by EiffelBuild, generates all constants as actual Eiffel constants for use in your system. The following constant types are supported by EiffelBuild: diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/display-window.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/display-window.wiki index e5370bfb..fc94cd5d 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/display-window.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/display-window.wiki @@ -1,5 +1,6 @@ [[Property:title|Display window]] [[Property:weight|6]] +[[Property:uuid|baed48d9-3a5a-c1a3-be32-dae7cab6071b]] The Display window provides a view of the [[EiffelBuild Notation|objects]] in your system, but unlike the [[Layout constructor|layout constructor]] and [[Builder window|builder window]] , the objects cannot be manipulated. This window may either be shown or hidden (default). To change between these two states, click [[Image:icon-display-window-color]] on the [[Main toolbar|main toolbar]] , or select '''Show/Hide display window''' from the '''View''' menu. diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-code-generation.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-code-generation.wiki index d9417049..6af4f64a 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-code-generation.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-code-generation.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild: Code Generation]] [[Property:weight|15]] +[[Property:uuid|536487f0-f681-3812-87cf-3580c51ef8dd]] To generate Eiffel code representing your system, select '''Generate code''' from the '''Project''' menu or click [[Image:icon-code-generation-color]] on the [[Main toolbar|main toolbar]] . The length of time taken to generate your code is dependent on the speed of the system you are running, and the size of your interface, but typically takes a couple of seconds. A progress bar is displayed during the generation of your system. diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/docking.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/docking.wiki index 31ebf96c..3918c969 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/docking.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/docking.wiki @@ -1,5 +1,6 @@ [[Property:title|Docking]] [[Property:weight|3]] +[[Property:uuid|1434e995-4445-cbce-187c-cd7e078197e9]] The docking mechanism permits customization of the EiffelBuild interface through the re-ordering of tools to suit your preferences. You may simply "drag" one of the supported tools to a new location as desired. The [[Type selector|Type Selector]] , [[Component selector|Component Selector]] and [[Widget selector|Widget Selector]] all support docking. ==Performing a dock== diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/eiffelbuild-key-shortcuts.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/eiffelbuild-key-shortcuts.wiki index 46a44cee..fa137a8f 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/eiffelbuild-key-shortcuts.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/eiffelbuild-key-shortcuts.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild: Key shortcuts]] [[Property:weight|2]] +[[Property:uuid|ac57a648-456c-e423-e141-2f1f0eff95cb]] Many operations in EiffelBuild do not require the use of the mouse. The same effect can be achieved through the keyboard only. This page gathers all the keyboard shortcuts available in the environment. diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/eiffelbuild-window-overview.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/eiffelbuild-window-overview.wiki index 02af6a90..5db773cf 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/eiffelbuild-window-overview.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/eiffelbuild-window-overview.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild window overview]] [[Property:weight|0]] +[[Property:uuid|7a64cd29-c65d-88e9-4eb2-4123825e4a86]] ==Window layout== The use of EiffelBuild is based around one main window which remains throughout the execution. The appearance of the main window is as follows: diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/index.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/index.wiki index cf765b3b..57c5154d 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/index.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild: General interface description]] [[Property:weight|2]] +[[Property:uuid|e16b365e-469e-e2ab-e955-7f4e81630fe3]] * [[EiffelBuild window overview|EiffelBuild window overview]] * [[Main toolbar|Main toolbars]] * [[EiffelBuild: Key shortcuts|Key shortcuts]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/main-toolbar.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/main-toolbar.wiki index 5cba9959..bd097de2 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/main-toolbar.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-general-interface-description/main-toolbar.wiki @@ -1,5 +1,6 @@ [[Property:title|Main toolbar]] [[Property:weight|1]] +[[Property:uuid|66eef528-98c1-f238-9e67-694245941aca]] At the top of the EiffelBuild development window, one toolbar is displayed by default, as shown below: [[Image:toolbar]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-notation.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-notation.wiki index fd11c24a..4209777b 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-notation.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-notation.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild Notation]] [[Property:weight|1]] +[[Property:uuid|82803f2a-4089-a426-29b8-1799b2a9c1a5]] This page contains descriptions of terms found within the EiffelBuild documentation. ==Object== diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-preferences.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-preferences.wiki index 7d8d7d0d..3c46e202 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-preferences.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-preferences.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild Preferences]] [[Property:weight|14]] +[[Property:uuid|6255b3d8-392a-7cae-4c15-90515664a9b6]] The EiffelBuild preferences are used to handle all user defined preferences. For example, each time a dialog is displayed with a "do not show again" option, your chosen setting is recorded in the preferences. Various properties of the EiffelBuild interface are recorded by the preferences, on a user by user basis, permitting you to adapt the behavior of EiffelBuild to suit your needs. During use of EiffelBuild, many settings and options that you select, will modify the preferences, ensuring the desired behavior is maintained. To access all of the available EiffelBuild preferences, you may use the Preferences dialog, accessible from the "View", "Preferences", "Preferences..." menu option. The preference dialog has the following appearance: diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-project-settings-window/build-tab.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-project-settings-window/build-tab.wiki index 56cee8cf..d5c43bd1 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-project-settings-window/build-tab.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-project-settings-window/build-tab.wiki @@ -1,5 +1,6 @@ [[Property:title|Build Tab]] [[Property:weight|0]] +[[Property:uuid|ca866291-46b8-6b7f-2492-37c228d53a8f]] This tab contains information about the type of project you wish to build, and associated information. Here is the appearance of the Build tab when 'build type' is selected as 'Project': diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-project-settings-window/generation-tab.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-project-settings-window/generation-tab.wiki index ef51c19d..1631b876 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-project-settings-window/generation-tab.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-project-settings-window/generation-tab.wiki @@ -1,5 +1,6 @@ [[Property:title|Generation Tab]] [[Property:weight|1]] +[[Property:uuid|a332d8b6-3156-086b-0c71-a92b1725322d]] This tab contains information about the available code generation options. Here is the appearance of the Generation tab with default settings for a Build project: diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-project-settings-window/index.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-project-settings-window/index.wiki index 7cb403bf..3839cd5a 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-project-settings-window/index.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/eiffelbuild-project-settings-window/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild: Project settings window]] [[Property:weight|13]] +[[Property:uuid|7844e875-28d8-8710-385c-c62d1be6a9e0]] This is where global settings regarding your project are going to be made. In here you can specify: * The type of project you wish to generate * The system name diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/history.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/history.wiki index 6e90fdb6..e76c55b2 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/history.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/history.wiki @@ -1,5 +1,6 @@ [[Property:title|History]] [[Property:weight|11]] +[[Property:uuid|5bc08c08-be0d-bebd-dcfe-ec20b40c1e26]] EiffelBuild has an limitless undo/redo mechanism built in. However, this mechanism only applies to the structure of the [[EiffelBuild Notation|objects]] you are developing in your project. For example, every time you [[Create an object|create]] , [[Reparent an Object| reparent]] or [[Delete an object|delete]] an [[EiffelBuild Notation|object]] in your project, this is recorded in the history. If you modify properties of an [[EiffelBuild Notation|object]] (Using an [[Object editor|object editor]] ), these modifications are not recorded in the history. diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/index.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/index.wiki index 8fe328fb..4ea18a98 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/index.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild Reference]] [[Property:weight|1]] +[[Property:uuid|15b53149-5a31-9a1a-e9ad-739174678064]] * [[EiffelBuild Introduction|EiffelBuild Introduction]] * [[EiffelBuild Notation|EiffelBuild Notation]] * [[EiffelBuild: General interface description|General interface description]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/layout-constructor.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/layout-constructor.wiki index 2c86c821..fdb75248 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/layout-constructor.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/layout-constructor.wiki @@ -1,5 +1,6 @@ [[Property:title|Layout constructor]] [[Property:weight|3]] +[[Property:uuid|eb93c9bf-53b3-6718-5c30-d17133633c6f]] The layout constructor provides a view of the [[EiffelBuild Notation|objects]] you have defined in your system, in which the [[EiffelBuild Notation|objects]] may be manipulated. The root node of the tree is the object currently selected within the [[Widget selector|widget selector]] and objects may be added/moved within the displayed widget structure by picking and dropping the objects as required. For example, in the screenshot below, you could add another list to the vertical box, by picking a list from the [[Type selector|type selector]] and dropping it on the vertical box object. [[Image:layout-constructor]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/index.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/index.wiki index a1ee6b3c..46ca6059 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/index.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/index.wiki @@ -1,5 +1,6 @@ [[Property:title|Object editor]] [[Property:weight|5]] +[[Property:uuid|f00025e2-f39b-d0a2-9b2b-207768771905]] An object editor is a tool which allows you to edit the properties of a selected [[EiffelBuild Notation|object]] . Common properties include minimum width and height, color, text etc. An object editor can only reference one [[EiffelBuild Notation|object]] at once, and when not empty, it is considered to be "targeted" to the [[EiffelBuild Notation|object]] whose properties it references. diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/merging-radio-button-groups.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/merging-radio-button-groups.wiki index f29b679b..08ee061a 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/merging-radio-button-groups.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/merging-radio-button-groups.wiki @@ -1,5 +1,6 @@ [[Property:title|Merging radio button groups]] [[Property:weight|0]] +[[Property:uuid|069fa6c5-ed77-9cd3-f565-d41d43c406fe]] If the current [[Object editor|object editor]] contains an EV_CONTAINER [[EiffelBuild Notation|object]] , then the following control will be available: [[Image:empty-radio-merge]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/positioning-fixed-children.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/positioning-fixed-children.wiki index 2657f438..4b3b7174 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/positioning-fixed-children.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/positioning-fixed-children.wiki @@ -1,5 +1,6 @@ [[Property:title|Positioning fixed children]] [[Property:weight|2]] +[[Property:uuid|2c465f1b-99d6-7689-67ff-e9b45145a0c0]] If the current [[EiffelBuild Notation|object]] in the object editor is of type EV_FIXED, a button marked "position children..." will be contained in the object editor. Click this button, to display the following window: [[Image:fixed-child-positioner]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/positioning-table-children.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/positioning-table-children.wiki index 4583b42e..b95e1aba 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/positioning-table-children.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/object-editor/positioning-table-children.wiki @@ -1,5 +1,6 @@ [[Property:title|Positioning table children]] [[Property:weight|1]] +[[Property:uuid|7e302887-c3fd-1f30-866e-545aba53454e]] If the current [[EiffelBuild Notation|object]] in the object editor is of type EV_TABLE, a button marked "position children..." is contained in the object editor. Click this button, to display the following window: [[Image:table-child-positioner]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/type-selector.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/type-selector.wiki index ec24ccac..23cac0a2 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/type-selector.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/type-selector.wiki @@ -1,5 +1,6 @@ [[Property:title|Type selector]] [[Property:weight|4]] +[[Property:uuid|893343c2-417f-90c5-147e-941bc232fe43]] The type selector contains all the available Vision2 types supported by EiffelBuild. These are the basic building blocks for your system. [[Image:type-selector]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/widget-selector.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/widget-selector.wiki index bfdc6ebc..0871159b 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/widget-selector.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-reference/widget-selector.wiki @@ -1,5 +1,6 @@ [[Property:title|Widget selector]] [[Property:weight|9]] +[[Property:uuid|0626dd3a-28f2-ade6-8e6a-f992c2198fd6]] The Widget Selector allows you to manage windows, dialogs and "top level" objects within the EiffelBuild project, with all windows accessible through this tool. Using the widget selector, you may add new windows to your project; delete windows; assign a root window (launched from the generated application); and group windows into directories. All objects contained in the Widget Selector are generated as individual classes at generation time. The Widget Selector has the following appearance: [[Image:window-selector]] diff --git a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-version-history.wiki b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-version-history.wiki index 34748cff..60de9bf1 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-version-history.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/eiffelbuild-version-history.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild Version History]] [[Property:weight|2]] +[[Property:uuid|8cc0540e-8ee7-c005-0534-a2ed62f41c96]] ==6.2 Release== No changes. diff --git a/documentation/current/solutions/gui-building/eiffelbuild/index.wiki b/documentation/current/solutions/gui-building/eiffelbuild/index.wiki index 34239d28..d4ba11a2 100644 --- a/documentation/current/solutions/gui-building/eiffelbuild/index.wiki +++ b/documentation/current/solutions/gui-building/eiffelbuild/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelBuild]] [[Property:weight|0]] +[[Property:uuid|2af28db0-bc8f-daa6-daf2-18b08a11b606]] Type: Tool
Platform: Any
Version: 5.4
diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/accelerator-sample.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/accelerator-sample.wiki index 314135ba..47ef3581 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/accelerator-sample.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/accelerator-sample.wiki @@ -1,5 +1,6 @@ [[Property:title|Accelerator Sample]] [[Property:weight|0]] +[[Property:uuid|e3a8eac2-94c6-287a-314b-b4d056f9c1ad]] [[Image:accelerator|accelerator]]

diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/cursor-sample.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/cursor-sample.wiki index 2618c282..2c9aa04a 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/cursor-sample.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/cursor-sample.wiki @@ -1,5 +1,6 @@ [[Property:title|Cursor Sample]] [[Property:weight|1]] +[[Property:uuid|8a00cb23-d093-1b2f-9caf-213e570f96a9]] [[Image:cursor-test|cursor_test]]

diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/gauges-sample.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/gauges-sample.wiki index 5d077bb3..5c3a37a5 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/gauges-sample.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/gauges-sample.wiki @@ -1,5 +1,6 @@ [[Property:title|Gauges Sample]] [[Property:weight|2]] +[[Property:uuid|91aa8c8b-7cc9-06c1-a6f0-96844ff078d5]] [[Image:gauges|gauges]]

diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/index.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/index.wiki index 11691ca7..5be6a971 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/index.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelVision 2 Samples]] [[Property:weight|3]] +[[Property:uuid|79c05bf8-367e-001d-0c13-f668e34fa5b0]] Vision2 ships with a number of samples provided to demonstrate different aspects of the library. If you are a new vision2 user then it is suggested that you first compile and run the [[Widgets Sample|Widgets]] sample. This will demonstrate both the appearance and behavior of the available widgets. The other samples provided are listed below: diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/standard-dialogs-sample.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/standard-dialogs-sample.wiki index 160a2dbe..ea52a226 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/standard-dialogs-sample.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/standard-dialogs-sample.wiki @@ -1,5 +1,6 @@ [[Property:title|Standard_dialogs Sample]] [[Property:weight|3]] +[[Property:uuid|31d0608e-0136-b3db-0745-9e8697dcc60d]] [[Image:standard-dialogs|Standard_dialogs]]

diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/viewport-sample.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/viewport-sample.wiki index 7ae9fb53..85cfa415 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/viewport-sample.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/viewport-sample.wiki @@ -1,5 +1,6 @@ [[Property:title|Viewport Sample]] [[Property:weight|4]] +[[Property:uuid|e8722685-0343-c411-83b1-32f0c4e0175b]] [[Image:viewport|viewport]]

diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/widgets-sample.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/widgets-sample.wiki index 5bdc6ba0..87608603 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/widgets-sample.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-2-samples/widgets-sample.wiki @@ -1,5 +1,6 @@ [[Property:title|Widgets Sample]] [[Property:weight|-1]] +[[Property:uuid|04aa62bd-ef9c-152c-5c69-4fe7e750649f]] [[Image:widgets|widgets]]

diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-introduction.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-introduction.wiki index 7472e26a..1d11a47b 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-introduction.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-introduction.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelVision Introduction]] [[Property:weight|0]] +[[Property:uuid|f964651a-e36d-4e9e-00ea-37803a26373a]] The EiffelVision library offers an object-oriented framework for graphical user interface (GUI) development. Using EiffelVision, developers can access all necessary GUI components, called [[Widgets|widgets]] (buttons, windows, list views) as well as truly graphical elements such as points, lines, arcs, polygons and the like -- to develop a modern, functional and good-looking graphical interactive application. EiffelVision has played a major role at Eiffel Software and provided numerous Eiffel projects with a powerful, portable graphics development platform. EiffelStudio is totally reliant on EiffelVision for its graphical elements and overall interaction with the user. diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/events.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/events.wiki index a7bfc4fe..3c0458d4 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/events.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/events.wiki @@ -1,5 +1,6 @@ [[Property:title|Events]] [[Property:weight|4]] +[[Property:uuid|fc32d1b5-72d6-2955-18fd-bce988ed8323]] This cluster contains classes for event handling within Vision2. ==What is an event?== diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/figures.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/figures.wiki index 9c94dd5e..92475fd9 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/figures.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/figures.wiki @@ -1,5 +1,6 @@ [[Property:title|Figures]] [[Property:weight|7]] +[[Property:uuid|c12fee6e-5e99-ae59-8ac5-f57abb4c1878]] The EiffelVision figure cluster can be considered a high-level way of drawing on an [[ref:libraries/vision2/reference/ev_drawable_chart|EV_DRAWABLE]] descendant. Here are some advantages: * The model is separated from the representation by using projectors that take a world of figures and project it to any device, not just a drawing area. * Instead of drawing with static API's like draw_line, real figure objects are used that can move, change color or morph. diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/index.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/index.wiki index f7074fd0..9aac2431 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/index.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelVision Interface Content]] [[Property:link_title|EiffelVision Library Reference Manual]] [[Property:weight|1]] +[[Property:uuid|b343b38b-c8b2-4247-072d-ecc1bc3e387a]] EiffelVision 2 is a platform independent Graphical User Interface (GUI) library that allows easy, simultaneous development of Windowed applications for both Windows & Unix based platforms. Heavily relying on EiffelBase library, EiffelVision 2 has been designed primarily with ease of use in mind. By reusing EiffelBase structures, existing, as well as new Eiffel users will find EiffelVision to be surprising intuitive and easy to use. In no time, users will be producing good-looking Windowed application skeletons, of which will run on a multitude of platforms with no manipulation of code. The EiffelVision 2 library includes the following interface clusters: * A [[Kernel| kernel]] cluster that includes classes that are key to a Vision2 application. The main class being [[ref:libraries/vision2/reference/ev_application_chart| EV_APPLICATION]] which is the main entry point of all Vision2 applications. diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/items.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/items.wiki index 3438a8bd..0e0062d1 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/items.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/items.wiki @@ -1,5 +1,6 @@ [[Property:title|Items]] [[Property:weight|3]] +[[Property:uuid|3143511c-28bd-cc5c-c710-700796778982]] All Vision2 items inherit [[ref:libraries/vision2/reference/ev_item_chart|EV_ITEM]] . ==What is an item?== diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/kernel.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/kernel.wiki index ef083621..1fee8dda 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/kernel.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/kernel.wiki @@ -1,5 +1,6 @@ [[Property:title|Kernel]] [[Property:weight|1]] +[[Property:uuid|d830dc77-cd77-1f52-0e39-e0ec1cffa028]] The kernel cluster contains classes that provide functionality that are common to most Windowed application. These classes are considered the core, or kernel of any Vision2 application. The most important of these classes is [[ref:libraries/vision2/reference/ev_application_chart|EV_APPLICATION]] . This is used to initialize the graphical toolkit and event loop of your Vision2 application. Kernel also includes classes such as [[ref:libraries/vision2/reference/ev_timeout_chart| EV_TIMEOUT]] that calls procedures (via agents) at a set interval, and [[ref:libraries/vision2/reference/ev_color_chart| EV_COLOR]] which is used for coloring widgets and items. To start programming with Vision2, you first have to correctly initialize [[ref:libraries/vision2/reference/ev_application_chart|EV_APPLICATION]] . ==Launching your application with EV_APPLICATION - The heart of all Vision2 systems== diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/properties/eiffelvision-pick-and-drop.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/properties/eiffelvision-pick-and-drop.wiki index 50013f31..da57ff60 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/properties/eiffelvision-pick-and-drop.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/properties/eiffelvision-pick-and-drop.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelVision Pick and Drop]] [[Property:weight|0]] +[[Property:uuid|309203de-6536-fe26-4f73-cb1f4a450e6f]] Pick and drop is a mechanism which allows data to be transported from a '''source''' object to a '''target'''. Any Vision2 object inheriting [[ref:libraries/vision2/reference/ev_pick_and_dropable_chart|EV_PICK_AND_DROPABLE]] can be used to transport or receive data. ==A simple pick and drop example== diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/properties/index.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/properties/index.wiki index 1c74ee7c..e304a95f 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/properties/index.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/properties/index.wiki @@ -1,5 +1,6 @@ [[Property:title|Properties]] [[Property:weight|5]] +[[Property:uuid|0d46c1eb-bce4-2d67-0272-da4aa5950c65]] This cluster contains all the common properties available for Vision2 [[Widgets|widgets]] and [[Items|items]] . Every Vision2 widget has the same set of properties inherited from EV_WIDGET, but many widgets also inherit additional properties, further refining the behavior of the widget. EV_WIDGET inherits the following properties: diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/support.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/support.wiki index 3945f5d4..0eeb7111 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/support.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/support.wiki @@ -1,5 +1,6 @@ [[Property:title|Support]] [[Property:weight|6]] +[[Property:uuid|fd72dc5e-32bd-55aa-0e2e-2c7af69c72fd]] The support cluster contains many classes providing useful facilities within the library. Many of the classes within this cluster are constant classes, which are filled with constant values for specific contexts, generally indicated by their names. The following constant classes are available within this cluster: * [[ref:libraries/vision2/reference/ev_dialog_constants_chart|EV_DIALOG_CONSTANTS]] * [[ref:libraries/vision2/reference/ev_drawable_constants_chart|EV_DRAWABLE_CONSTANTS]] diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/containers.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/containers.wiki index 14f4333b..83d22c34 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/containers.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/containers.wiki @@ -1,5 +1,6 @@ [[Property:title|Containers]] [[Property:weight|1]] +[[Property:uuid|aa71e29d-f0e0-9eb2-a289-675d24aac927]] All Vision2 containers inherit [[ref:libraries/vision2/reference/ev_container_chart|EV_CONTAINER]] ==What is a container?== diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/eiffelvision-dialogs.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/eiffelvision-dialogs.wiki index 7478c38b..93c216ee 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/eiffelvision-dialogs.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/eiffelvision-dialogs.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelVision Dialogs]] [[Property:weight|2]] +[[Property:uuid|85cfcfd3-a46e-4e2e-330a-61c2d1579b0f]] This cluster contains all the dialogs provided by Vision2. ==Standard dialogs== diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/index.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/index.wiki index 141e19a3..a8d5c32a 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/index.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/index.wiki @@ -1,5 +1,6 @@ [[Property:title|Widgets]] [[Property:weight|2]] +[[Property:uuid|595bb73e-146a-ea19-221f-40f3415aad34]] ==What is a Widget?== A Widget is the fundamental building block of your applications GUI, components such as Windows, Buttons and Labels are examples of such. The widget set of Vision2 provides you with the flexibility to easily create powerful graphical applications. All widgets in Vision2 inherit from [[ref:/libraries/vision2/reference/ev_widget_chart| EV_WIDGET]] and the features provided in EV_WIDGET may be called on any widget. diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/primitives.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/primitives.wiki index 780204d4..27704a8c 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/primitives.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/eiffelvision-library-reference-manual/widgets/primitives.wiki @@ -1,5 +1,6 @@ [[Property:title|Primitives]] [[Property:weight|0]] +[[Property:uuid|09d70dd5-2e30-7615-88ac-4babe4eb7aa6]] All Vision2 primitives inherit [[ref:libraries/vision2/reference/ev_primitive_chart|EV_PRIMITIVE]] . ==What is a primitive?== diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/index.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/index.wiki index 31cc4fd2..e0f032d8 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/index.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelVision 2 Library]] [[Property:link_title|EiffelVision 2]] [[Property:weight|10]] +[[Property:uuid|c72b1a5c-9cbf-f8c8-a4c2-619e392799b0]] Type: Library
Platform: Any
diff --git a/documentation/current/solutions/gui-building/eiffelvision-2/revisions-and-bug-fixes.wiki b/documentation/current/solutions/gui-building/eiffelvision-2/revisions-and-bug-fixes.wiki index 6090bad1..355a41f3 100644 --- a/documentation/current/solutions/gui-building/eiffelvision-2/revisions-and-bug-fixes.wiki +++ b/documentation/current/solutions/gui-building/eiffelvision-2/revisions-and-bug-fixes.wiki @@ -1,5 +1,6 @@ [[Property:title|Revisions and Bug Fixes]] [[Property:weight|10]] +[[Property:uuid|eb11a237-0c75-0427-452a-303d4f276b97]] This document contains details of modifications and bug fixes to the Vision2 library listed by the release version of EiffelStudio. All bug fixes and modifications are relative to the previously released version. ==EiffelStudio 6.2== diff --git a/documentation/current/solutions/gui-building/index.wiki b/documentation/current/solutions/gui-building/index.wiki index 8ce50bb3..10f74ee0 100644 --- a/documentation/current/solutions/gui-building/index.wiki +++ b/documentation/current/solutions/gui-building/index.wiki @@ -2,14 +2,14 @@ [[Property:link_title|GUI building]] [[Property:weight|-14]] [[Property:uuid|df3cec75-5fe4-7b6b-c5f3-f07932857e70]] -* Graphical user interfaces -** EiffelBuild http://ise181.ise/book/documentation/eiffelbuild-introduction -*** EiffelBuild How To's http://ise181.ise/book/documentation/eiffelbuild-how-tos -*** EiffelBuild Reference http://ise181.ise/book/documentation/eiffelbuild-reference -** EiffelVision 2 http://ise181.ise/book/documentation/eiffelvision-2-library -*** EiffelVision 2 introduction http://ise181.ise/book/documentation/eiffelvision-introduction -*** EiffelVision 2 tutorial http://ise181.ise/book/documentation/eiffelvision-interface-content -*** EiffelVision 2 class reference -*** EiffelVision 2 samples http://ise181.ise/book/documentation/eiffelvision-2-samples +== Graphical user interfaces == +* [[EiffelBuild|EiffelBuild]] +** [[EiffelBuild How To's|EiffelBuild How To's]] +** [[EiffelBuild Reference|EiffelBuild Reference]] +* [[EiffelVision 2 Library|EiffelVision 2]] +** [[EiffelVision Introduction|EiffelVision 2 introduction]] +** [[EiffelVision Interface Content|EiffelVision 2 tutorial]] +** EiffelVision 2 class reference +** [[EiffelVision 2 Samples|EiffelVision 2 samples]] diff --git a/documentation/current/solutions/index.wiki b/documentation/current/solutions/index.wiki index b9bed5ae..2a28a0d8 100644 --- a/documentation/current/solutions/index.wiki +++ b/documentation/current/solutions/index.wiki @@ -13,7 +13,3 @@ This includes: - - - - diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/advanced.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/advanced.wiki index 40e027cd..7da22e1f 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/advanced.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/advanced.wiki @@ -1,5 +1,6 @@ [[Property:title|Advanced]] [[Property:weight|0]] +[[Property:uuid|9229e5c1-165e-add7-6ce2-355dec4544f1]] ==Compiling== To compile the example, you must compile two projects: ''chat'' and ''join''. diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/index.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/index.wiki index d79d3b1d..85ab2100 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/index.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelNet Samples]] [[Property:weight|2]] +[[Property:uuid|c9c0fe01-a80f-5834-8503-aad1063e1503]] =Description= Here is a set of five examples written thanks to the EiffelNet library to show some basic applications. Two of them rely on specific code to Unix Operating systems and consequently could not be run under Windows. diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/polling.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/polling.wiki index 08aa0f25..e73b581d 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/polling.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/polling.wiki @@ -1,5 +1,6 @@ [[Property:title|Polling]] [[Property:weight|1]] +[[Property:uuid|3bdc742f-2214-c5fb-2336-bc613b721c0d]] ==Compiling== To compile the example, you must compile two projects: ''client'' and ''server.'' diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/predef.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/predef.wiki index 38bd0e78..95e15f27 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/predef.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/predef.wiki @@ -1,5 +1,6 @@ [[Property:title|Predef]] [[Property:weight|2]] +[[Property:uuid|d9851197-ae39-5e73-9bf3-51d7cb9fa23c]] ==Compiling== To compile the example, you must compile two projects: ''client'' and ''server.'' diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/same-machine.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/same-machine.wiki index 298f4106..77df8f93 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/same-machine.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/same-machine.wiki @@ -1,5 +1,6 @@ [[Property:title|Same Machine]] [[Property:weight|3]] +[[Property:uuid|d10e1e4b-94c1-2725-f465-79da88730196]] ==Compiling== To compile the example, you must compile two projects: ''client'' and ''server.'' diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/two-machines.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/two-machines.wiki index bc6d138d..568ae9d2 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/two-machines.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-samples/two-machines.wiki @@ -1,5 +1,6 @@ [[Property:title|Two Machines]] [[Property:weight|4]] +[[Property:uuid|52307bfe-116d-f5c4-ccf1-98f330ef82e5]] ==Compiling== To compile the example, you must compile two projects: ''client'' and ''server.'' diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/bibliography.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/bibliography.wiki index 30a299d9..e75a4b19 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/bibliography.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/bibliography.wiki @@ -1,5 +1,6 @@ [[Property:title|Bibliography]] [[Property:weight|10]] +[[Property:uuid|739d59a6-c0b0-899f-24cf-5a17655a5512]] [1] Bertrand Meyer: [http://www.eiffel.com/doc/] , Prentice Hall, 1992. (Available from Eiffel Software.) [2] Bertrand Meyer: [http://www.eiffel.com/doc/] , Prentice Hall, 1994. (Available from Eiffel Software.) [3] W. Richard Stevens: ''Unix Network Programming'', Prentice Hall, 1990. diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/clients-and-servers.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/clients-and-servers.wiki index a8e2fd5b..b91e1308 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/clients-and-servers.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/clients-and-servers.wiki @@ -1,5 +1,6 @@ [[Property:title|Clients and servers]] [[Property:weight|1]] +[[Property:uuid|3c1711f8-3aa0-9f3b-c1ce-0cd9324b3e00]] In the client-server model of computing, a number of software systems, the clients, may require general-purpose services provided by other systems, the servers. Clients and servers run concurrently, on the same machine or, more generally, on different machines connected through a network. Typically, the clients are systems, for example systems that provide useful facilities for human users; the servers take care of operations that clients could not perform on their own (or would perform less efficiently), and of operations that are common to several clients. Example of servers include: diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/event-driven-command-execution.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/event-driven-command-execution.wiki index 59af953a..59fef939 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/event-driven-command-execution.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/event-driven-command-execution.wiki @@ -1,5 +1,6 @@ [[Property:title|Event-driven command execution]] [[Property:weight|8]] +[[Property:uuid|66036773-3e41-2877-7fa4-e0601558fc7c]] {| border="1" |- | The example classes discussed in this section appear in the subdirectory ''polling ''of the example directory diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/index.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/index.wiki index ae21c4a1..68529068 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/index.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelNet]] [[Property:link_title|EiffelNet Tutorial]] [[Property:weight|0]] +[[Property:uuid|09679e98-4d5c-d2af-439b-00b28c6cfe4b]] * [[What is EiffelNet|Introduction]] * [[Clients and servers|Clients and server]] * [[An overview of EiffelNet Mechanisms|An overview of EiffelNet mechanisms]] diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/introduction-examples.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/introduction-examples.wiki index 49d17501..4eab6e3c 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/introduction-examples.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/introduction-examples.wiki @@ -1,5 +1,6 @@ [[Property:title|Introduction to the examples]] [[Property:weight|4]] +[[Property:uuid|3d9d54ab-0324-d8d4-ae32-f5379f2fc721]] The following sections describe a set of examples showing how to use EiffelNet to build client-server applications. The examples start with the most simple uses involving high-level classes covering common cases and shielding developers from details of the mechanism. Subsequent examples will reveal some of these details, useful for more advanced or specific applications of EiffelNet. diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/more-complex-example.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/more-complex-example.wiki index cf8b0d02..1fcf8583 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/more-complex-example.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/more-complex-example.wiki @@ -1,5 +1,6 @@ [[Property:title|A more complex example]] [[Property:weight|9]] +[[Property:uuid|a57bbf5b-d877-8a50-1bca-92848868bdec]] {| border="1" |- | The example classes discussed in this section appear in the subdirectory ''advanced ''of the example directory diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/obtaining-finer-degree-control.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/obtaining-finer-degree-control.wiki index 13f79826..c450afbf 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/obtaining-finer-degree-control.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/obtaining-finer-degree-control.wiki @@ -1,6 +1,7 @@ [[Property:title|Obtaining a finer degree of control]] [[Property:link_title|]] [[Property:weight|6]] +[[Property:uuid|9e2de24b-8ae3-5b57-9797-e163defe83d9]] Let us now take a more internal look at the workings of EiffelNet. The two examples that follow have the same behavior as the preceding one; since their text is less simple, they are only interesting as an illustration of the lower-level facilities that you may want to use in specific cases. If you are already familiar with socket programming, they will also give you a more precise idea of how EiffelNet encapsulates the basic socket mechanisms. As before, we have a client and a server class, still called OUR_CLIENT and OUR_SERVER, which are part of two different systems and will run concurrently. The communication uses streams rather than datagrams; the datagram form of communication will be examined in section [[Using datagram sockets|using datagram sockets]] . diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/overview-eiffelnet-mechanisms.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/overview-eiffelnet-mechanisms.wiki index 0cbb16bc..e388676e 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/overview-eiffelnet-mechanisms.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/overview-eiffelnet-mechanisms.wiki @@ -1,5 +1,6 @@ [[Property:title|An overview of EiffelNet Mechanisms]] [[Property:weight|2]] +[[Property:uuid|08d7ca19-65e3-7f35-fbce-a50d0aedf626]] To enable clients and servers to exchange objects, you will have to ensure that they can refer to a common '''address'''. At the predefined level this is really the only notion that you need to know, although it is useful to get the bigger picture, in particular the concept of '''socket '''(which enables systems to set up communication channels), the various forms of communication (single-machine versus multi-machine, stream versus datagram), the kinds of object structure that may be exchanged, the notion of packet, and how to associate commands with communication events. The following paragraphs review these ideas and the corresponding EiffelNet abstractions. ===Establishing a common address=== diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/using-datagram-sockets.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/using-datagram-sockets.wiki index 957a870c..e3a668c5 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/using-datagram-sockets.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/using-datagram-sockets.wiki @@ -1,5 +1,6 @@ [[Property:title|Using datagram sockets]] [[Property:weight|7]] +[[Property:uuid|ba27b7dd-77db-7f6f-9b8c-2a3111d9d432]] {| border="1" |- | The example classes discussed in this section appear in the subdirectory ''datagram ''of the example directory diff --git a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/what-eiffelnet.wiki b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/what-eiffelnet.wiki index d529abfb..f5822578 100644 --- a/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/what-eiffelnet.wiki +++ b/documentation/current/solutions/networking/eiffelnet/eiffelnet-tutorial/what-eiffelnet.wiki @@ -1,5 +1,6 @@ [[Property:title|What is EiffelNet]] [[Property:weight|0]] +[[Property:uuid|bf6d5904-9df8-451a-2ef9-0eee1200b60f]] ===What is EiffelNet?=== The client-server model of computing is quickly gaining ground as a way of optimizing network resources and of building sophisticated and flexible transactional applications. diff --git a/documentation/current/solutions/networking/eiffelnet/index.wiki b/documentation/current/solutions/networking/eiffelnet/index.wiki index 16624658..168b7c0e 100644 --- a/documentation/current/solutions/networking/eiffelnet/index.wiki +++ b/documentation/current/solutions/networking/eiffelnet/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelNet Library]] [[Property:link_title|EiffelNet]] [[Property:weight|4]] +[[Property:uuid|80fbd984-da52-b573-6282-33f499d67ab5]] Type: Library
Platform: Any
diff --git a/documentation/current/solutions/networking/index.wiki b/documentation/current/solutions/networking/index.wiki index 5e104783..731ab8a5 100644 --- a/documentation/current/solutions/networking/index.wiki +++ b/documentation/current/solutions/networking/index.wiki @@ -4,9 +4,9 @@ [[Property:uuid|4ddb235c-fea6-ee00-05af-6493e2c652a7]] == Network communication == -* EiffelNet http://ise181.ise/book/documentation/eiffelnet-library -** EiffelNet tutorial http://ise181.ise/book/documentation/eiffelnet +* [[EiffelNet Library|EiffelNet]] +** [[EiffelNet|EiffelNet tutorial]] ** EiffelNet class reference -** EiffelNet samples http://ise181.ise/book/documentation/eiffelnet-samples +** [[EiffelNet Samples|EiffelNet samples]] * cURL library diff --git a/documentation/current/solutions/other-languages/cecil/cecil-interface-overview.wiki b/documentation/current/solutions/other-languages/cecil/cecil-interface-overview.wiki index e66779bd..68660124 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-interface-overview.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-interface-overview.wiki @@ -1,5 +1,6 @@ [[Property:title|CECIL interface overview]] [[Property:weight|3]] +[[Property:uuid|7d8b4785-6f05-02c9-ba1c-12bad3d4b331]] ==Eiffel basic types== The EIFFEL include files define types for every EIFFEL types: * An Eiffel INTEGER is an ''EIF_INTEGER'', diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/attribute-exists.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/attribute-exists.wiki index 126d605d..3ee7223b 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/attribute-exists.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/attribute-exists.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `attribute_exists']] [[Property:link_title|attribute_exists]] [[Property:weight|-15]] +[[Property:uuid|7cdf93a7-6f63-869a-5443-b8908a086d18]] ==SYNOPSYS== '''#include "eif_cecil.h"''' diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-access.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-access.wiki index 087b8dc3..08d860b7 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-access.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-access.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_access']] [[Property:link_title|eif_access]] [[Property:weight|-14]] +[[Property:uuid|2f74eeb4-2508-bf32-adf2-87959cfb2593]] ==SYNOPSYS== '''#include "eif_hector.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-adopt.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-adopt.wiki index 37b4aae4..10516b96 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-adopt.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-adopt.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_adopt']] [[Property:link_title|eif_adopt]] [[Property:weight|-13]] +[[Property:uuid|dc8ef8a9-7082-2a27-4e45-8f1d4472dbda]] ==SYNOPSYS== '''#include "eif_hector.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-attribute-type.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-attribute-type.wiki index 55edd2f3..ff1ec875 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-attribute-type.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-attribute-type.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_attribute_type']] [[Property:link_title|eif_attribute_type]] [[Property:weight|-11]] +[[Property:uuid|28b3840f-648f-dc4d-8c83-70532a5e8e63]] ==SYNOPSYS== '''#include "eif_cecil.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-attribute.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-attribute.wiki index ce7ed4b9..7a703035 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-attribute.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-attribute.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_attribute'.]] [[Property:link_title|eif_attribute]] [[Property:weight|-12]] +[[Property:uuid|c843f272-8ac2-c30e-e71f-bd6c567e9de3]] ==SYNOPSYS== '''#include "eif_cecil.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-create.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-create.wiki index 1c8dc622..3338991f 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-create.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-create.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_create']] [[Property:link_title|eif_create]] [[Property:weight|-7]] +[[Property:uuid|b928f4b9-2830-5723-6f02-57eac618b116]] ==SYNOPSYS== '''#include "eif_cecil. h"''' diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-disable-visible-exception.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-disable-visible-exception.wiki index 3fdf99d9..cf16baa8 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-disable-visible-exception.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-disable-visible-exception.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_disable_visible_exception']] [[Property:link_title|eif_disable_visible_exception]] [[Property:weight|-6]] +[[Property:uuid|6b8323d9-1963-c6b8-0198-f07895916c46]] ==SYNOPSYS== '''#include "eif_cecil.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-enable-visible-exception.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-enable-visible-exception.wiki index d37f2697..243465c2 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-enable-visible-exception.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-enable-visible-exception.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_enable_visible_exception']] [[Property:link_title|eif_enable_visible_exception]] [[Property:weight|-4]] +[[Property:uuid|97b5a74c-d7ad-abf4-9390-59266b67c7c7]] ==SYNOPSYS== '''#include "eif_cecil.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-name-tid.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-name-tid.wiki index 1be3c7e1..75b0d713 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-name-tid.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-name-tid.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_name_by_tid']] [[Property:link_title|eif_name_by_tid]] [[Property:weight|-1]] +[[Property:uuid|7ae34f4d-5eaf-0703-29f7-54dc4f0fd49d]] ==SYNOPSYS== '''#include "eif_cecil.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-name.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-name.wiki index 312b4a09..6c528663 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-name.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-name.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_name']] [[Property:link_title|eif_name]] [[Property:weight|-2]] +[[Property:uuid|2921b2ef-1f59-cd26-df50-5cb946eae84c]] ==SYNOPSYS== '''#include "eif_cecil.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-procedure.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-procedure.wiki index 4c003260..c0626cfb 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-procedure.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-procedure.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_procedure']] [[Property:link_title|eif_procedure]] [[Property:weight|1]] +[[Property:uuid|3937f124-fffa-3244-d2e4-46ccfcec5fa8]] ==SYNOPSYS== '''#include "eif_cecil.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-protect.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-protect.wiki index abf60592..6d710875 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-protect.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-protect.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_protect']] [[Property:link_title|eif_protect]] [[Property:weight|2]] +[[Property:uuid|f335a229-93c4-4f3f-6fca-9c4c190745c4]] ==SYNOPSYS== '''#include "eif_hector.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-string.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-string.wiki index 1ce8b1b4..5a0cd7c9 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-string.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-string.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_string']] [[Property:link_title|eif_string]] [[Property:weight|5]] +[[Property:uuid|d203c941-df82-495a-55f3-791652b0e9ef]] ==SYNOPSYS== '''#include "eif_plug.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type-id.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type-id.wiki index 23c5fea3..90c079cc 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type-id.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type-id.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_type_id']] [[Property:link_title|eif_type_id]] [[Property:weight|9]] +[[Property:uuid|248182c3-5e89-4adc-097f-f03cb934eb63]] ==SYNOPSYS== '''#include "eif_gen_conf.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type-name.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type-name.wiki index 242f467a..a616326b 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type-name.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type-name.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_type_by_name']] [[Property:link_title|eif_type_by_name]] [[Property:weight|7]] +[[Property:uuid|51549b56-757c-f91f-6d27-5784a12181ac]] ==SYNOPSYS== '''#include "eif_gen_conf.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type-reference.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type-reference.wiki index d2d16571..70a03858 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type-reference.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type-reference.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_type_by_reference']] [[Property:link_title|eif_type_by_reference]] [[Property:weight|8]] +[[Property:uuid|1258584a-0aae-3246-0553-98817deda6e0]] ==SYNOPSYS== '''#include "eif_cecil.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type.wiki index c5f27efa..0cf2a387 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-type.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_type']] [[Property:link_title|eif_type]] [[Property:weight|6]] +[[Property:uuid|8c200b03-cae1-bbcd-98b0-1767402744be]] ==SYNOPSYS== '''#include "eif_cecil.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-wean.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-wean.wiki index 8f7e69d2..2fabd8f3 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-wean.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/eif-wean.wiki @@ -1,6 +1,7 @@ [[Property:title|Reference for `eif_wean']] [[Property:link_title|eif_wean]] [[Property:weight|10]] +[[Property:uuid|d94fdbce-8cbd-7714-ebfc-38e1f0526eaa]] ==SYNOPSYS== '''#include "eif_hector.h" diff --git a/documentation/current/solutions/other-languages/cecil/cecil-reference/index.wiki b/documentation/current/solutions/other-languages/cecil/cecil-reference/index.wiki index ba7921a1..fe31aa2f 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-reference/index.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-reference/index.wiki @@ -1,5 +1,6 @@ [[Property:title|CECIL Reference]] [[Property:weight|4]] +[[Property:uuid|20ca6ef1-0d26-a556-955c-96bed93dfdfb]] Index of CECIL features * [[Reference for `RTMS'|RTMS()]] * [[Reference for `attribute_exists'|attribute_exists()]] diff --git a/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-basic-sample.wiki b/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-basic-sample.wiki index f8846413..44c9a88c 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-basic-sample.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-basic-sample.wiki @@ -1,5 +1,6 @@ [[Property:title|CECIL - Basic sample]] [[Property:weight|2]] +[[Property:uuid|ed699d37-f480-0cef-817f-9f4a857c1691]] ==cecil-test== After you have done the appropriate steps to compile the example, you will get a `cecil.exe' on windows, or `cecil' on Unix. diff --git a/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-c-eiffel.wiki b/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-c-eiffel.wiki index 8fd80db2..59212b10 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-c-eiffel.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-c-eiffel.wiki @@ -1,5 +1,6 @@ [[Property:title|CECIL - C to Eiffel]] [[Property:weight|0]] +[[Property:uuid|c3b64ef2-28b2-920e-44fb-4cff2320c099]] ==array== This example shows how to create an Eiffel array from an existing C array. After you have done the appropriate steps to compile the example, you will get a `cecil.exe' on windows, or `cecil' on Unix. Launch the program and you will be prompted for 10 integers that will be inserted in a C array, it will then initialize the Eiffel array and calls display from the MY_ARRAY class. A typical output will be: diff --git a/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-eiffel-c.wiki b/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-eiffel-c.wiki index 6f528c2c..ef029b83 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-eiffel-c.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-eiffel-c.wiki @@ -1,5 +1,6 @@ [[Property:title|CECIL - Eiffel to C]] [[Property:weight|1]] +[[Property:uuid|3d1df3fe-2ac8-1ba3-c846-8329ea8a3772]] ==array== This example shows how to create a C array from an existing Eiffel array. diff --git a/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-how-compile-samples.wiki b/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-how-compile-samples.wiki index 3ccfc8aa..95b18e96 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-how-compile-samples.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-how-compile-samples.wiki @@ -1,5 +1,6 @@ [[Property:title|CECIL - How to compile the samples?]] [[Property:weight|4]] +[[Property:uuid|3548e1b4-9488-10d5-561e-f817c15d6ff0]] ==Compiling for Windows== Depending on your C compiler different steps have to be done, but do not forget to do the following before starting the C compiler specific part in a DOS console: diff --git a/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-threads.wiki b/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-threads.wiki index 9318ad7b..6be748aa 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-threads.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-samples/cecil-threads.wiki @@ -1,5 +1,6 @@ [[Property:title|CECIL - Threads]] [[Property:weight|3]] +[[Property:uuid|44f2ee31-8634-6e54-f45a-8b36f780f888]] ==bank_account== After you have done the appropriate steps to compile the example, you will get a `bank_account.exe' on windows, or `bank_account' on Unix. diff --git a/documentation/current/solutions/other-languages/cecil/cecil-samples/index.wiki b/documentation/current/solutions/other-languages/cecil/cecil-samples/index.wiki index 994188a4..95353be7 100644 --- a/documentation/current/solutions/other-languages/cecil/cecil-samples/index.wiki +++ b/documentation/current/solutions/other-languages/cecil/cecil-samples/index.wiki @@ -1,5 +1,6 @@ [[Property:title|CECIL samples]] [[Property:weight|5]] +[[Property:uuid|dab15073-3970-7e47-a2d8-c926faa50ade]] Before trying the examples, please take a moment and look at the [[CECIL - How to compile the samples?|description]] that will explain how to compile the CECIL samples. Available samples include: diff --git a/documentation/current/solutions/other-languages/cecil/compiling-eiffel-system-cecil.wiki b/documentation/current/solutions/other-languages/cecil/compiling-eiffel-system-cecil.wiki index dbfb4a1d..98d97731 100644 --- a/documentation/current/solutions/other-languages/cecil/compiling-eiffel-system-cecil.wiki +++ b/documentation/current/solutions/other-languages/cecil/compiling-eiffel-system-cecil.wiki @@ -1,5 +1,6 @@ [[Property:title|Compiling an Eiffel system for CECIL]] [[Property:weight|1]] +[[Property:uuid|94a549df-1919-9dcd-82b3-1cd82e064a03]] ==Compiling your Eiffel system for CECIL== It is very simple to "Cecilize" your Eiffel system, that is to say make its features available from the outside through CECIL. You will compile it as you normally would - either freeze it or finalize it. The only supplementary precaution is to protect from the dead-code remover any Eiffel features that are not called from the Eiffel system's root, and might thus be dead-code-removed by the optimization mechanism. To do this, make the appropriate features and classes [[Group Options|visible]] . diff --git a/documentation/current/solutions/other-languages/cecil/index.wiki b/documentation/current/solutions/other-languages/cecil/index.wiki index 0db61bd9..27b0230c 100644 --- a/documentation/current/solutions/other-languages/cecil/index.wiki +++ b/documentation/current/solutions/other-languages/cecil/index.wiki @@ -1,5 +1,6 @@ [[Property:title|CECIL]] [[Property:weight|3]] +[[Property:uuid|c03112b8-578e-cc1a-ee13-c6928b787529]] * [[CECIL: Introduction|Introduction]] * [[Compiling an Eiffel system for CECIL|Compiling an Eiffel system for CECIL]] * [[Using a CECIL archive|Using a CECIL archive]] diff --git a/documentation/current/solutions/other-languages/cecil/using-cecil-archive.wiki b/documentation/current/solutions/other-languages/cecil/using-cecil-archive.wiki index 52005293..090d7f68 100644 --- a/documentation/current/solutions/other-languages/cecil/using-cecil-archive.wiki +++ b/documentation/current/solutions/other-languages/cecil/using-cecil-archive.wiki @@ -1,5 +1,6 @@ [[Property:title|Using a CECIL archive]] [[Property:weight|2]] +[[Property:uuid|e8438c9b-65ae-368f-6559-a0d5b28db4b7]] ==Linking the CECIL archive into a program== The CECIL archive already incorporates the Eiffel run-time. To use the functions provided in the CECIL archive, simply write the C programs according to the CECIL specifications of ETL, and then include the CECIL archive in the link line of your C application. This line looks like: on Unix/linux: diff --git a/documentation/current/solutions/other-languages/eiffel2java/eiffel2java-sample.wiki b/documentation/current/solutions/other-languages/eiffel2java/eiffel2java-sample.wiki index 25f3a1cc..a74d64f2 100644 --- a/documentation/current/solutions/other-languages/eiffel2java/eiffel2java-sample.wiki +++ b/documentation/current/solutions/other-languages/eiffel2java/eiffel2java-sample.wiki @@ -1,5 +1,6 @@ [[Property:title|Eiffel2Java Sample]] [[Property:weight|1]] +[[Property:uuid|90ef17d4-8e23-34dd-1cb8-488533561dd4]] This example shows how to create an instance of the Java Virtual Machine and the creation of an object of type test, a java class reproduced below: (Java Code) diff --git a/documentation/current/solutions/other-languages/eiffel2java/eiffel2java-tutorial.wiki b/documentation/current/solutions/other-languages/eiffel2java/eiffel2java-tutorial.wiki index 067b59ab..c089588e 100644 --- a/documentation/current/solutions/other-languages/eiffel2java/eiffel2java-tutorial.wiki +++ b/documentation/current/solutions/other-languages/eiffel2java/eiffel2java-tutorial.wiki @@ -1,6 +1,7 @@ [[Property:title|Eiffel to Java Interface]] [[Property:link_title|Eiffel2Java Tutorial]] [[Property:weight|0]] +[[Property:uuid|2d0fc62b-90e9-650b-2896-d92db66899c9]] ==Introduction== The Java interface allows you to call Java routines or attributes from your Eiffel code. It uses the Java Native Interface (JNI) provided by the Java Development Kit (JDK). You can get more information about the JNI at: diff --git a/documentation/current/solutions/other-languages/eiffel2java/index.wiki b/documentation/current/solutions/other-languages/eiffel2java/index.wiki index e9fc4c4e..38c34eb2 100644 --- a/documentation/current/solutions/other-languages/eiffel2java/index.wiki +++ b/documentation/current/solutions/other-languages/eiffel2java/index.wiki @@ -1,5 +1,6 @@ [[Property:title|Eiffel2Java]] [[Property:weight|4]] +[[Property:uuid|009ed581-1141-7db0-74bb-a9cbca15b904]] Type: Library
Platform: Any
diff --git a/documentation/current/solutions/other-languages/index.wiki b/documentation/current/solutions/other-languages/index.wiki index 4811fa7b..466c2bb2 100644 --- a/documentation/current/solutions/other-languages/index.wiki +++ b/documentation/current/solutions/other-languages/index.wiki @@ -3,7 +3,6 @@ [[Property:weight|-12]] [[Property:uuid|6029d6d9-bb73-5c74-02f6-70d202a65ceb]] == Interacting with software in other languages == -{{note|Put a reference to .NET and COM, as well as to external features syntax -Kwaxer 9/16/08 7:47 PM }} * [[C externals|C externals tutorial]] * [[C++ Externals|C++ externals tutorial]] @@ -13,3 +12,5 @@ ** Eiffel2Java class reference ** [[Eiffel2Java Sample|Eiffel2Java samples]] +{{note|Put a reference to .NET and COM, as well as to external features syntax -Kwaxer 9/16/08 7:47 PM }} + diff --git a/documentation/current/solutions/porting-instructions/index.wiki b/documentation/current/solutions/porting-instructions/index.wiki index 4febc689..fa1f80b3 100644 --- a/documentation/current/solutions/porting-instructions/index.wiki +++ b/documentation/current/solutions/porting-instructions/index.wiki @@ -1,6 +1,7 @@ [[Property:title|Porting Instructions]] [[Property:link_title|Porting instructions]] [[Property:weight|-11]] +[[Property:uuid|381d6e34-799a-3ba8-b1ec-c4ef73bce54f]] =Porting from one platform to another= * [[Porting an Eiffel application from UNIX to Windows or vice-versa|Porting from traditional Windows to UNIX and vice-versa. ]] diff --git a/documentation/current/solutions/porting-instructions/porting-eiffel-application-unix-windows-or-vice-versa.wiki b/documentation/current/solutions/porting-instructions/porting-eiffel-application-unix-windows-or-vice-versa.wiki new file mode 100644 index 00000000..efe26c90 --- /dev/null +++ b/documentation/current/solutions/porting-instructions/porting-eiffel-application-unix-windows-or-vice-versa.wiki @@ -0,0 +1,45 @@ +[[Property:title|Porting an Eiffel application from UNIX to Windows or vice-versa]] +[[Property:weight|-14]] +[[Property:uuid|d20773e7-dc7a-f500-e437-8b1f5fcffd58]] +==Requirements== + +Before starting your project, you must first decide if you want your program to run either single or multi-platform. If you decide to go multi-platform make sure you use platform independent Eiffel libraries or C/C++ code. Eiffel Software provides the following multi-platform libraries: +* Eiffel2Java (on platform that supports JNI) +* EiffelBase +* EiffelLex/EiffelParse +* EiffelNet (except UNIX specific classes) +* EiffelPreferences +* EiffelStore +* EiffelThread +* EiffelTime +* EiffelVision2 +* EiffelWeb +* EiffelWizards + +==Configuring your project== + +For porting between different UNIX systems, you simply need one simple configuration file as the C/C++ externals should be the same. If this is not the case, as with UNIX and Windows, you will need to use conditions in the configuration file. + +The usual scenario is to port from UNIX to Windows or vice versa. In this case, the only thing that needs to be conditioned in the configuration file are the externals. Conditioning of externals can be done in the project settings. + +Note that externals are (in contrast to almost all other locations) taken literally, so you may need to use `\` for paths on Windows and `/` on UNIX. + +It is important to also note that some multi-platform libraries such as EiffelVision2 do not include the same clusters for both UNIX and Windows. As with externals, clusters need to be specified depending on the target platform. + +==UNIX systems== + +When compiling for many UNIX system, you should finalize without launching the C compilation. At the end, the EIFGENs/target_name/F_code directory is built. This is the portable C code that you can take from one platform to another. We recommend you to create an archive of the F_code for backup. + +To compile on a given platform, you have to make sure that you have a complete EiffelStudio delivery for the target platform and that your PATH environment variable contains $ISE_EIFFEL/studio/spec/$ ISE_PLATFORM/bin. You then have to check that all C externals that you are using have been compiled for this platform. + +You can then launch the `finish_freezing' script that will automatically recompile the C generated code and generate a new executable for the given platform. + +==Between UNIX and Windows== + +As shown above you will need to have a configuration file with conditions to port your Windows application to UNIX. You can then use the UNIX configuration file to re-finalize your project (without C compilation) and then you have ANSI compliant C code that may be compiled on a UNIX platform using the above instructions. + +To compile your UNIX application on Windows simply follow the same instructions as above using a Windows configuration file instead. When the ANSI C code is generated, run finish_freezing.exe in the F_code directory on the target Windows platform and your system will be compiled. + + + + diff --git a/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-sample.wiki b/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-sample.wiki new file mode 100644 index 00000000..cf8b72d6 --- /dev/null +++ b/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-sample.wiki @@ -0,0 +1,45 @@ +[[Property:title|Preferences Sample]] +[[Property:link_title|EiffelPreferences Sample]] +[[Property:weight|2]] +[[Property:uuid|f492e71c-07a8-9b1d-f72a-d59330acbf16]] +
+
+ +==Compiling== + +* Launch EiffelStudio. +* Click '''Add project''' +* Browse to ''$ISE_EIFFEL\examples\preferences\''. +* Choose ''preferences_example.ecf'' +* Choose the location where the project will be compiled, by default the same directory containing the configuration file. +* Choose the target: ''registry'' (Windows only) will use the registry to store the preferences, ''xml'' will use a xml file to store the preferences. +* Click '''OK'''. + + +==Running== + +After launching the application, you will see a window displayed with 2 buttons. When clicked each will display a window showing the preferences, one is the default view provided with the library, the other is a custom view for purposes of example. The default view looks like: + +[[Image:normal|preferences_example_normal_view]] + +The custom view looks like: + +[[Image:custom|preferences_example_normal_view]] + +In each dialog you can select the preferences and alter the values. +==Under the Hood== + +This example shows you how to achieve the following tasks: + +* Create preferences using the library supplied preference types and associated views +* Use the default widget for viewing preferences and manipulating their values +* Create a custom preference (a preference for storing correctly formatted directory path names) +* Create a widget to view and change the custom preference type value +* Create a custom manager to register custom types to the system +* Create a custom dialog for viewing all the preferences + + + + + + diff --git a/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/index.wiki b/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/index.wiki index 9da48cd5..c0f1259b 100644 --- a/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/index.wiki +++ b/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/index.wiki @@ -1,6 +1,7 @@ [[Property:title|Preference Library]] [[Property:link_title|EiffelPreferences Tutorial]] [[Property:weight|0]] +[[Property:uuid|0c717db7-fb53-80b3-e32f-cc8356afa5f8]] The preference library is a platform independent library that can be used to add preference and configuration settings to your application. Briefly, the library provides support for creating fully configurable preference values, on per application or per user basis. It also provides a graphical interface for manipulation of these values, and a easily extendible design for you to add your own custom preference types. * [[Overview|Overview]] * [[Initialization|Initialization]] diff --git a/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/initialization.wiki b/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/initialization.wiki index 4c5f8118..68dc08c7 100644 --- a/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/initialization.wiki +++ b/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/initialization.wiki @@ -1,5 +1,6 @@ [[Property:title|Initialization]] [[Property:weight|1]] +[[Property:uuid|2f69a1b5-b5fd-57be-46e0-60eb2406ff5d]] This document details how to setup preferences for your application. ==Initializating the preferences== diff --git a/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/interface-preferences.wiki b/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/interface-preferences.wiki index 4a1d3501..4a6630e5 100644 --- a/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/interface-preferences.wiki +++ b/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/interface-preferences.wiki @@ -1,5 +1,6 @@ [[Property:title|Interface for preferences]] [[Property:weight|2]] +[[Property:uuid|6f4964b1-8cf6-d9d4-0778-94d8a3737cad]] This document describes the use of graphical widgets to display and manipulate preferences. The preference library contains a cluster called interface. This cluster provides some basic classes which can be used to graphically display and manipulate the PREFERENCE types used by the library. There are various widget classes which correspond to particular types of preferences and can be used to view and change the values of an associated preference. The table below illustrates which widgets are used to display each of the known preference types: diff --git a/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/overview.wiki b/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/overview.wiki index 3fbdae8a..b9dbdf62 100644 --- a/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/overview.wiki +++ b/documentation/current/solutions/preferences/eiffelpreferences/eiffelpreferences-tutorial/overview.wiki @@ -1,5 +1,6 @@ [[Property:title|Overview]] [[Property:weight|0]] +[[Property:uuid|8f90ea04-493b-0e00-1327-c707a49e1c04]] This document gives a brief overview of the preference library. ==Introduction== diff --git a/documentation/current/solutions/preferences/eiffelpreferences/index.wiki b/documentation/current/solutions/preferences/eiffelpreferences/index.wiki index 539b3c27..15f09592 100644 --- a/documentation/current/solutions/preferences/eiffelpreferences/index.wiki +++ b/documentation/current/solutions/preferences/eiffelpreferences/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelPreference Library]] [[Property:link_title|EiffelPreferences]] [[Property:weight|1]] +[[Property:uuid|f56ec405-6032-67dd-55e1-5a5ff7a4193c]] Type: Library
Platform: Any
diff --git a/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffel-scan-console-input.wiki b/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffel-scan-console-input.wiki index 4b431ebd..ec971ad2 100644 --- a/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffel-scan-console-input.wiki +++ b/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffel-scan-console-input.wiki @@ -1,5 +1,6 @@ [[Property:title|eiffel_scan console input]] [[Property:weight|2]] +[[Property:uuid|ce4da828-6772-e1c3-0917-82f6669cccf9]] -- Example of a lexical analyzer based on the Eiffel syntax. -- The analyzer itself is found in the file ``eiffel_lex'', which diff --git a/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffel-scan-console-output.wiki b/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffel-scan-console-output.wiki index da3536fd..109ac19c 100644 --- a/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffel-scan-console-output.wiki +++ b/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffel-scan-console-output.wiki @@ -1,5 +1,6 @@ [[Property:title|eiffel_scan console output]] [[Property:weight|3]] +[[Property:uuid|a233d1b0-b964-ba44-7b24-7204d9fa6932]] Scanning file `eiffel_scan.e'. diff --git a/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffel-scan-text.wiki b/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffel-scan-text.wiki index 5eb8af70..e94abcc7 100644 --- a/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffel-scan-text.wiki +++ b/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffel-scan-text.wiki @@ -1,5 +1,6 @@ [[Property:title|EIFFEL_SCAN Text]] [[Property:weight|1]] +[[Property:uuid|092bd183-2fc4-ae65-02b9-d66933492a50]] class diff --git a/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffellex-samples.wiki b/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffellex-samples.wiki index 9caf3c81..21389446 100644 --- a/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffellex-samples.wiki +++ b/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/eiffellex-samples.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelLex Samples]] [[Property:weight|0]] +[[Property:uuid|2e4911de-4838-00fc-1742-a8ebd1ae05ff]] diff --git a/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/index.wiki b/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/index.wiki index c09d00de..881fe0e5 100644 --- a/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/index.wiki +++ b/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/eiffel-scanner/index.wiki @@ -1,5 +1,6 @@ [[Property:title|Eiffel scanner]] [[Property:weight|0]] +[[Property:uuid|c0d6ad9d-2bac-c5ad-69b6-873db2e47aa9]] In the directory '''$ISE_EIFFEL/examples/lex''' you will find a system that scans Eiffel classes. It consists of the class [[EIFFEL_SCAN Text|EIFFEL_SCAN]] . It uses the file [[EiffelLex Samples|eiffel_regular]] as lexical grammar to analyze an Eiffel class passed on the command line. When compiling the example, the executable '''eiffel_scan(.exe)''' is created. Use the program as follows: diff --git a/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/index.wiki b/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/index.wiki index e0563a77..092ad494 100644 --- a/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/index.wiki +++ b/documentation/current/solutions/text-processing/eiffellex/eiffellex-sample/index.wiki @@ -1,6 +1,7 @@ [[Property:title|Lex Sample]] [[Property:link_title|EiffelLex Sample]] [[Property:weight|2]] +[[Property:uuid|79ad35f3-75a9-429c-ad47-f304fec23306]] * [[Eiffel scanner|Eiffel scanner]] diff --git a/documentation/current/solutions/text-processing/eiffellex/eiffellex-tutorial.wiki b/documentation/current/solutions/text-processing/eiffellex/eiffellex-tutorial.wiki index 6104111a..34d5e59f 100644 --- a/documentation/current/solutions/text-processing/eiffellex/eiffellex-tutorial.wiki +++ b/documentation/current/solutions/text-processing/eiffellex/eiffellex-tutorial.wiki @@ -1,6 +1,7 @@ [[Property:title|Lexical analysis: the Lex library]] [[Property:link_title|EiffelLex Tutorial]] [[Property:weight|0]] +[[Property:uuid|9ea43bef-1483-fbf2-4791-2be6a31d394d]] ==OVERVIEW== When analyzing a text by computer, it is usually necessary to split it into individual components or '''tokens'''. In human languages, the tokens are the words; in programming languages, tokens are the basic constituents of software texts, such as identifiers, constants and special symbols. diff --git a/documentation/current/solutions/text-processing/eiffellex/index.wiki b/documentation/current/solutions/text-processing/eiffellex/index.wiki index 451f202b..84791bd2 100644 --- a/documentation/current/solutions/text-processing/eiffellex/index.wiki +++ b/documentation/current/solutions/text-processing/eiffellex/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelLex Library]] [[Property:link_title|EiffelLex]] [[Property:weight|1]] +[[Property:uuid|52e88d58-1a02-d4e2-5503-e405253e7656]] Type: Library
Platform: Any
diff --git a/documentation/current/solutions/text-processing/eiffelparse/eiffelparse-tutorial.wiki b/documentation/current/solutions/text-processing/eiffelparse/eiffelparse-tutorial.wiki new file mode 100644 index 00000000..468898cf --- /dev/null +++ b/documentation/current/solutions/text-processing/eiffelparse/eiffelparse-tutorial.wiki @@ -0,0 +1,762 @@ +[[Property:title|Parsing: The Parse Library]] +[[Property:link_title|EiffelParse Tutorial]] +[[Property:weight|0]] +[[Property:uuid|b5861080-e5fd-dbb8-bf89-452915b3483e]] +==OVERVIEW== + +Parsing is the task of analyzing the structure of documents such as programs, specifications or other structured texts. + +Many systems need to parse documents. The best-known examples are compilers, interpreters and other software development tools; but as soon as a system provides its users with a command language, or processes input data with a non-trivial structure, it will need parsing facilities. + +This chapter describes the Parse library, which you can use to process documents of many different types. It provides a simple and flexible parsing scheme, resulting from the full application of object-oriented principles. + +Because it concentrates on the higher-level structure, the Parse library requires auxiliary mechanisms for identifying a document's lexical components: words, numbers and other such elementary units. To address this need it is recommended, although not required, to complement Parse with the Lex library studied in the previous chapter. + +Figure 1 shows the inheritance structure of the classes discussed in this chapter. + [[Image:figure1]] +Figure 1: Parse class structure + +==WHY USE THE PARSE LIBRARY== + +Let us fist look at the circumstances under which you may want - or not want - to use the Parse library. + +===The Parse library vs. parser generators=== + +Parsing is a heavily researched area of computing science and many tools are available to generate parsers. In particular, the popular Yacc tool, originally developed for Unix, is widely used to produce parsers. + +In some cases Yacc or similar tools are perfectly adequate. It is also sometimes desirable to write a special-purpose parser for a language, not relying on any parser generator. Several circumstances may, however, make the Parse library attractive: +* The need to interface the parsing tasks with the rest of an object-oriented system (such as a compiler or more generally a "document processor" as defined below) in the simplest and most convenient way. +* The desire to apply object-oriented principles as fully as possible to all aspects of a system, including parsing, so as to gain the method's many benefits, in particular reliability, reusability and extendibility. +* The need to tackle languages whose structure is not easily reconciled with the demands of common parser generator, which usually require the grammar to be LALR (1). (The Parse library uses a more tolerant LL scheme, whose only significant constraint is absence of left-recursivity; the library provides mechanisms to detect this condition, which is easy to correct.) +* The need to define several possible semantic treatments on the same syntactic structure. + +The last reason may be the most significant practical argument in favor of using Parse. Particularly relevant is the frequent case of a software development environment in which a variety of tools all work on the same basic syntactic structure. For example an environment supporting a programming language such as Pascal or Eiffel may include a compiler, an interpreter, a pretty-printer, software documentation tools (such as Eiffel's short and flat-short facilities), browsing tools and several other mechanisms that all need to perform semantic actions on software texts that have the same syntactic structure. With common parser generators such as Yacc, the descriptions of syntactic structure and semantic processing are inextricably mixed, so that you normally need one new specification for each tool. This makes design, evolution and reuse of specifications difficult and error-prone. + +In contrast, the Parse library promotes a specification style whereby syntax and semantics are kept separate, and uses inheritance to allow many different semantic descriptions to rely on the same syntactic stem. This will make Parse particularly appropriate in such cases. + +===A word of caution=== + +At the time of publication the Parse library has not reached the same degree of maturity as the other libraries presented in this book. It should thus be used with some care. You will find at the end of this chapter a few comments about the work needed to bring the library to its full realization. + +==AIMS AND SCOPE OF THE PARSE LIBRARY== + +To understand the Parse library it is necessary to appreciate the role of parsing and its place in the more general task of processing documents of various kinds. + +===Basic terminology=== + +First, some elementary conventions. The word '''document''' will denote the texts to be parsed. The software systems which perform parsing as part of their processing will be called '''document processors'''. + +Typical document processors are compilers, interpreters, program checkers, specification analyzers and documentation tools. For example the [BENCH] environment contains a number of document processors, used for compiling, documentation and browsing; the language to which they apply is either Eiffel itself or the Lace control language. + +===Parsing, grammars and semantics=== + +Parsing is seldom an end in itself; rather, it serves as an intermediate step for document processors which perform various other actions. + +Parsing takes care of one of the basic tasks of a document processor: reconstructing the logical organization of a document, which must conform to a certain '''syntax''' (or structure), defined by a '''grammar'''. + +{{note| '''Note''': the more complete name '''syntactic grammar''' avoids any confusion with the ''lexical'' grammars discussed in the [[Lexical analysis: the Lex library|previous chapter]] . By default, "grammar" with no further qualification will always denote a syntactic grammar. A syntactic grammar normally relies on a lexical grammar, which gives the form of the most elementary components - the tokens - appearing in the syntactic structure. }} + +Once parsing has reconstructed the structure of a document, the document processor will perform various operations on the basis of that structure. For example a compiler will generate target code corresponding to the original text; a command language interpreter will execute the operations requested in the commands; and a documentation tool such as the short and flat-short commands for Eiffel will produce some information on the parsed document. Such operations are called '''semantic actions'''. One of the principal requirements on a good parsing mechanism is that it should make it easy to graft semantics onto syntax, by adding semantic actions of many possible kinds to the grammar. + +The Parse library provides predefined classes which handle the parsing aspect automatically and provide the hooks for adding semantic actions in a straightforward way. This enables developers to write full document processors - handling both syntax and semantics - simply and efficiently. + +As noted at the beginning of this chapter, it is possible to build a single syntactic base and use it for several processors (such as a compiler and a documentation tool) with semantically different goals, such as compilation and documentation. In the Parse library the semantic hooks take the form of deferred routines, or of routines with default implementations which you may redefine in descendants. + +==LIBRARY CLASSES== + +The Parse library contains a small number of classes which cover common document processing applications. The classes, whose inheritance structure was shown at the beginning of this chapter, are: +* [[ref:/libraries/parse/reference/construct_chart|CONSTRUCT]] , describing the general notion of syntactical construct. +* [[ref:/libraries/parse/reference/aggregate_chart|AGGREGATE]] , describing constructs of the "aggregate" form. +* [[ref:/libraries/parse/reference/choice_chart|CHOICE]] , describing constructs of the "choice" form. +* [[ref:/libraries/parse/reference/repetition_chart|REPETITION]] , describing constructs of the "repetition" form. +* [[ref:/libraries/parse/reference/terminal_chart|TERMINAL]] , describing "terminal" constructs with no further structure. +* [[ref:/libraries/parse/reference/keyword_chart|KEYWORD]] , describing how to handle keywords. +* [[ref:/libraries/parse/reference/l_interface_chart|L_INTERFACE]] , providing a simple interface with the lexical analysis process and the Lex library. +* [[ref:/libraries/parse/reference/input_chart|INPUT]] , describing how to handle the input document. + +==EXAMPLES== +The EiffelStudio delivery includes (in the examples/library/parse subdirectory) a simple example using the Parse Library classes. The example is a processor for "documents" which describe computations involving polynomials with variables. The corresponding processor is a system which obtains polynomial specifications and variable values from a user, and computes the corresponding polynomials. +This example illustrates the most important mechanisms of the Parsing Library and provides a guide for using the facilities described in this chapter. The components of its grammar appear as illustrations in the next sections. + +==CONSTRUCTS AND PRODUCTIONS== + +A set of documents possessing common properties, such as the set of all valid Eiffel classes or the set of all valid polynomial descriptions, is called a '''language'''. + +In addition to its lexical aspects, the description of a language includes both syntactic and semantic properties. The grammar - the syntactic specification - describes the structure of the language (for example how an Eiffel class is organized into a number of clauses); the semantic specification defines the meaning of documents written in the language (for example the run-time properties of instances of the class, and the effect of feature calls). + +To discuss the Parse library, it is simpler to consider "language' as a purely syntactic notion; in other words, a language is simply the set of documents conforming to a certain syntactic grammar (taken here to include the supporting lexical grammar). Any semantic aspect will be considered to belong to the province of a specific document processor for the language, although the technique used for specifying the grammar will make it easy to add the specification of the semantics, or several alternative semantic specifications if desired. + +This section explains how you may define the syntactic base - the grammar. + +===Constructs=== + +A grammar consists of a number of '''constructs''', each representing the structure of documents, or document components, called the '''specimens''' of the construct. For example, a grammar for Eiffel will contain constructs such as Class, Feature_clause and Instruction. A particular class text is a specimen of construct Class. + +Each construct will be defined by a '''production''', which gives the structure of the construct's specimens. For example, a production for Class in an Eiffel grammar should express that a class (a specimen of the Class construct) is made of an optional Indexing part, a Class_header, an optional Formal_generics part and so on. The production for Indexing will indicate that any specimen of this construct - any Indexing part - consists of the keyword '''indexing''' followed by zero or more specimens of Index_clause. + +Although some notations for syntax descriptions such as BNF allow more than one production per construct, the Parse library relies on the convention that every construct is defined by '''at most one''' production. Depending on whether there is indeed such a production, the construct is either '''non-terminal''' or '''terminal''': +* A non-terminal construct (so called because it is defined in terms of others) is specified by a production, which may be of one of three types: aggregate, choice and repetition. The construct will accordingly be called an aggregate, choice or repetition construct. +* A terminal construct has no defining production. This means that it must be defined outside of the syntactical grammar. Terminals indeed come from the '''lexical grammar'''. Every terminal construct corresponds to a token type (regular expression or keyword) of the lexical grammar, for which the parsing duty will be delegated to lexical mechanisms, assumed in the rest of this chapter to be provided by the Lex library although others may be substituted if appropriate. + + +All specimens of terminal constructs are instances of class [[ref:/libraries/parse/reference/terminal_chart|TERMINAL]] . A special case is that of keyword constructs, which have a single specimen corresponding to a keyword of the language. For example, if is a keyword of Eiffel. Keywords are described by class [[ref:/libraries/parse/reference/keyword_chart|KEYWORD]] , an heir of [[ref:/libraries/parse/reference/terminal_chart|TERMINAL]] . + +The rest of this section concentrates on the parsing-specific part: non-terminal constructs and productions. Terminals will be studied in the discussion of how to interface parsing with lexical analysis. + +===Varieties of non-terminal constructs and productions=== + +An aggregate production defines a construct whose specimens are obtained by concatenating ("aggregating") specimens of a list of specified constructs, some of which may be optional. For example, the production for construct Conditional in an Eiffel grammar may read: +Conditional [=] if Then_part_list [Else_part] end + +This means that a specimen of Conditional (a conditional instruction) is made of the keyword if , followed by a specimen of Then_part_list, followed by zero or one specimen of Else_part (the square brackets represent an optional component), followed by the keyword end . + +{{note| '''Note''': this notation for productions uses conventions similar to those of the book Eiffel: The Language. Keywords are written in '''boldface italics''' and stand for themselves. Special symbols, such as the semicolon, are written in double quotes, as in ";". The [=] symbol means "is defined as" and is more accurate mathematically than plain =, which, however, is often used for this purpose (see "Introduction to the Theory of Programming Languages", Prentice Hall, 1991, for a more complete discussion of this issue). }} + +A choice production defines a construct whose specimens are specimens of one among a number of specified constructs. For example, the production for construct Type in an Eiffel grammar may read: +Type [=] Class_type | Class_type_expanded | Formal_generic_name | Anchored | Bit_type + +This means that a specimen of Type is either a specimen of Class_type, or a specimen of Class_type_expanded etc. + +Finally, a repetition production defines a construct whose specimens are sequences of zero or more specimens of a given construct (called the '''base''' of the repetition construct), separated from each other by a '''separator'''. For example, the production for construct Compound in an Eiffel grammar may read +Compound [=] {Instruction ";" ...} + +This means that a specimen of Compound is made of zero or more specimens of Instruction, each separated from the next (if any) by a semicolon. + +These three mechanisms - aggregate, choice and repetition - suffice to describe the structure of a wide array of practical languages. Properties which cannot be handled by them should be dealt with through '''semantic actions''', as explained below. + +===An example grammar=== + +The example directory included in the delivery implements a processor for a grammar describing a simple language for expressing polynomials. A typical "document" in this language is the line + +x; y: x * (y + 8 - (2 * x)) + +The beginning of the line, separated from the rest by a colon, is the list of variables used in the polynomial, separated by semicolons. The rest of the line is the expression defining the polynomial. + +Using the conventions defined above, the grammar may be written as: + +Line [=] Variables ":" Sum +Variables [=] {Identifier ";" ...} +Sum [=] {Diff "+" ...} +Diff [=] {Product "-" ...} +Product [=] {Term " * " ...} +Term [=] Simple_var Int_constant Nested +Nested [=] "(" Sum ")" + + +This grammar assumes a terminal Identifier, which must be defined as a token type in the lexical grammar. The other terminals are keywords, shown as strings appearing in double quotes, for example "+". + +==PARSING CONCEPTS== + +The Parse library supports a parsing mechanism based on the concepts of object-oriented software construction. + +===Class CONSTRUCT=== + +The deferred class [[ref:/libraries/parse/reference/construct_chart|CONSTRUCT]] describes the general notion of construct; instances of this class and its descendants are specimens of the constructs of a grammar. + +Deferred though it may be, [[ref:/libraries/parse/reference/construct_chart|CONSTRUCT]] defines some useful general patterns; for example, its procedure process appears as:
+ + parse + if parsed then + semantics + end + +
+where procedures parse and semantics are expressed in terms of some more specific procedures, which are deferred. This defines a general scheme while leaving the details to descendants of the class. + +Such descendants, given in the library, are classes [[ref:/libraries/parse/reference/aggregate_chart|AGGREGATE]] , [[ref:/libraries/parse/reference/choice_chart|CHOICE]] , [[ref:/libraries/parse/reference/repetition_chart|REPETITION]] and [[ref:/libraries/parse/reference/terminal_chart|TERMINAL]] . They describe the corresponding types of construct, with features providing the operations for parsing their specimens and applying the associated semantic actions. + +===Building a processor=== + +To build a processor for a given grammar, you write a class, called a '''construct class''', for every construct of the grammar, terminal or non-terminal. The class should inherit from [[ref:/libraries/parse/reference/aggregate_chart|AGGREGATE]] , [[ref:/libraries/parse/reference/choice_chart|CHOICE]] , [[ref:/libraries/parse/reference/repetition_chart|REPETITION]] or [[ref:/libraries/parse/reference/terminal_chart|TERMINAL]] depending on the nature of the construct. It describes the production for the construct and any associated semantic actions. + +To complete the processor, you must choose a "top construct" for that particular processor, and write a root class. In accordance with the object-oriented method, which implies that "roots" and "tops" should be chosen last, these steps are explained at the end of this chapter. + +The next sections explain how to write construct classes, how to handle semantics, and how to interface parsing with the lexical analysis process. All these tasks rely on a fundamental data abstraction, the notion of '''abstract syntax tree'''. + +===Abstract syntax trees=== + +The effect of processing a document with a processor built from a combination of construct classes is to build an abstract syntax tree for that document, and to apply any requested semantic actions to that tree. + +The syntax tree is said to be abstract because it only includes important structural information and does not retain the concrete information such as keywords and separators. Such concrete information, sometimes called "syntactic sugar", serves only external purposes but is of no use for semantic processing. + +The combination of Eiffel techniques and libraries yields a very simple approach to building and processing abstract syntax trees. Class [[ref:/libraries/parse/reference/construct_chart|CONSTRUCT]] is a descendant of the Data Structure Library class [[ref:/libraries/base/reference/two_way_tree_chart|TWO_WAY_TREE]] , describing a versatile implementation of trees; so, as a consequence, are [[ref:/libraries/parse/reference/construct_chart|CONSTRUCT's]] own descendants. The effect of parsing any specimen of a construct is therefore to create an instance of the corresponding construct class. This instance is (among other things) a tree node, and is automatically inserted at its right place in the abstract syntax tree. + +As noted in the discussion of trees, class [[ref:/libraries/base/reference/two_way_tree_chart|TWO_WAY_TREE]] makes no formal distinction between the notions of tree and tree node. So you may identify the abstract syntax tree with the object (instance of [[ref:/libraries/parse/reference/construct_chart|CONSTRUCT]] ) representing the topmost construct specimen in the structure of the document being analyzed. + +===The production function=== + +A construct class describes the syntax of a given construct through a function called production, which is a direct representation of the corresponding production. This function is declared in CONSTRUCT as + + production: LINKED_LIST [CONSTRUCT] is + -- Right-hand side of the production for the construct + deferred + end + + +Function production remains deferred in classes [[ref:/libraries/parse/reference/aggregate_chart|AGGREGATE]] , [[ref:/libraries/parse/reference/choice_chart|CHOICE]] and [[ref:/libraries/parse/reference/repetition_chart|REPETITION]] . Every effective construct class that you write must provide an effecting of that function. It is important for the efficiency of the parsing process that every effective version of production be a Once function. Several examples of such effectings are given below. + +Classes [[ref:/libraries/parse/reference/aggregate_chart|AGGREGATE]] , [[ref:/libraries/parse/reference/choice_chart|CHOICE]] , [[ref:/libraries/parse/reference/repetition_chart|REPETITION]] and [[ref:/libraries/parse/reference/terminal_chart|TERMINAL]] also have a deferred function construct_name of type STRING, useful for tracing and debugging. This function should be effected in every construct class to return the string name of the construct, such as "INSTRUCTION" or "CLASS" for construct classes in a grammar of Eiffel. For efficiency reasons, the construct_name function should also be a Once function. The form of such a function will always be the same, as illustrated by the following example which may appear in the construct class INSTRUCTION in a processor for Eiffel: + + construct_name: STRING is + -- Symbolic name of the construct + once + Result := "INSTRUCTION" + end + + +The examples of the next few sections, which explain how to write construct classes, are borrowed from the small "Polynomial" language mentioned above, which may be found in the examples directory in the ISE Eiffel delivery. + +==PREPARING GRAMMARS== + +Having studied the Parse library principles, let us see how to write grammar productions for various kinds of construct. The main task is to write the production function for each construct class. + +The production function for a descendant of [[ref:/libraries/parse/reference/aggregate_chart|AGGREGATE]] will describe how to build a specimen of the corresponding function from a sequence of specimens of each of the constituent constructs. Writing this function from the corresponding production is straightforward. + +As an example, consider the production function of class LINE for the Polynomial example language. The corresponding production is
+ +Line [=] Variables ":" Sum + +
+where Variables and Sum are other constructs, and the colon ":" is a terminal. This means that every specimen of Line consists of a specimen of Variables, followed by a colon, followed by a specimen of Sum. + +Here is the corresponding production function as it appears in class LINE: + + production: LINKED_LIST [CONSTRUCT] is + local + var: VARIABLES + sum: SUM + once + create Result.make + Result.forth + create var.make + put (var) + keyword (":") + create sum.make + put (sum) + end + + +As shown by this example, the production function for an aggregate construct class should declare a local entity (here var and sum ) for each non-keyword component of the right-hand side, the type of each entity being the corresponding construct class (here VARIABLES and SUM). + +The body of the function should begin with + + create Result.make + Result.forth + +to create the object containing the result. Then for each non-keyword component, represented by the local entity component (this applies to var and sum in the example), there should be a sequence of two instructions, of the form + + create component.make + put (component) + + +For any keyword of associated string ''symbol'', such as the colon ":" in the example, there should be a call to + + keyword (symbol) + + +The order of the various calls to put (for non-keywords) and keyword (for keywords) must be the order of the components in the production. Also, every create component . make instruction must occur before the corresponding call to put ( symbol ) . + +All components in the above example are required. In the general case an aggregate production may have optional components. To signal that a component component of the right-hand side is optional, include a call of the form + + component.set_optional + + +This call may appear anywhere after the corresponding create component instruction. The recommended place is just after the call to put, as in + + create component + put (symbol) + component.set_optional + + +===Choices=== + +The production function for a descendant of CHOICE will describe how to build a specimen of the corresponding function as a specimen of one of the alternative constructs. + +As an example, consider the production function of class TERM for the Polynomial example language. The corresponding production is +Term [=] Simple_var Poly_integer Nested +
+where Simple_var, Poly_integer and Nested are other constructs. This means that every specimen of Term consists of one specimen of any one of these three constructs. Here is the corresponding production function as it appears in class TERM: + + production: LINKED_LIST [CONSTRUCT] is + local + id: SIMPLE_VAR + val: POLY_INTEGER + nest: NESTED + once + create Result.make + Result.forth + createid.make + put (id) + create val.make + put (val) + create nest.make + put (nest) + end + + +As shown by this example, the production function for a choice construct class must declare a local entity - here id , val and nest - for each alternative component of the right-hand side. The type of each entity is the corresponding construct class - here SIMPLE_VAR, POLY_INTEGER and NESTED. + +The body of the function must begin by + + create Result.make + Result.forth + + +Then for each alternative component represented by a local entity component (in the example this applies to id , val and nest ) there should be two instructions of the form + + create component.make + put (component) + + +{{note| '''Caution''': the order of the various calls to put is irrelevant in principle. When a document is parsed, however, the choices will be tried in the order given; so if you know that certain choices occur more frequently than others it is preferable to list them first to speed up the parsing process. }} + +===Repetitions=== + +The production function for a descendant of [[ref:/libraries/parse/reference/repetition_chart|REPETITION]] will describe how to build a specimen of the corresponding function as a sequence or zero or more (or, depending on the grammar, one or more) specimens of the base construct. The class must also effect a feature separator of type STRING, usually as a constant attribute. (This feature is introduced as deferred in class [[ref:/libraries/parse/reference/repetition_chart|REPETITION]] .) + +As an example, consider the construct Variables in the Polynomial example language. The right-hand side of the corresponding production is
+Variables [=] {Identifier ";" ...} +
+where Identifier is another construct, and the semicolon ";" is a terminal. This means that every specimen of Variables consists of zero or more specimens of Identifier, separated from each other (if more than one) by semicolons. + +Here are the corresponding production function and separator attribute as they appear in class VARIABLES: + + production: LINKED_LIST [IDENTIFIER] is + local + base: VAR + once + create Result.make + Result.forth + create base.make + put (base) + end + + +As shown by this example, function production is built along the same ideas as for aggregates and choices, except that here only one component, base , is required; its type must be the class corresponding to the construct serving as the base of the repetition, VAR in the example. + +==INTERFACE TO LEXICAL ANALYSIS== + +One more type of construct class remains to be discussed: terminal construct classes. Since terminal constructs serve to elevate lexical tokens (regular expressions and keywords) to the dignity of syntactical construct, we must first take a look at how the Parse library classes collaborate with their counterparts in the Lex library. + +===The notion of lexical interface class=== + +To parse a document, you need to get tokens from a lexical analyzer. This is achieved by making some construct classes, in particular those describing terminals, descendants of one of the lexical classes. + +The best technique is usually to write a class covering the lexical needs of the language at hand, from which all construct classes that have some lexical business will inherit. Such a class is called a lexical interface class. + +Lexical interface classes usually follow a common pattern. To take advantage of this uniformity, the Parse library includes a deferred class L_INTERFACE which describes that pattern. Specific lexical interface classes may be written as descendants of L_INTERFACE. + +L_INTERFACE is a simple deferred class, with a deferred procedure obtain_analyzer. It is an heir of METALEX. +===Obtaining a lexical analyzer=== + +An effective descendant of [[ref:/libraries/parse/reference/l_interface_chart|L_INTERFACE]] must define procedure obtain_analyzer so that it records into the lexical analyzer the regular expressions and keywords of the language at hand. In writing obtain_analyzer you may use any one of three different techniques, each of which may be the most convenient depending on the precise context, to obtain the required lexical analyzer: +* You may build the lexical analyzer by defining its regular expressions one by one, using the procedures described in the presentation of METALEX, in particular put_expression and put_keyword. +* You may use use procedure retrieve_analyzer from METALEX to retrieve an analyzer which a previous session saved into a file. +* Finally, you may write a lexical grammar file (or reuse an existing one) and process it on the spot by using procedure read_grammar from METALEX. + + +===A lexical interface class=== + +An example of a lexical interface class is POLY_LEX for the Polynomial example language. Here is the complete text of that class: + + indexing + description: "Lexical interface class for the Polynomial language" + + class + POLY_LEX + + inherit + L_INTERFACE + + CONSTANTS + undefine + consistent, + copy, + is_equal, + setup + end + + feature {NONE} + + obtain_analyzer is + -- Create lexical analyzer for the Polynomial language + do + ignore_case + keywords_ignore_case + build_expressions + build_keywords + set_separator_type (blanks) + end + + build_expressions is + -- Define regular expressions + -- for the Polynomial language + do + put_expression (special_expression, special, "Special") + put_expression ("*('a'..'z')", simple_identifier, "Simple_identifier") + put_expression ("+('0'..'9')", integer_constant, "Integer_constant") + put_expression ("+('\t'|'\n'|' ')", blanks, "Blanks") + end + + special_expression: STRING is + -- Regular expression describing Special + once + create Result.make (80) + Result.append ("('\050'..'\057')|") + Result.append ("('\072'..'\076')|") + Result.append ("'['|']'|'|'|'{'|'}'|%"->%"|%":=%"") + end + + build_keywords is + -- Define keywords (special symbols) + -- for the Polynomial language + do + put_keyword ("+", special) + put_keyword ("-", special) + put_keyword (";", special) + put_keyword (":", special) + put_keyword ("(", special) + put_keyword (")", special) + put_keyword ("*", special) + end + end + + +This class illustrates the straightforward scheme for writing lexical interface classes. It introduces constants such as Special to represent the regular expressions supported, and effects procedure obtain_analyzer. The role of this procedure is to define lexical conventions (here through calls to ignore_case and keywords_ignore_case), to record the regular expressions (through calls to put_expression, packaged in a procedure build_expressions for clarity), and records the keywords (through calls to put_keyword, packaged in build_keywords). + +All the classes of a document processor that need to interact with the lexical analysis should inherit from a lexical interface class such as POLY_LEX. This is true in particular of the root class of a processor, as discussed below. + +===More on terminal constructs=== + +Terminal construct classes are examples of classes that need to interact with the lexical analysis, and should thus inherit from the lexical interface class. + +Class TERMINAL includes a deferred function token_type of type INTEGER. Every effective descendant of TERMINAL should effect this feature as a constant attribute, whose value is the code for the associated regular expression, obtained from the lexical interface class. As every other construct class, such a descendant should also effect construct_name as a Once function. For example, in the Polynomial language, class INT_CONSTANT has the following text: + + class + INT_CONSTANT + + inherit + TERMINAL + + CONSTANTS + + feature + + token_type: INTEGER is + do + Result := integer_constant + end + + feature {NONE} + + construct_name: STRING is + once + Result := "INT_CONSTANT" + end + end + + +==SPECIFYING THE SEMANTICS== + +As mentioned at the beginning of this chapter, parsing is usually done not for itself but as a way to perform some semantic processing. The Parsing Library classes define the general framework for grafting such semantics onto a syntactical stem. + +===Semantic procedures=== + +The principal procedures for defining semantic actions are pre_action and post_action. These are features of class CONSTRUCT. Procedure pre_action describes the actions to be performed before a construct has been recognized; post_action, the actions to be performed after a construct has been recognized. + +As defined in CONSTRUCT, both and post_action do nothing by default. Any construct class which is a descendant of CONSTRUCT may redefine one or both so that they will perform the semantic actions that the document processor must apply to specimens of the corresponding construct. These procedures are called automatically during processing, before and after the corresponding structures have been parsed. + +For TERMINAL, only one semantic action makes sense. To avoid any confusion, post_action is renamed action in that class and pre_action is renamed unused_pre_action to indicate that it is irrelevant. + +Often, the semantic procedures need to compute various elements of information. These may be recorded using appropriate attributes of the corresponding construct classes. + +{{note| '''Note''': readers familiar with the theory of parsing and compiling will see that this scheme, using the attributes of Eiffel classes, provides a direct implementation of the "attribute grammar" mechanism. }} + +===Polynomial semantics=== + +As an example let us examine the semantics of the Product construct for the polynomial language. It is a repetition construct, with Term as the base construct; in other words a specimen of Product is a sequence of one or more terms, representing the product term 1 * term 2 ... * term n. Here is the post_action procedure in the corresponding class PRODUCT: + + post_action is + local + int_value: INTEGER + do + if not no_components then + from + child_start + if not child_after then + int_value := 1 + end + until + child_after + loop + child.post_action + int_value := int_value * info.child_value + child_forth + end + info.set_child_value (int_value) + end + end + + +Here each relevant construct class has an attribute info used to record the semantic information associated with polynomials and their components, such as child_value, an INTEGER. The post_action takes care of computing the product of all child_values for the children. First, of course, post_action must recursively be applied to each child, to compute its own child_value. + +{{note| '''Note''': recall that an instance of CONSTRUCT is also a node of the abstract syntax tree, so that all the TWO_WAY_TREE features such as child_value, child_start, child_after and many others are automatically available to access the syntactical structure. }} + +===Keeping syntax and semantics separate=== + +For simple examples such as the Polynomial language, it is convenient to use a single class to describe both the syntax of a construct (through the production function and associated features) and its semantics (action routines and associated features). + +For more ambitious languages and processors, however, it is often preferable to keep the two aspects separate. Such separation of syntax and semantics, and in particular the sharing of the same syntax for different processors with different semantic actions, is hard or impossible to obtain with traditional document processing tools such as Yacc on Unix. Here is how to achieve it with the Parse library: +* First write purely '''syntactic classes''', that is to say construct classes which only effect the syntactical part (in particular function production). As a consequence, these classes usually remain deferred. The recommended convention for such syntactic classes is to use names beginning with S_, for example S_INSTRUCTION or S_LOOP. +* Then for each construct for which a processor defines a certain semantics, define another class, called a '''semantic class''', which inherits from the corresponding syntactic class. The recommended convention for semantic classes is to give them names which directly reflect the corresponding construct name, as in INSTRUCTION or LOOP. + + +To build a semantic class in in step 2 it is often convenient to use multiple inheritance from a syntactic class and a "semantics-only" class. For example in a processor for Eiffel class INSTRUCTION may inherit from both IS_INSTRUCTION and from a semantics-only class INSTRUCTION_PROPERTIES which introduces the required semantic features. + +One of the advantages of this scheme is that it makes it easy to associate two or more types of processing with a single construct, by keeping the same syntactic class (such as IS_INSTRUCTION) but choosing a different pure-semantics class each time. + +As noted earlier in this chapter, this is particularly useful in an environment where different processors need to perform differents actions on specimens of the same construct. In an Eiffel environment, for example, processors that manipulate classes and other Eiffel construct specimens may include a compiler, an interpreter, a flattener (producing the flat form), a class abstracter (producing the short or flat-short form), and various browsing tools such as those of ISE Eiffel. + +For obvious reasons of convenience and ease of maintenance, it is desirable to let these processors share the same syntactic descriptions. The method just described, relying on multiple inheritance, achieves this goal. + +==HOW PARSING WORKS== + +Classes AGGREGATE, CHOICE, TERMINAL and REPETITION are written in such a way that you do not need to take care of the parsing process. They make it possible to parse any language built according to the rules given - with one limitation, left recursion, discussed below. You can then concentrate on writing the interesting part - semantic processing. + +To derive the maximum benefit from the Parse library, however, it is useful to gain a little more insight into the way parsing works. Let us raise the veil just enough to see any remaining property that is relevant to the building of parsers and document processors. + +===The parsing technique=== + +The Parse library relies on a general approach known as '''recursive descent''', meaning that various choices will be tried in sequence and recursively to recognize a certain specimen. + +If a choice is attempted and fails (because it encounters input that does not conform to what is expected), the algorithm will try remaining choices, after having moved the input cursor back to where it was before the choice that failed. This process is called '''backtracking'''. It is handled by the parsing algorithms in an entirely automatic fashion, without programmer intervention. + +===Left recursion=== + +Recursive descent implies the danger of infinite looping when parsing is attempted for left-recursive productions of the form
+A [=] A ... +
+or, more generally, cases in which the left recursion is indirect, as in
+ A [=] B ... +B [=] C ... +... +L [=] A ... + + + +Direct left recursion is easy to avoid, but indirect recursion may sneak in in less trivial ways. + +To determine whether the production for a construct is directly or indirectly left-recursive, use the query left_recursion from class CONSTRUCT. + +===Backtracking and the commit procedure=== + +Another potential problem may arise from too much backtracking. In contrast with left recursion, this is a performance issue, not a threat to the correctness of the parsing algorithm. Automatic backtracking is in fact essential to the generality and flexibility of the recursive descent parsing algorithm; but too much of it may degrade the efficiency of the parsing mechanism. + +Two techniques are available to minimize backtracking. One, mentioned above, is to organize the production functions for choice construct classes so that they list the most frequent cases first. The other is to use the commit procedure in the production functions for aggregate constructs. + +A call to commit in an aggregate A is a hint to the parser, which means: +"If you get to this point in trying to recognize a specimen of A +as one among several possible choices for a choice construct C, +and you later fail to obtain an A, then forget about other choices +for C: you won't be able to find a C here. You may go back to the +next higher-level choice before C - or admit failure if there is +no such choice left." + +Such a hint is useful when you want to let the parser benefit from some higher-level knowledge about the grammar, which is not directly deducible from the way the productions have been written. + +Here is an example. The production function for NESTED in the Polynomial language, which attempts to parse specimens of the form
+(s) +where ''s'' is a specimen of SUM, is written as + + production: LINKED_LIST [CONSTRUCT] is + local + expression: SUM + once + create Result.make + Result.forth + keyword ("(") + commit + create expression.make + put (expression) + keyword (")") + end + + + +The commit after the recognition of the keyword "(" is there to use the following piece of higher-level knowledge: +No choice production of the grammar that has NESTED +as one of its alternatives has another alternative construct whose +specimens could begin with an opening parenthesis "(". + +Because of this property, if the parser goes so far as to recognize an opening parenthesis as part of parsing any construct C for which NESTED is an alternative, but further tokens do not match the structure of NESTED specimens, then we will have failed to recognize not only a NESTED but also a C. + +{{note| '''Note''': some readers will have recognized commit as being close to the Prolog "cut" mechanism. }} + +In this example, NESTED is used in only one right-hand side production: the choice production for TERM, for which the other alternatives are SIMPLE_VAR and POLY_INTEGER, none of whose specimens can include an opening parenthesis. + +The use of commit assumes global knowledge about the grammar and its future extensions, which is somewhat at odds with the evolutionary approach suggested by the Eiffel method. Applied improperly, this mechanism could lead to the rejection of valid texts as invalid. Used with care, however, it helps in obtaining high-performance parsing without impairing too much the simplicity of preparing parsers and other document processors. + +==BUILDING A DOCUMENT PROCESSOR== + +We are ready now to put together the various elements required to build a document processor based on the Parse library. + +===The overall picture=== + +The documents to be processed will be specimens of a certain construct. This construct is called the '''top construct''' for that particular processing. + +{{warning| '''Caution''': be sure to note that with the Parse library there is no room for a concept of top construct of a '''grammar''': the top construct is only defined with respect to a particular processor for that grammar.
+Attempting to define the top of a grammar would be contrary to the object-oriented approach, which de-emphasizes any notion of top component of a system.
+Different processors for the same grammar may use different top constructs. }} + +A document processor will be a particular system made of construct classes, complemented by semantic classes, and usually by other auxiliary classes. One of the construct classes corresponds to the top construct and is called the '''top construct class'''. + +{{note| '''Note''': this notion of top construct class has a natural connection to the notion of root class of a system, as needed to get executable software. The top construct class could indeed be used as root of the processor system. In line with the previous discussion, however, it appears preferable to keep the top construct class (which only depends on the syntax and remains independent of any particular processor) separate from the system's root class. With this approach the root class will often be a descendant of the top construct class.
+This policy was adopted for the Polynomial language example as it appears in the delivery: the processor defined for this example uses LINE as the top construct class; the root of the processor system is a class PROCESS, which inherits from LINE. }} + +===Steps in the execution of a document processor=== + +As any root class of a system, the root of a document processor must have a creation procedure which starts the execution. Here the task of this class is the following: +# Define an object representing the input document to be processed; this will be an instance of class INPUT. +# Obtain a lexical analyzer applicable to the language, and connect it with the document. +# Select an input file, containing the actual document to be processed. +# Process the document: in other words, parse it and, if parsing is successful, apply the semantics. +# To execute these steps in a simple and convenient fashion, it is useful to declare the root class as a descendant of the lexical interface class. The root class, being an heir to the top construct class, will also be a descendant of CONSTRUCT. + + +===Connecting with lexical analysis=== + +To achieve the effect of steps [[#step_e1|1]] and [[#step_e2|2]] , a simple call instruction suffices: just call the procedure build, inherited from L_INTERFACE using as argument document, a feature of type INPUT, obtained from METALEX (the lexical analyzer generator class) through L_INTERFACE. The call, then, is just: + + build (document) + + +Although you may use this line as a recipe with no need for further justification, it is interesting to see what build does. Feature document describes the input document to be processed; it is introduced as a Once function in class CONSTRUCT to ensure that all instances of CONSTRUCT share a single document - in other words, that all processing actions apply to the same document. The text of build is: + + build (doc: INPUT) is + -- Create lexical analyzer and set doc + -- to be the input document. + require + document_exists: doc /= void + do + metalex_make + obtain_analyzer + make_analyzer + doc.set_lexical (analyzer) + end + + +The call to obtain_analyzer defines the regular grammar for the language at hand. Recall that obtain_analyzer is deferred in L_INTERFACE; its definition for the POLY_LEX example was given above. The call to make_analyzer freezes the regular grammar and produces a usable lexical analyzer, available through the attribute analyzer obtained from METALEX. Finally, the call to set_lexical, a procedure of class INPUT, ensures that all lexical analysis operations will use analyzer as the lexical analyzer. + +===Starting the actual processing=== + +The call build ( document takes care of steps [[#step_e1|1]] and [[#step_e2|2]] of the root's creation procedure. Step [[#step_e3|3]] selects the file containing the input document; this is achieved through the call
+ + document.set_input_file (some_file_name) + +
+where set_input_file, from class INPUT, has a self-explanatory effect. + +Finally, step [[#step_e4|4]] (processing the document) is simply a call to procedure process, obtained from [[ref:/libraries/parse/reference/construct_chart|CONSTRUCT]] . Recall that this procedure simply executes
+ + parse + if parsed then + semantics + end + +
+ +===The structure of a full example=== + +The polynomial example provides a simple example of a full document processor, which you may use as a guide for your own processors. The root class of that example is PROCESS. Its creation procedure, make, follows the above scheme precisely; here is its general form: + + root_line: LINE + + make is + local + text_name: STRING + do + create root_line.make + build (root_line.document) + + ... Instructions prompting the user for the name of the + file to be parsed, and assigning it to text_name ... + + root_line.document.set_input_file (text_name) + root_line.process + end + + +Although it covers a small language, this example may serve as a blueprint for most applications of the Parse library. + +==FUTURE WORK== + +It was mentioned at the beginning of this chapter that further work is desirable to make the Parse library reach its full bloom. Here is a glimpse of future improvements. + +===Expressions=== + +Many languages include an expression construct having the properties of traditional arithmetic expressions: +* An expression is a succession of basic operands and operators. +* The basic operands are lexical elements, such as identifiers and constants. +* Operators are used in prefix mode (as in ''- a'') or infix mode (as in ''b - a''). +* Each operator has a precedence level; precedence levels determine the abstract syntactic structure of expressions and consequently their semantics. For example the abstract structure of ''a + b * c'' shows this expression to be the application of the operator ''+'' to ''a'' and to the application of the operator ''*'' to ''b'' and ''c''. That this is the correct interpretation of the instruction follows from the property that ''*'' has a higher precedence ("binds more tightly") than ''+''. +* Parentheses pairs, such as ( ) or [ ], can be used to enforce a structure different from what the precedence rules would imply, as in ''(a + b) * c''. +* Some infix operators may be applied to more than two arguments; in this case it must be clear whether they are right-associative (in other words, ''a ^ b ^ c'' means ''a ^ (b ^ c)'', the conventional interpretation if ^ denotes the power operator) or left-associative. + + +It is of course possible to apply the Parse library in its current state to support expressions, as illustrated by this extract from the Polynomial grammar given in full above: + +Variables [=] {Identifier ";" ...} +Sum [=] {Diff "+" ...} +Diff [=] {Product "-" ...} +Product [=] {Term "*" ...} + + +The problem then is not expressiveness but efficiency. For such expressions the recursive descent technique, however well adapted to the higher-level structures of a language, takes too much time and generates too many tree nodes. Efficient bottom-up parsing techniques are available for this case. + +The solution is straightforward: write a new heir EXPRESSION to class CONSTRUCT. The preceding discussion of expressions and their properties suggests what kinds of feature this class will offer: define a certain terminal as operator, define a terminal as operand type, set the precedence of an operator, set an operator as left-associative or right-associative and so on. Writing this class based on this discussion is indeed a relatively straightforward task, which can be used as a programming exercise. + +Beyond the addition of an EXPRESSION class, some changes in the data structures used by Parse may also help improve the efficiency of the parsing process. + +===Yooc=== + +To describe the syntax of a language, it is convenient to use a textual format such as the one that has served in this chapter to illustrate the various forms of production. The correspondence between such a format and the construct classes is straightforward; for example, as explained above, the production
+Line [=] Variables ":" Sum +
+will yield the class + + class LINE inherit + AGGREGATE + feature + production: LINKED_LIST [CONSTRUCT] is + local + var: VARIABLES + sum: SUM + once + create Result.make + Result.forth + create var.make + put (var) + keyword (":") + create sum.make + put (sum) + end + ... + end + + +This transformation of the textual description of the grammar into its equivalent Eiffel form is simple and unambiguous; but it is somewhat annoying to have to perform it manually. + +A tool complementing the Parse library and known as YOOC ("Yes! an Object-Oriented Compiler", a name meant as an homage to the venerable Yacc) has been planned for future releases of Parse. Yooc, a translator, will take a grammar specification as input and transform it into a set of parsing classes, all descendants of CONSTRUCT and built according to the rules defined above. The input format for syntax specification, similar to the conventions used throughout this chapter, is a variant of LDL (Language Description Language), a component of the ArchiText structural document processing system. + +===Further reading=== + +The following article describes some advanced uses of the Parse library as well as a Yooc-like translator called PG: Per Grape and Kim Walden: Automating the Development of Syntax Tree Generators for an Evolving Language, in Proceedings of TOOLS 8 (Technology of Object-Oriented Languages and Systems), Prentice Hall, 1992, pages 185-195. + + + + + + + + + diff --git a/documentation/current/solutions/text-processing/eiffelparse/index.wiki b/documentation/current/solutions/text-processing/eiffelparse/index.wiki index d2c70c95..b3bf6aaf 100644 --- a/documentation/current/solutions/text-processing/eiffelparse/index.wiki +++ b/documentation/current/solutions/text-processing/eiffelparse/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelParse Library]] [[Property:link_title|EiffelParse]] [[Property:weight|5]] +[[Property:uuid|0984d15a-6ee9-3bd4-71d6-31df2987af3a]] Type: Library
Platform: Any
diff --git a/documentation/current/solutions/text-processing/eiffelparse/parse-sample/eiffel-polynomial-parser.wiki b/documentation/current/solutions/text-processing/eiffelparse/parse-sample/eiffel-polynomial-parser.wiki index 40e623af..aed14b08 100644 --- a/documentation/current/solutions/text-processing/eiffelparse/parse-sample/eiffel-polynomial-parser.wiki +++ b/documentation/current/solutions/text-processing/eiffelparse/parse-sample/eiffel-polynomial-parser.wiki @@ -1,5 +1,6 @@ [[Property:title|Eiffel polynomial parser]] [[Property:weight|0]] +[[Property:uuid|63f0e737-4ad7-c574-3bbc-05e005815785]] In the directory '''$ISE_EIFFEL/examples/parse''' you will find a system that implements a processor for a grammar describing a simple language for expressin polynomials. A typical document in this language is the line x;y: x * (y + 8 - (2 * x)) The beginning of the line, separated from the rest by a colon, is the list of variables used in the polynomial, separated by semicolons. The rest of the line is the expression defining the polynomial. The grammar can be described with the following grammar: diff --git a/documentation/current/solutions/text-processing/eiffelparse/parse-sample/index.wiki b/documentation/current/solutions/text-processing/eiffelparse/parse-sample/index.wiki new file mode 100644 index 00000000..d2b033b7 --- /dev/null +++ b/documentation/current/solutions/text-processing/eiffelparse/parse-sample/index.wiki @@ -0,0 +1,8 @@ +[[Property:title|Parse Sample]] +[[Property:weight|2]] +[[Property:uuid|ad48d4f5-a113-65f7-15fc-8c8fd3f5c284]] +* [[Eiffel polynomial parser|Eiffel polynomial parser]] + + + + diff --git a/documentation/current/solutions/text-processing/index.wiki b/documentation/current/solutions/text-processing/index.wiki index 1116ea53..14ad28ba 100644 --- a/documentation/current/solutions/text-processing/index.wiki +++ b/documentation/current/solutions/text-processing/index.wiki @@ -2,13 +2,13 @@ [[Property:weight|-6]] [[Property:uuid|e74b5b47-d87d-2eb0-49ba-981dae52d338]] == Text processing (Lexical analysis and parsing) == -* EiffelLex http://ise181.ise/book/documentation/eiffellex-library -** EiffelLex tutorial http://ise181.ise/book/documentation/lexical-analysis-lex-library +* [[EiffelLex Library|EiffelLex]] +** [[Lexical analysis: the Lex library|EiffelLex tutorial]] ** EiffelLex class reference -** EiffelLex samples http://ise181.ise/book/documentation/lex-sample -* EiffelParse http://ise181.ise/book/documentation/eiffelparse-library -** EiffelParse tutorial http://ise181.ise/book/documentation/parsing-parse-library +** [[Lex Sample|EiffelLex samples]] +* [[EiffelParse Library|EiffelParse]] +** [[Parsing: The Parse Library|EiffelParse tutorial]] ** EiffelParse class reference -** EiffelParse samples http://ise181.ise/book/documentation/parse-sample +** [[Parse Sample|EiffelParse samples]] diff --git a/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-sample/eiffelweb-basic-sample.wiki b/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-sample/eiffelweb-basic-sample.wiki index 60e2f38e..2249ade8 100644 --- a/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-sample/eiffelweb-basic-sample.wiki +++ b/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-sample/eiffelweb-basic-sample.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelWeb Basic Sample]] [[Property:weight|0]] +[[Property:uuid|da8f72cb-0ecd-464a-a558-cbf7d24301e3]] This sample shows how to retrieve and display information from a basic form on a web page. {{note| '''Note:''' This sample requires a web server supporting CGI in order to be run. Both the Internet Information Services web server from Microsoft and the GNU Apache server may be used. diff --git a/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-sample/index.wiki b/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-sample/index.wiki index e31df340..b150b498 100644 --- a/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-sample/index.wiki +++ b/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-sample/index.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelWeb Sample]] [[Property:weight|2]] +[[Property:uuid|8d863248-ab60-bf4b-cfd0-f79c63309a1b]] The [[EiffelWeb Basic Sample|basic]] sample will get you started on the development of forms processing in Eiffel. diff --git a/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-tutorial/eiffelweb-content-introduction.wiki b/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-tutorial/eiffelweb-content-introduction.wiki index 2e7601f2..cb7b7a55 100644 --- a/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-tutorial/eiffelweb-content-introduction.wiki +++ b/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-tutorial/eiffelweb-content-introduction.wiki @@ -1,5 +1,6 @@ [[Property:title|EiffelWeb Content Introduction]] [[Property:weight|0]] +[[Property:uuid|df90086d-4265-4451-06bf-5e6e0603036e]] ==CGI Applications== The way a CGI application communicates with the Web browser is simple: when the user presses a button on an HTML form, with an associated action (such as ''Submit''), the browser starts the application whose path is indicated inside the HTML form declaration. It sends data corresponding to the HTTP request and to the input form information in the usual file descriptor ''In'', stores within environment variables the transaction environment of the request, and waits for the application message, expected in its ''Out'' canal. The ''In'' and '' Out ''canals are accessible via the class CGI_IN_AND_OUT.
diff --git a/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-tutorial/index.wiki b/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-tutorial/index.wiki index f7dd05e3..656a09a9 100644 --- a/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-tutorial/index.wiki +++ b/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-tutorial/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelWeb Content]] [[Property:link_title|EiffelWeb Tutorial]] [[Property:weight|0]] +[[Property:uuid|e2b93aea-ec1b-5897-0b0a-adc5681a1dcb]] The Common Gateway Interface (CGI) emerged as the first way to present dynamically generated information on the World Wide Web. It allows the computer to process forms filled by the user and return appropriate information.
EiffelWeb was developed by Interactive Software Engineering to provide Eiffel developers access to the CGI technology. The library makes it possible to write Eiffel systems that interact directly with the WEB. {{seealso| '''See Also'''
diff --git a/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-tutorial/processing-requests.wiki b/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-tutorial/processing-requests.wiki index 5ea1ef05..1f937334 100644 --- a/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-tutorial/processing-requests.wiki +++ b/documentation/current/solutions/web-technology/eiffelweb/eiffelweb-tutorial/processing-requests.wiki @@ -1,5 +1,6 @@ [[Property:title|Processing Requests]] [[Property:weight|1]] +[[Property:uuid|f265e0d8-ca0e-8902-712c-1102b2916e9c]] EiffelWeb provides a complete set of features and interface which helps building a wide range of possible requests. ==Basic CGI Handling== diff --git a/documentation/current/solutions/web-technology/eiffelweb/index.wiki b/documentation/current/solutions/web-technology/eiffelweb/index.wiki index dd3fde39..7735a6bf 100644 --- a/documentation/current/solutions/web-technology/eiffelweb/index.wiki +++ b/documentation/current/solutions/web-technology/eiffelweb/index.wiki @@ -1,6 +1,7 @@ [[Property:title|EiffelWeb Library]] [[Property:link_title|EiffelWeb]] [[Property:weight|1]] +[[Property:uuid|b8a31d00-8ecb-7e32-df14-d92c91019826]] Type: Library
Platform: Any
diff --git a/documentation/current/solutions/web-technology/index.wiki b/documentation/current/solutions/web-technology/index.wiki index a5f32150..22d7d7a0 100644 --- a/documentation/current/solutions/web-technology/index.wiki +++ b/documentation/current/solutions/web-technology/index.wiki @@ -3,8 +3,8 @@ [[Property:weight|-7]] [[Property:uuid|2b54659c-c982-239b-a9d9-003f3868c49f]] = Web CGI forms processing = -* EiffelWeb http://ise181.ise/book/documentation/eiffelweb-library -** EiffelWeb tutorial http://ise181.ise/book/documentation/eiffelweb-content +* [[EiffelWeb Library|EiffelWeb]] +** [[EiffelWeb Content|EiffelWeb tutorial]] ** EiffelWeb class reference -** EiffelWeb samples http://ise181.ise/book/documentation/eiffelweb-sample +** [[EiffelWeb Sample|EiffelWeb samples]] diff --git a/documentation/current/why-eiffel/eiffel-two-minute-fact-sheet.wiki b/documentation/current/why-eiffel/eiffel-two-minute-fact-sheet.wiki index 4ba04de6..c77e4f87 100644 --- a/documentation/current/why-eiffel/eiffel-two-minute-fact-sheet.wiki +++ b/documentation/current/why-eiffel/eiffel-two-minute-fact-sheet.wiki @@ -1,5 +1,6 @@ [[Property:title|Eiffel: The Two-Minute Fact Sheet]] [[Property:weight|0]] +[[Property:uuid|f672bfb8-ddea-beb1-eaa6-e374a6a6bc92]] If you are both curious about Eiffel and in a hurry, take a couple of minutes to read these facts about Eiffel. If anything here seems too good to be true, please suspend your disbelief. Press on to the more detailed documentation for the rationale, and our success stories for the evidence behind these facts. ===Eiffel is the most comprehensive approach to the construction of successful object-oriented software.=== diff --git a/documentation/current/why-eiffel/index.wiki b/documentation/current/why-eiffel/index.wiki index b95538df..860e9f75 100644 --- a/documentation/current/why-eiffel/index.wiki +++ b/documentation/current/why-eiffel/index.wiki @@ -1,6 +1,12 @@ [[Property:title|Why Eiffel?]] [[Property:weight|-1]] [[Property:uuid|df007537-c0dd-2ea6-233b-764ad483eb65]] +This book contains the arguments for using Eiffel. + +Even though we in the Eiffel community know that Eiffel is the most advanced object-oriented software development framework on this planet, that fact may not be so obvious to everyone else. Consequently, we felt that it would be helpful to provide some brief documents that spell out the reasons why the people who have chosen Eiffel have been so successful. + +You may find the information helpful if you are simply curious about Eiffel, if you are actively looking for a better development framework, or if you are busy trying to convince others to try Eiffel. + == Why Eiffel? ==