A new version of Help-Squeak-Project was added to project The Inbox:
http://source.squeak.org/inbox/Help-Squeak-Project-mha.1.mcz
==================== Summary ====================
Name: Help-Squeak-Project-mha.1
Author: mha
Time: 2 May 2010, 8:22:14.298 pm
UUID: b42d0375-75af-4348-ad43-0a1cfed12bdf
Ancestors:
renamed from Squeak-Project-Help
==================== Snapshot ====================
SystemOrganization addCategory: #'Help-Squeak-Project'!
CustomHelp subclass: #SqueakHelp
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Help-Squeak-Project'!
----- Method: SqueakHelp classSide>>bookName (in category 'accessing') -----
bookName
^'Squeak'!
----- Method: SqueakHelp classSide>>icon (in category 'accessing') -----
icon
(self name = #SqueakHelp) ifTrue: [^HelpIcons iconNamed: #squeakIcon].
^nil!
SqueakHelp subclass: #SqueakProjectHelp
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Help-Squeak-Project'!
SqueakProjectHelp subclass: #SqueakLicenseHelp
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Help-Squeak-Project'!
----- Method: SqueakLicenseHelp classSide>>bookName (in category 'accessing') -----
bookName
^'License'!
----- Method: SqueakLicenseHelp classSide>>licenseChange (in category 'pages') -----
licenseChange
^HelpTopic
title: 'License has changed with 4.0'
contents: 'On 23 September 1996, Apple Computer Inc. released Squeak V1.1 under the "Squeak License" (SqL).
On May 8, 2006 Apple agreed to relicense original Squeak V1.1 under the Apple Public Source License.
On October 12, 2006 Apple granted permission to relicense under Apache license 2.0.
In 2006, VPRI began to collect "Distribution Agreements" for all contributors to Squeak since V1.1 up to V3.8, asking them to relicense their contributions, which were originally licensed under SqL, to the MIT license. This was a great effort on behalf of many and VPRI has 100s of signed documents agreeing to this.
Do you want to contribute source to Squeak?All new contributions since 4.0 must be under the MIT license. When you make your code available, please state explicitly in some form such as the description on a web site or email announcement that your contribution is under the MIT license. (It doesn''t have to be exclusive; you can release it under difference licenses at the same time.)
Have you contributed source to Squeak? If you believe you have, but have not sent in an agreement to allow your submission(s) to be licensed under the MIT license then please see http://netjam.org/squeak/contributors. There you can find a list of known contributors and a PDF of the agreement with instructions. The snail mail address is found in the agreement PDF file.
Also there are a few people for which we are lacking full contact information. If you think you can help please also visit the link above and see if you can identify any of the unknown developer initials or any of the developers for whom we do not have a current email address.' !
----- Method: SqueakLicenseHelp classSide>>officialLicense (in category 'pages') -----
officialLicense
^HelpTopic
title: 'Official License - 4.0'
contents: 'Copyright (c) The individual, corporate, and institutional contributors who have collectively contributed elements to this software ("The Squeak Community"), 1996-2010 All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Portions of Squeak are covered by the following license
Copyright (c) Xerox Corp. 1981, 1982 All rights reserved.
Copyright (c) Apple Computer, Inc. 1985-1996 All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.'!
----- Method: SqueakLicenseHelp classSide>>pages (in category 'accessing') -----
pages
^#(licenseChange officialLicense)!
----- Method: SqueakProjectHelp classSide>>bookName (in category 'accessing') -----
bookName
^'Squeak Project'!
----- Method: SqueakProjectHelp classSide>>introduction (in category 'pages') -----
introduction
^HelpTopic
title: 'Welcome'
icon: (HelpIcons iconNamed: #squeakIcon)
contents:
'WELCOME
Squeak is a modern, open source, full-featured implementation of the powerful Smalltalk programming language and environment. Squeak is highly-portable - even its virtual machine is written entirely in Smalltalk making it easy to debug, analyze, and change. Squeak is the vehicle for a wide range of projects from multimedia applications, educational platforms to commercial web application development.'!
----- Method: SqueakProjectHelp classSide>>pages (in category 'accessing') -----
pages
^#(introduction )!
A new version of HelpSystem-Core was added to project The Trunk:
http://source.squeak.org/trunk/HelpSystem-Core-mha.45.mcz
==================== Summary ====================
Name: HelpSystem-Core-mha.45
Author: mha
Time: 2 May 2010, 4:04:02.179 pm
UUID: 5bf0c524-6372-47c3-9cec-277d9c349ba5
Ancestors: HelpSystem-Core-mha.44
loadable in trunk; with postscript to update the docking bar menu
==================== Snapshot ====================
(PackageInfo named: 'HelpSystem-Core') postscriptOfRemoval: '"below, add code to clean up after the unloading of this package"'!
(PackageInfo named: 'HelpSystem-Core') preamble: '"below, add code to be run before the loading of this package"'!
SystemOrganization addCategory: #'HelpSystem-Core-Builders'!
SystemOrganization addCategory: #'HelpSystem-Core-Help'!
SystemOrganization addCategory: #'HelpSystem-Core-Model'!
SystemOrganization addCategory: #'HelpSystem-Core-UI'!
SystemOrganization addCategory: #'HelpSystem-Core-Utilities'!
(PackageInfo named: 'HelpSystem-Core') postscript: '"below, add code to be run after the loading of this package"
TheWorldMainDockingBar updateInstances'!
(PackageInfo named: 'HelpSystem-Core') preambleOfRemoval: '"below, add code to prepare for the unloading of this package"'!
PluggableListItemWrapper subclass: #HelpTopicListItemWrapper
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-UI'!
!HelpTopicListItemWrapper commentStamp: 'tbn 3/8/2010 09:30' prior: 0!
This class implements a list item wrapper for help topics.
Instance Variables
!
----- Method: HelpTopicListItemWrapper>>asString (in category 'accessing') -----
asString
"Returns a string used as a label"
^item title!
----- Method: HelpTopicListItemWrapper>>balloonText (in category 'accessing') -----
balloonText
"Returns a string used for fly by help"
^self item title!
----- Method: HelpTopicListItemWrapper>>contents (in category 'accessing') -----
contents
"Returns subnodes (if any)"
item hasSubtopics ifFalse: [^#()].
^(item subtopics) collect: [ :each |
HelpTopicListItemWrapper with: each
].
!
----- Method: HelpTopicListItemWrapper>>highlightingColor (in category 'accessing') -----
highlightingColor
"Returns the text color when the receiver is selected in a list."
^Color blue !
----- Method: HelpTopicListItemWrapper>>icon (in category 'accessing') -----
icon
"Either return the icon for the given topic"
| symbol |
item icon notNil ifTrue: [^item icon].
symbol := item hasSubtopics
ifTrue: [#bookIcon]
ifFalse: [#pageIcon].
^HelpIcons iconNamed: symbol!
Object subclass: #CustomHelp
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-Utilities'!
!CustomHelp commentStamp: 'tbn 3/29/2010 13:23' prior: 0!
This is a common superclass for custom help. Subclasses of this class are automatically included into the system help.
By default the informations provided on the receiver class are converted into help topics by a specific builder
- here the CustomHelpHelpBuilder. Note that you can provide an own custom builder by overriding the #builder method
!
----- Method: CustomHelp classSide>>accept:title:contents: (in category 'editing') -----
accept: aSelector title: title contents: text
"Accept edited text. Compile it into a HelpTopic"
| code |
code := String streamContents:[:s|
s nextPutAll: aSelector.
s crtab; nextPutAll: '"This method was automatically generated. Edit it using:"'.
s crtab; nextPutAll: '"', self name,' edit: ', aSelector storeString,'"'.
s crtab; nextPutAll: '^HelpTopic'.
s crtab: 2; nextPutAll: 'title: ', title storeString.
s crtab: 2; nextPutAll: 'contents: '.
s cr; nextPutAll: (String streamContents:[:c| c nextChunkPutWithStyle: text]) storeString.
s nextPutAll:' readStream nextChunkText'.
].
self class
compile: code
classified: ((self class organization categoryOfElement: aSelector) ifNil:['pages']).
!
----- Method: CustomHelp classSide>>asHelpTopic (in category 'converting') -----
asHelpTopic
"Convert the receiver to a help topic"
^self builder buildHelpTopicFrom: self!
----- Method: CustomHelp classSide>>bookName (in category 'accessing') -----
bookName
"Returns the name of the custom help book"
^'Help'!
----- Method: CustomHelp classSide>>builder (in category 'defaults') -----
builder
"Returns the builder that is used to build the given help book from the receiver. You can override this method
in a subclass to provide an own builder".
^CustomHelpHelpBuilder!
----- Method: CustomHelp classSide>>edit: (in category 'editing') -----
edit: aSelector
"Open a Workspace on the text in the given selector.
When accepted, compile the result as a help topic."
| topic window |
topic := (self respondsTo: aSelector)
ifTrue:[self perform: aSelector]
ifFalse:[HelpTopic title: 'Untitled' contents: 'Please edit this topic.
To change the topic title, edit the window label.'].
window := UIManager default
edit: topic contents
label: topic title
accept: [:text| self accept: aSelector title: window label contents: text].
!
----- Method: CustomHelp classSide>>icon (in category 'accessing') -----
icon
"Returns an icon used for displaying the custom help book"
^HelpIcons iconNamed: #bookIcon!
----- Method: CustomHelp classSide>>key (in category 'accessing') -----
key
"Returns a unique key identifying the receiver in the help system"
^''!
----- Method: CustomHelp classSide>>pages (in category 'accessing') -----
pages
"Returns a collection of method selectors to return the pages of the custom help book"
^#()!
CustomHelp subclass: #HelpOnHelp
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-Help'!
!HelpOnHelp commentStamp: 'tbn 2/12/2010 14:27' prior: 0!
Welcome to Pharo Smalltalk Help System!
HelpOnHelp subclass: #HelpAPIDocumentation
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-Help'!
!HelpAPIDocumentation commentStamp: 'tbn 4/30/2010 15:12' prior: 0!
This class represents the browsable package API help for the help system.
Instance Variables
!
----- Method: HelpAPIDocumentation classSide>>bookName (in category 'accessing') -----
bookName
^'API Documentation'!
----- Method: HelpAPIDocumentation classSide>>builder (in category 'defaults') -----
builder
^PackageAPIHelpBuilder!
----- Method: HelpAPIDocumentation classSide>>packages (in category 'accessing') -----
packages
^#('HelpSystem-Core-Model' 'HelpSystem-Core-Utilities' 'HelpSystem-Core-UI')!
HelpOnHelp subclass: #HelpHowToHelpTopics
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-Help'!
----- Method: HelpHowToHelpTopics classSide>>bookName (in category 'accessing') -----
bookName
^'Implementation'!
----- Method: HelpHowToHelpTopics classSide>>overview (in category 'pages') -----
overview
^HelpTopic
title: 'Overview'
contents:
'THE IMPLEMENTATION
The help system typically consists of help books including one or more pages. A book or page is therefore a "topic of interest" providing contents for help to a user. A topic has a title and an icon and is able to have subtopics forming a hierarchy of topics. This simple model is reflected in the class HelpTopic.
Since this model forms a hierarchical structure of help topics there is a browser with a tree to display the help contents. This browser is implemented in class HelpBrowser.
You can open this browser programmatically using:
HelpBrowser open
' !
----- Method: HelpHowToHelpTopics classSide>>page1 (in category 'pages') -----
page1
^HelpTopic
title: '1. Simple help topics'
contents: 'The help browser usually operates on a hierarchy of help topics with one help topic at the root level. Evaluate the following expression in a workspace to contruct a simple help topic and open it as a root topic in the help browser.
|root|
root := HelpTopic
title: ''My first topic''
contents: ''A simple topic of interest''.
HelpBrowser openOn: root
Note that the help browser displays the contents of our topic in the right page and uses the topics title as the title for the help browser window.
'!
----- Method: HelpHowToHelpTopics classSide>>page2 (in category 'pages') -----
page2
^HelpTopic
title: '2. Forming a hierarchy'
contents: 'To form a hierarchy we just have to add new subtopics on our root topic.
|root sub1 sub2|
root := HelpTopic
title: ''My first topic''
contents: ''A simple topic of interest''.
sub1 := HelpTopic
title: ''My first subtopic''
contents: ''First subsection''.
sub2 := HelpTopic
title: ''My second subtopic''
contents: ''Second subsection''.
root
addSubtopic: sub1;
addSubtopic: sub2.
HelpBrowser openOn: root
'!
----- Method: HelpHowToHelpTopics classSide>>page3 (in category 'pages') -----
page3
^HelpTopic
title: '3. Adding icons'
contents: 'If you dont like the default icon you can add own custom icons to the topics. See the class HelpIcons for more details.
|root sub1 sub2|
root := HelpTopic
title: ''My first topic''
contents: ''A simple topic of interest''.
sub1 := HelpTopic
title: ''My first subtopic''
contents: ''First subsection''.
sub2 := HelpTopic
title: ''My second subtopic''
icon: (HelpIcons iconNamed: #packageIcon)
contents: ''Second subsection''.
root
addSubtopic: sub1;
addSubtopic: sub2.
HelpBrowser openOn: root
'!
----- Method: HelpHowToHelpTopics classSide>>page4 (in category 'pages') -----
page4
^HelpTopic
title: '4. Own help objects'
contents:
'You can open this help browser directly on an instance of HelpTopic, but it is more common to open it on any object that understands the message #asHelpTopic.
So you can write for instance:
HelpBrowser openOn: Integer
opening a short API help/system reference on the Integer class.
The above expression is the short form for:
HelpBrowser openOn: (SystemReference forClass: Integer)
If you want you can include the subclasses:
HelpBrowser openOn: (SystemReference hierarchyFor: Integer)
or even methods
HelpBrowser openOn: (SystemReference hierarchyWithMethodsFor: Integer)
You can browse the whole system reference documentation using:
HelpBrowser openOn: SystemReference
But these are only a few examples what we can extract from the
system.
However - the major goal is NOT an API browser, the idea is to
provide a simple architecture to provide browsable help contents
depending on the context. For instance it should also be possible
to use the help system to provide end user help on any commercial
application that is written with the Smalltalk system.
' !
----- Method: HelpHowToHelpTopics classSide>>page5 (in category 'pages') -----
page5
^HelpTopic
title: '5. Help sources'
contents:
'Since the underlying model is very simple you can easily fill it with nearly any information from different sources. Try this:
|topic day url sub|
topic := HelpTopic named: ''Last week on Squeak IRC''.
0 to: 7 do: [:index |
day := (Date today subtractDays: index) printFormat: #(3 2 1 $. 1 2 2).
url := ''http://tunes.org/~nef/logs/squeak/'' , day.
sub := HelpTopic
title: day contents: (HTTPLoader default retrieveContentsFor: url) contents.
topic addSubtopic: sub.
].
HelpBrowser openOn: topic
' !
----- Method: HelpHowToHelpTopics classSide>>pages (in category 'accessing') -----
pages
^#(overview page1 page2 page3 page4 page5)!
HelpHowToHelpTopics subclass: #HelpHowToHelpTopicsFromCode
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-Help'!
----- Method: HelpHowToHelpTopicsFromCode classSide>>bookName (in category 'accessing') -----
bookName
^'Custom help from code'!
----- Method: HelpHowToHelpTopicsFromCode classSide>>overview (in category 'pages') -----
overview
^HelpTopic
title: 'Overview'
contents:
'OVERVIEW
The help system allows you to provide own books and help texts. You can open the help browser on any object that is able to understand #asHelpTopic.
This method returns the root node of the displayed topic hierarchy:
HelpBrowser openOn: myObject
Typically the object does not convert itself to a help topic structure, usually it dispatches to a builder (see HelpBuilder and subclasses) who does all this.
A much more convenient and reproducable way is to implement custom help classes. This allows you to implement and manage your help texts using the standard development and code management tools. These custom help classes are subclasses of "CustomHelp" and are automatically included into the standard help browser. '!
----- Method: HelpHowToHelpTopicsFromCode classSide>>pages (in category 'accessing') -----
pages
^#(overview step1 step2 step3 step4 step5)!
----- Method: HelpHowToHelpTopicsFromCode classSide>>step1 (in category 'pages') -----
step1
^HelpTopic
title: 'Step 1 - Create a class for the book'
contents:
'STEP 1 - CREATE A CLASS FOR THE BOOK
There is a predefined class CustomHelp which you have to subclass for a custom help book to show up as a book in the Help browser:
CustomHelp subclass: #MyAppHelp
instanceVariableNames: ''''
classVariableNames: ''''
poolDictionaries: ''''
category: ''MyApp-Help''
Class methods on this class can reflect pages and if you want to provide nested help books just subclass your own help class to form a hierarchy. Any new subclass of MyAppHelp will then be a new book in your hierarchy.
The class category used should end with "-Help" so it is easy to recognize that it includes the help support of your project.'
!
----- Method: HelpHowToHelpTopicsFromCode classSide>>step2 (in category 'pages') -----
step2
^HelpTopic
title: 'Step 2 - Provide a book name'
contents:
'STEP 2 - PROVIDE A BOOK NAME
Now implement the class method #bookName to return the name of your help book.
bookName
^''My App help''
By implementing this method the system knows how you would like to name your book and uses the given string as a label in the HelpBrowser later.'
!
----- Method: HelpHowToHelpTopicsFromCode classSide>>step3 (in category 'pages') -----
step3
^HelpTopic
title: 'Step 3 - Implement pages using methods'
contents:
'STEP 3 - IMPLEMENT PAGES USING METHODS
Implement a page by defining a method that returns an instance of HelpPage defining a page title and a help text displayed in the help browser.
firstPage
^HelpTopic
title: ''First Page''
contents: ''Hello world''
Define a new method for each page of your book. Please group the pages in a method category called "pages".
You can also define an icon for the specific page:
secondPage
^HelpTopic
title: ''Second Page''
icon: (HelpIcons iconNamed: #packageIcon)
contents: ''More to come''
Note:
=====
Later we may add support for better help contents than just plain text (markup descriptions, active morphs, ...) '
!
----- Method: HelpHowToHelpTopicsFromCode classSide>>step4 (in category 'pages') -----
step4
^HelpTopic
title: 'Step 4 - Defining the page order'
contents:
'STEP 4 - DEFINING THE PAGE ORDER
By implementing the class method #pages you return a collection of method selectors to define the order in which the pages appear in your book:
pages
^#(firstPage secondPage)
'
!
----- Method: HelpHowToHelpTopicsFromCode classSide>>step5 (in category 'pages') -----
step5
^HelpTopic
title: 'Step 5 - Test your help'
contents:
'STEP 5 - TEST YOUR HELP
By using
HelpBrowser open
'
!
----- Method: HelpOnHelp classSide>>bookName (in category 'accessing') -----
bookName
^'Help on Help'!
----- Method: HelpOnHelp classSide>>introduction (in category 'pages') -----
introduction
"This method was automatically generated. Edit it using:"
"HelpOnHelp edit: #introduction"
^HelpTopic
title: 'Introduction'
contents:
'WELCOME TO THE HELP SYSTEM
The help system is a simple user interface to display help contents to the user. It can be accessed from the world menu using "Tools" -> "Help Browser" or by evaluating ''HelpBrowser open'' in a workspace.
There is a predefined mechanism allowing you to have help contents stored as source code using methods in specific help provider classes. This allows to manage the help texts using the standard development tools. But this is only one possible representation.
Yes, this is a good solution.
!!' readStream nextChunkText!
----- Method: HelpOnHelp classSide>>key (in category 'accessing') -----
key
^'HelpOnHelp'!
----- Method: HelpOnHelp classSide>>pages (in category 'accessing') -----
pages
^#(introduction)!
Object subclass: #HelpBrowser
instanceVariableNames: 'rootTopic window treeMorph contentMorph'
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-UI'!
!HelpBrowser commentStamp: 'tbn 3/8/2010 09:33' prior: 0!
A HelpBrowser is used to display a hierarchy of help topics and their contents.
Instance Variables
rootTopic: <HelpTopic>
window: <StandardWindow>
treeMorph: <PluggableTreeMorph>
contentMorph: <Morph>
rootTopic
- xxxxx
window
- xxxxx
treeMorph
- xxxxx
contentMorph
- xxxxx
!
----- Method: HelpBrowser classSide>>defaultHelpBrowser (in category 'instance creation') -----
defaultHelpBrowser
^self !
----- Method: HelpBrowser classSide>>initialize (in category 'class initialization') -----
initialize
"Initializes the receiver class"
self isPharo11
ifFalse: [ TheWorldMenu registerOpenCommand: {'Help Browser'. {self. #open}}. ].
"self open"!
----- Method: HelpBrowser classSide>>isPharo11 (in category 'private') -----
isPharo11
"Return true if we are in Pharo 1.1."
^(SystemVersion current version includesSubString: '1.1')!
----- Method: HelpBrowser classSide>>isSqueak (in category 'private') -----
isSqueak
"Return true if we are in Squeak"
^(SystemVersion current version includesSubString: 'Squeak')!
----- Method: HelpBrowser classSide>>menuCommandOn: (in category 'world menu') -----
menuCommandOn: aBuilder
<worldMenu>
(aBuilder item: #'Help Browser')
parent: #Tools;
action:[self open];
icon: (HelpIcons iconNamed: #bookIcon)!
----- Method: HelpBrowser classSide>>open (in category 'instance creation') -----
open
^self defaultHelpBrowser openOn: SystemHelp!
----- Method: HelpBrowser classSide>>openOn: (in category 'instance creation') -----
openOn: aHelpTopic
"Open the receiver on the given help topic or any other object that can be transformed into
a help topic by sending #asHelpTopic."
^(self new)
rootTopic: aHelpTopic asHelpTopic;
open;
yourself!
----- Method: HelpBrowser>>close (in category 'ui') -----
close
window notNil ifTrue: [window delete]!
----- Method: HelpBrowser>>defaultRoot (in category 'defaults') -----
defaultRoot
^CustomHelp!
----- Method: HelpBrowser>>defaultViewerClass (in category 'defaults') -----
defaultViewerClass
^PluggableTextMorph!
----- Method: HelpBrowser>>initWindow (in category 'initialize-release') -----
initWindow
self class isSqueak
ifTrue: [self initWindowInSqueak ]
ifFalse: [self initWindowInPharo ]!
----- Method: HelpBrowser>>initWindowInPharo (in category 'initialize-release') -----
initWindowInPharo
| toolbar dock|
window := (Smalltalk at: #StandardWindow) new.
window model: self.
window title: 'Help Browser'.
toolbar := window newToolbar: {window
newButtonFor: self
getState: nil
action: #refresh
arguments: nil
getEnabled: nil
labelForm: (HelpIcons iconNamed: #refreshIcon)
help: 'Refresh' translated.
}.
dock := window newToolDockingBar.
dock addMorphBack: toolbar.
window
addMorph: dock
fullFrame: (LayoutFrame fractions: (0@0 corner: 1@0) offsets: (0@0 corner: 0 @ dock minExtent y)).
"Tree"
treeMorph := PluggableTreeMorph new.
treeMorph model: self; setSelectedSelector: #onItemClicked:.
window
addMorph: treeMorph
fullFrame: (LayoutFrame fractions: (0@0 corner: 0.3@1) offsets: (0@dock minExtent y corner: 0 @ 0)).
"Text"
contentMorph := self defaultViewerClass on: self
text: nil accept: nil
readSelection: nil menu: nil.
window addMorph: contentMorph fullFrame: (LayoutFrame fractions: (0.3@0 corner: 1@1) offsets: (0@dock minExtent y corner: 0 @ 0)).
!
----- Method: HelpBrowser>>initWindowInSqueak (in category 'initialize-release') -----
initWindowInSqueak
window := SystemWindow labelled: 'Help Browser'.
window model: self.
"Tree"
treeMorph := PluggableTreeMorph new.
treeMorph model: self; setSelectedSelector: #onItemClicked:.
window addMorph: treeMorph frame: (0@0 corner: 0.3@1).
"Text"
contentMorph := self defaultViewerClass on: self
text: nil accept: nil
readSelection: nil menu: nil.
window addMorph: contentMorph frame: (0.3@0 corner: 1@1).
!
----- Method: HelpBrowser>>initialize (in category 'initialize-release') -----
initialize
super initialize.
self initWindow.
!
----- Method: HelpBrowser>>onItemClicked: (in category 'events') -----
onItemClicked: anItem
anItem isNil ifTrue: [^contentMorph setText: rootTopic contents].
contentMorph setText: anItem contents!
----- Method: HelpBrowser>>open (in category 'ui') -----
open
"Open the receivers window"
self refresh.
window openInWorld.
!
----- Method: HelpBrowser>>refresh (in category 'actions') -----
refresh
|items|
window setLabel: rootTopic title.
items := rootTopic subtopics collect: [:each | HelpTopicListItemWrapper with: each ].
treeMorph list: items.
contentMorph setText: rootTopic contents
!
----- Method: HelpBrowser>>rootTopic (in category 'accessing') -----
rootTopic
^rootTopic!
----- Method: HelpBrowser>>rootTopic: (in category 'accessing') -----
rootTopic: aHelpTopic
rootTopic := aHelpTopic.
self refresh !
Object subclass: #HelpBuilder
instanceVariableNames: 'topicToBuild rootToBuildFrom'
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-Builders'!
!HelpBuilder commentStamp: 'tbn 2/12/2010 14:54' prior: 0!
This is an utility class that builds the books for a help system.
Instance Variables
rootTopics: <OrderedCollection>
rootTopics
- a collection of books
!
HelpBuilder subclass: #ClassAPIHelpBuilder
instanceVariableNames: 'addSubclasses addMethods subclassesAsSeparateTopic'
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-Builders'!
!ClassAPIHelpBuilder commentStamp: 'tbn 4/30/2010 15:37' prior: 0!
A builder to build the API Help for a class
Instance Variables
addMethods: <Boolean>
addSubclasses: <Boolean>
subclassesAsSeparateTopic: <Boolean>
addMethods
- When true the builder will include method help
addSubclasses
- When true the builder will recursively go through and add subclasses
subclassesAsSeparateTopic
- xxxxx
!
----- Method: ClassAPIHelpBuilder classSide>>buildHierarchicalHelpTopicFrom:withSubclasses:withMethods: (in category 'building') -----
buildHierarchicalHelpTopicFrom: aClass withSubclasses: aBoolean withMethods: anotherBoolean
"Start building from the given class"
^(self new)
addSubclasses: aBoolean;
addMethods: anotherBoolean;
rootToBuildFrom: aClass;
build;
topicToBuild !
----- Method: ClassAPIHelpBuilder>>addMethods (in category 'accessing') -----
addMethods
^ addMethods!
----- Method: ClassAPIHelpBuilder>>addMethods: (in category 'accessing') -----
addMethods: anObject
addMethods := anObject!
----- Method: ClassAPIHelpBuilder>>addSubclasses (in category 'accessing') -----
addSubclasses
^ addSubclasses!
----- Method: ClassAPIHelpBuilder>>addSubclasses: (in category 'accessing') -----
addSubclasses: anObject
addSubclasses := anObject!
----- Method: ClassAPIHelpBuilder>>build (in category 'building') -----
build
| instanceSide classSide |
topicToBuild := (HelpTopic named: rootToBuildFrom name).
topicToBuild icon: (HelpIcons iconNamed: #pageIcon).
topicToBuild contents: rootToBuildFrom comment.
addMethods ifTrue: [ self buildSubnodesForMethods ].
addSubclasses ifTrue: [ self buildSubnodesForSubclasses ].
!
----- Method: ClassAPIHelpBuilder>>buildMethodTopicsOn:for: (in category 'private building') -----
buildMethodTopicsOn: topic for: aClass
|stream comments methodComment|
stream := String new writeStream.
aClass selectors asSortedCollection do:
[:selector |
stream
nextPutAll: aClass name;
nextPutAll: '>>';
nextPutAll: selector asString;
cr.
comments := aClass commentsAt: selector.
methodComment := (comments size = 0)
ifTrue: [ 'Method has no comment.' ]
ifFalse: [ comments first ].
stream nextPutAll: methodComment;cr;cr.
].
topic contents: stream contents.
!
----- Method: ClassAPIHelpBuilder>>buildSubclassTopicFor: (in category 'private building') -----
buildSubclassTopicFor: aSubclass
^(self class new)
rootToBuildFrom: aSubclass;
addSubclasses: addSubclasses;
addMethods: addMethods;
subclassesAsSeparateTopic: subclassesAsSeparateTopic;
build;
topicToBuild
!
----- Method: ClassAPIHelpBuilder>>buildSubnodesForMethods (in category 'private building') -----
buildSubnodesForMethods
| instanceSide classSide |
instanceSide := HelpTopic named: 'Instance side'.
classSide := HelpTopic named: 'Class side'.
topicToBuild icon: (HelpIcons iconNamed: #bookIcon).
topicToBuild
addSubtopic: instanceSide;
addSubtopic: classSide.
self buildMethodTopicsOn: instanceSide for: rootToBuildFrom.
self buildMethodTopicsOn: classSide for: rootToBuildFrom class. !
----- Method: ClassAPIHelpBuilder>>buildSubnodesForSubclasses (in category 'private building') -----
buildSubnodesForSubclasses
| topic |
rootToBuildFrom subclasses isEmpty ifTrue: [^self].
topicToBuild icon: (HelpIcons iconNamed: #bookIcon).
topic := subclassesAsSeparateTopic
ifTrue: [topicToBuild addSubtopic: (HelpTopic named: 'Subclasses')]
ifFalse: [topicToBuild ].
rootToBuildFrom subclasses
do: [:subclass | topic addSubtopic: (self buildSubclassTopicFor: subclass)].
topic sortSubtopicsByTitle.
!
----- Method: ClassAPIHelpBuilder>>initialize (in category 'initialize-release') -----
initialize
"Initializes the receiver"
super initialize.
addSubclasses := false.
addMethods := true.
subclassesAsSeparateTopic := true.!
----- Method: ClassAPIHelpBuilder>>subclassesAsSeparateTopic (in category 'accessing') -----
subclassesAsSeparateTopic
^ subclassesAsSeparateTopic!
----- Method: ClassAPIHelpBuilder>>subclassesAsSeparateTopic: (in category 'accessing') -----
subclassesAsSeparateTopic: anObject
subclassesAsSeparateTopic := anObject!
HelpBuilder subclass: #CustomHelpHelpBuilder
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-Builders'!
!CustomHelpHelpBuilder commentStamp: 'tbn 3/29/2010 13:30' prior: 0!
This builder builds help topics from a help topic description (which is typically stored
in a class).
The help topic description object has to understand the following messages:
#bookName - should return the name of the help book
#icon - should return the icon of the help book
#key - should return a unique key to identify the book
#pages - should return an array of method selectors to call to get the books pages
!
----- Method: CustomHelpHelpBuilder>>build (in category 'building') -----
build
"Start building a help topic from a code description"
topicToBuild := self createTopicFrom: rootToBuildFrom
!
----- Method: CustomHelpHelpBuilder>>createTopicFrom: (in category 'private') -----
createTopicFrom: aDescription
"Create a topic from a description stored on a class"
|topic page method pragma |
topic := HelpTopic named: aDescription bookName.
topic key: aDescription key.
topic icon: aDescription icon.
aDescription pages do: [:pageSelector|
page := aDescription perform: pageSelector.
topic addSubtopic: page.
].
aDescription subclasses do: [:subclass |
topic subtopics add: subclass asHelpTopic ].
^topic!
----- Method: HelpBuilder classSide>>buildHelpTopicFrom: (in category 'building') -----
buildHelpTopicFrom: aHelpTopicDescription
"Start building from the given help topic description"
^(self new)
rootToBuildFrom: aHelpTopicDescription;
build;
topicToBuild !
----- Method: HelpBuilder>>build (in category 'building') -----
build
self subclassResponsibility
!
----- Method: HelpBuilder>>initialize (in category 'initialize-release') -----
initialize
"Initializes the receiver"
super initialize.
topicToBuild := self topicClass new.
!
----- Method: HelpBuilder>>rootToBuildFrom: (in category 'accessing') -----
rootToBuildFrom: anObject
rootToBuildFrom := anObject!
----- Method: HelpBuilder>>topicClass (in category 'private accessing') -----
topicClass
^HelpTopic!
----- Method: HelpBuilder>>topicToBuild (in category 'accessing') -----
topicToBuild
^topicToBuild!
HelpBuilder subclass: #PackageAPIHelpBuilder
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-Builders'!
----- Method: PackageAPIHelpBuilder>>build (in category 'building') -----
build
|pTopic|
topicToBuild := (HelpTopic named: rootToBuildFrom bookName).
rootToBuildFrom packages do: [:package|
pTopic := HelpTopic named: package.
topicToBuild addSubtopic: pTopic.
self buildPackageTopic: pTopic.
]
!
----- Method: PackageAPIHelpBuilder>>buildPackageTopic: (in category 'building') -----
buildPackageTopic: pTopic
| classTopic classes |
classes := (PackageInfo named: pTopic title) classes asSortedCollection: [:cl1 :cl2 | cl1 name < cl2 name].
classes
do: [:aClass|
classTopic := ClassAPIHelpBuilder buildHierarchicalHelpTopicFrom: aClass withSubclasses: false withMethods: true.
pTopic addSubtopic: classTopic
]
!
Object subclass: #HelpIcons
instanceVariableNames: ''
classVariableNames: 'Icons'
poolDictionaries: ''
category: 'HelpSystem-Core-UI'!
!HelpIcons commentStamp: 'tbn 3/8/2010 09:29' prior: 0!
This class is used to store help icons for the help browser.
Typically one implements a method returning a 12x12 Form instance which
should not be called directly.
Since the class provides an internal icon cache (so the icons can be reused without
creating too many new instances) the icons should be accessed using the #iconNamed:
message with the method selector as argument.
To create a form from an icon file stored on disk you can use the following code:
| image stream |
image := ColorForm fromFileNamed: '/path/to/icon.png'.
stream := WriteStream with: String new.
image storeOn: stream.
stream contents inspect.!
----- Method: HelpIcons classSide>>blankIcon (in category 'private icons') -----
blankIcon
^Form extent: 12 @ 1 depth:8!
----- Method: HelpIcons classSide>>bookIcon (in category 'private icons') -----
bookIcon
^(Form
extent: 12@12
depth: 32
fromArray: #( 0 0 0 0 0 284817913 552924404 0 0 0 0 0 0 0 0 0 817149108 3747766882 4287730065 2679749049 549766340 0 0 0 0 0 0 1086110908 4016202338 4287137928 4288914339 4288914339 4289111718 3216290996 1086505666 0 0 0 816754350 4014952271 4287137928 4289309097 4289769648 4289111718 4288453788 4288453788 4288453788 2947658161 0 814846353 4283782485 4287072135 4288059030 4288059030 4288387995 4289243304 4289309097 4287927444 4287598479 2411050421 1081900156 4283585106 4286611584 4287532686 4287532686 4287466893 4287466893 4287401100 4287401100 4287401100 4288716960 2946868645 3211290728 4288651167 4287269514 4287006342 4287006342 4287006342 4286940549 4286940549 4287203721 4289177511 3483213213 281725642 2677183122 4293190884 4292861919 4289177511 4286874756 4286611584 4286611584 4287006342 4289638062 4020084125 549042617 0 282054607 2677643673 4289572269 4293256677 4292796126 4288980132 4287137928 4290164406 4020215711 816754350 0 0 0 0 551082200 2677643673 4289572269 4293256677 4292401368 4289177511 1085584564 0 0 0 0 0 0 0 551213786 2677643673 4288651167 1623244992 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
offset: 0@0)!
----- Method: HelpIcons classSide>>iconNamed: (in category 'accessing') -----
iconNamed: aSymbol
^self icons at: aSymbol ifAbsentPut: [self perform: aSymbol]!
----- Method: HelpIcons classSide>>icons (in category 'accessing') -----
icons
Icons isNil ifTrue: [Icons := Dictionary new].
^Icons!
----- Method: HelpIcons classSide>>packageIcon (in category 'private icons') -----
packageIcon
^(Form
extent: 12@12
depth: 32
fromArray: #( 0 0 0 0 1075649821 3744937783 3208395836 807016986 0 0 0 0 0 0 537857807 2939368243 4283256141 4284045657 4284572001 4284111450 2671524924 269488144 0 0 0 2150575919 4014820685 4284111450 4284374622 4284769380 4285098345 4285295724 4286216826 4017057647 1883456323 0 1076505130 4283848278 4284769380 4284966759 4285624689 4285690482 4285887861 4286611584 4287269514 4287861651 4287269514 1074597133 1076965681 4283914071 4283848278 4285953654 4286216826 4286414205 4286940549 4287466893 4287335307 4286808963 4286743170 1074399754 1077163060 4284637794 4284045657 4284835173 4285887861 4287269514 4287335307 4286282619 4286216826 4286874756 4287006342 1074465547 1077294646 4284835173 4284703587 4285361517 4285624689 4286414205 4285624689 4286085240 4286677377 4287269514 4287401100 1074465547 1077426232 4285098345 4285032552 4286019447 4285822068 4286743170 4286348412 4286677377 4287203721 4287730065 4287795858 1074531340 1077492025 4285229931 4285427310 4286808963 4286216826 4287137928 4287072135 4287401100 4287795858 4288256409 4288190616 1074531340 269356558 2672051268 4285493103 4287598479 4286940549 4287532686 4287795858 4287993237 4288387995 4287006342 2404668500 268501249 0 0 1075912993 3479726184 4287598479 4287927444 4288453788 4287993237 2943118444 539371046 0 0 0 0 0 0 1615086660 4017781370 3749148535 1078347334 0 0 0 0)
offset: 0@0)!
----- Method: HelpIcons classSide>>pageIcon (in category 'private icons') -----
pageIcon
^(Form
extent: 12@12
depth: 32
fromArray: #( 0 221196079 1366981242 1366915449 1366915449 1366849656 1366783863 1128876361 33554432 0 0 0 0 726552142 4294309365 4294243572 4294111986 4294046193 4293914607 4292861919 2843705215 319885585 0 0 0 726551886 4294177779 4294111986 4293980400 4293914607 4293848814 4293717228 4292138196 3734147730 269619730 0 0 726486349 4294046193 4293980400 4293914607 4293783021 4293717228 4293585642 4293454056 4291085508 639705377 0 0 726420557 4293980400 4293848814 4293783021 4293651435 4293585642 4293519849 4293388263 4292993505 640034342 0 0 726420556 4293848814 4293717228 4293651435 4293585642 4293454056 4293388263 4293256677 4293190884 623322919 0 0 726354764 4293717228 4293651435 4293519849 4293454056 4293322470 4293256677 4293125091 4293059298 623257126 0 0 726354507 4293585642 4293519849 4293388263 4293322470 4293190884 4293125091 4293059298 4292993505 623191333 0 0 726288970 4293454056 4293388263 4293256677 4293190884 4293125091 4292993505 4292993505 4292993505 623191333 0 0 726223178 4293322470 4293256677 4293190884 4293059298 4292993505 4292993505 4292993505 4292993505 623191333 0 0 726223177 4293256677 4293125091 4293059298 4292993505 4292993505 4292993505 4292993505 4292993505 623191333 0 0 490092087 3080033685 3079967892 3079967892 3079967892 3079967892 3079967892 3079967892 3079967892 454629657 0)
offset: 0@0)!
----- Method: HelpIcons classSide>>refreshIcon (in category 'private icons') -----
refreshIcon
^(Form
extent: 16@16
depth: 32
fromArray: #( 0 0 0 0 0 0 0 895969127 526080859 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1884706390 4168710521 2288675434 271330348 0 0 0 0 0 0 0 0 0 828465505 2609087363 3615917702 4269439610 4285887861 4285624689 3899156584 1766607948 67569415 0 0 0 0 0 50529027 2306242166 4237069452 4286940549 4286611584 4286282619 4285887861 4285558896 4285229931 4268189543 2235514687 0 0 0 0 0 2590862701 4287598479 4287269514 4270097540 3329652342 3312217196 4285887861 4285558896 3345179491 1011567435 0 0 0 0 0 1263423054 4287532686 4287532686 3867378563 1096835168 0 1885166941 3681579120 1549227863 50923785 0 0 0 0 0 0 3061545851 4287795858 4236937866 811951461 0 0 641547581 137441585 0 0 0 0 0 0 0 34936085 4102720138 4287795858 3011016824 0 0 0 0 0 0 0 0 0 0 0 0 272317243 4287861651 4287795858 2489607268 0 0 0 0 0 0 0 0 68095759 0 0 0 204682035 4287730065 4287795858 2658432116 0 0 0 0 0 0 0 34014983 3965146967 4283979864 3125694030 0 0 3767044232 4287795858 3884287365 137244206 0 0 0 0 0 0 1129863256 4284769380 4284506208 2739423304 0 0 2189459584 4287795858 4287532686 2541123190 16843009 0 0 0 0 305805882 3597166696 4284703587 4250885983 910114623 0 0 273698896 3834218889 4287532686 4287335307 3094442353 1094532413 101255433 286199567 1582124365 3731318631 4284966759 4284703587 2689946965 0 0 0 0 879126118 3985082247 4287269514 4286940549 4286611584 4285624689 4285558896 4285624689 4285229931 4284966759 3227212635 220998700 0 0 0 0 0 509698401 2977659771 4286743170 4286545791 4286282619 4285887861 4285558896 4100417383 2170116441 103295016 0 0 0 0 0 0 0 0 575820370 1734895720 2121298032 2037017194 1448564567 255013683 0 0 0 0 0)
offset: 0@0)!
Object subclass: #HelpTopic
instanceVariableNames: 'title key icon contents subtopics'
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-Model'!
!HelpTopic commentStamp: 'tbn 3/29/2010 14:53' prior: 0!
A HelpTopic provides content information that can be used as a help to the user.
It can be labeled with a title, identified using an (optional) unique key and marked
with an (optional) icon.
Help topics form a hierarchy since any topic is able to have zero or more
subtopics.
Instance Variables
contents: <Object> The help topic contents
icon: <Form|nil> An optional icon for the topic
key: <String|nil> An optional unique key
subtopics: <Collection> A collection of subtopics
title: <String> The title
contents
- The help topic contents - typically containing the help topics information
icon
- An optional icon for the topic
key
- An optional unique key which can be used to identify the topic.
subtopics
- A collection of subtopics.
By default the subtopics are not sorted, so the insertion order is used.
If necessary it is possible to sort the subtopics by title.
title
- A meaninful title for the help topic
!
----- Method: HelpTopic classSide>>named: (in category 'instance creation') -----
named: aString
"Create a new instance with given title and empty contents"
^(self new)
title: aString;
yourself!
----- Method: HelpTopic classSide>>title:contents: (in category 'instance creation') -----
title: aTitle contents: aText
"Create a new instance with given title and content"
^(self new)
title: aTitle;
contents: aText;
yourself.
!
----- Method: HelpTopic classSide>>title:icon:contents: (in category 'instance creation') -----
title: aTitle icon: anIcon contents: aText
"Create a new instance with given title, icon and content"
^(self new)
title: aTitle;
icon: anIcon;
contents: aText;
yourself.
!
----- Method: HelpTopic>><= (in category 'comparing') -----
<= anotherHelpTopic
"Use sorting by title as the default sort order"
^self title <= anotherHelpTopic title !
----- Method: HelpTopic>>addSubtopic: (in category 'accessing') -----
addSubtopic: aTopic
"Adds the given topic to the receivers collection of subtopics"
self subtopics add: aTopic.
^aTopic!
----- Method: HelpTopic>>asHelpTopic (in category 'conversion') -----
asHelpTopic
"Converts the receiver to a help topic"
^self!
----- Method: HelpTopic>>contents (in category 'accessing') -----
contents
"Returns the receivers contents"
^ contents!
----- Method: HelpTopic>>contents: (in category 'accessing') -----
contents: anObject
"Sets the receivers contents to the given object"
contents := anObject!
----- Method: HelpTopic>>defaultTitle (in category 'defaults') -----
defaultTitle
"Returns the receivers default title"
^'Unnamed Topic'
!
----- Method: HelpTopic>>hasSubtopics (in category 'testing') -----
hasSubtopics
"Returns true if the receiver has subtopics, false otherwise"
^self subtopics notEmpty !
----- Method: HelpTopic>>icon (in category 'accessing') -----
icon
"Returns the receivers icon"
^icon!
----- Method: HelpTopic>>icon: (in category 'accessing') -----
icon: aSymbol
"Sets the receivers icon"
icon := aSymbol !
----- Method: HelpTopic>>initialize (in category 'initialize-release') -----
initialize
"Initializes the receiver"
super initialize.
self title: self defaultTitle.
self contents: ''.
self key: '' !
----- Method: HelpTopic>>key (in category 'accessing') -----
key
"Returns a unique key identifying the receiver in the help system"
^key!
----- Method: HelpTopic>>key: (in category 'accessing') -----
key: aUniqueKey
"Sets a unique key identifying the receiver in the help system"
key := aUniqueKey !
----- Method: HelpTopic>>sortSubtopicsByTitle (in category 'operating') -----
sortSubtopicsByTitle
"Sort the subtopics by title"
subtopics := SortedCollection withAll: self subtopics !
----- Method: HelpTopic>>subtopics (in category 'accessing') -----
subtopics
"Returns the receivers list of subtopics"
subtopics isNil ifTrue: [subtopics := OrderedCollection new].
^subtopics!
----- Method: HelpTopic>>subtopics: (in category 'accessing') -----
subtopics: aCollection
"Sets the receivers subtopics"
subtopics := aCollection !
----- Method: HelpTopic>>title (in category 'accessing') -----
title
"Returns the receivers title"
^ title!
----- Method: HelpTopic>>title: (in category 'accessing') -----
title: anObject
"Sets the receivers title"
title := anObject!
Object subclass: #SystemHelp
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-Utilities'!
!SystemHelp commentStamp: 'tbn 4/30/2010 15:33' prior: 0!
This class defines Help for the system in front of you.
It defines the default contents when you open a help browser.
So "HelpBrowser open" is the same as "HelpBrowser openOn: SystemHelp".
!
----- Method: SystemHelp classSide>>asHelpTopic (in category 'conversion') -----
asHelpTopic
|topic helpOnHelp sortedTopics |
topic := CustomHelp asHelpTopic.
topic sortSubtopicsByTitle.
helpOnHelp := topic subtopics detect: [:t | t key = 'HelpOnHelp'] ifNone: [self error: 'Help for the help system is removed'].
sortedTopics := topic subtopics.
sortedTopics remove: helpOnHelp.
sortedTopics addLast: helpOnHelp.
topic subtopics: sortedTopics.
^topic.
!
Object subclass: #SystemReference
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'HelpSystem-Core-Utilities'!
!SystemReference commentStamp: 'tbn 4/30/2010 15:35' prior: 0!
This class defines the full reference help for the system.
(contents for the full API Help).
Just run "HelpBrowser openOn: SystemReference".
!
----- Method: SystemReference classSide>>all (in category 'help topic creation') -----
all
"HelpBrowser openOn: self all "
^(ClassAPIHelpBuilder new)
rootToBuildFrom: ProtoObject;
addSubclasses: true;
addMethods: true;
subclassesAsSeparateTopic: false;
build;
topicToBuild
!
----- Method: SystemReference classSide>>asHelpTopic (in category 'help topic creation') -----
asHelpTopic
"HelpBrowser openOn: SystemReference"
^self hierarchyFor: ProtoObject
!
----- Method: SystemReference classSide>>forClass: (in category 'help topic creation') -----
forClass: aClass
|root topic |
root := HelpTopic named: 'System reference for ', aClass name.
topic := ClassAPIHelpBuilder buildHelpTopicFrom: aClass.
root addSubtopic: topic.
^root!
----- Method: SystemReference classSide>>hierarchyFor: (in category 'help topic creation') -----
hierarchyFor: aClass
|root topic |
root := HelpTopic named: 'System reference for ', aClass name.
topic := (ClassAPIHelpBuilder new)
rootToBuildFrom: aClass;
addSubclasses: true;
addMethods: false;
subclassesAsSeparateTopic: false;
build;
topicToBuild.
root addSubtopic: topic.
^root
!
----- Method: SystemReference classSide>>hierarchyWithMethodsFor: (in category 'help topic creation') -----
hierarchyWithMethodsFor: aClass
|root topic |
root := HelpTopic named: 'System reference for ', aClass name.
topic := (ClassAPIHelpBuilder new)
rootToBuildFrom: aClass;
addSubclasses: true;
addMethods: true;
subclassesAsSeparateTopic: true;
build;
topicToBuild.
root addSubtopic: topic.
^root
!
----- Method: Class>>asHelpTopic (in category '*HelpSystem-Core') -----
asHelpTopic
^SystemReference forClass: self!
A new version of Squeak-Project-Help was added to project The Inbox:
http://source.squeak.org/inbox/Squeak-Project-Help-mha.7.mcz
==================== Summary ====================
Name: Squeak-Project-Help-mha.7
Author: mha
Time: 2 May 2010, 5:35:39.175 pm
UUID: 9c05f616-b6a5-4006-887f-e692499974b1
Ancestors: Squeak-Project-Help-mha.6
corrected license number
=============== Diff against Squeak-Project-Help-mha.6 ===============
Item was changed:
----- Method: SqueakLicenseHelp classSide>>officialLicense (in category 'pages') -----
officialLicense
^HelpTopic
+ title: 'Official License - 4.0'
- title: 'Official License - 4.1'
contents: 'Copyright (c) The individual, corporate, and institutional contributors who have collectively contributed elements to this software ("The Squeak Community"), 1996-2010 All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Portions of Squeak are covered by the following license
Copyright (c) Xerox Corp. 1981, 1982 All rights reserved.
Copyright (c) Apple Computer, Inc. 1985-1996 All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.'!
A new version of Squeak-Project-Help was added to project The Inbox:
http://source.squeak.org/inbox/Squeak-Project-Help-mha.6.mcz
==================== Summary ====================
Name: Squeak-Project-Help-mha.6
Author: mha
Time: 2 May 2010, 5:29:02.341 pm
UUID: 46e39db8-ccd1-4ba4-beb1-d5f46e251b43
Ancestors: Squeak-Project-Help-mha.5
fixed license issue
=============== Diff against Squeak-Project-Help-mha.5 ===============
Item was changed:
----- Method: SqueakLicenseHelp classSide>>pages (in category 'accessing') -----
pages
+ ^#(licenseChange officialLicense)!
- ^#(licenseChange officalLicense)!
Item was added:
+ ----- Method: SqueakLicenseHelp classSide>>officialLicense (in category 'pages') -----
+ officialLicense
+ ^HelpTopic
+ title: 'Official License - 4.1'
+ contents: 'Copyright (c) The individual, corporate, and institutional contributors who have collectively contributed elements to this software ("The Squeak Community"), 1996-2010 All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+
+ Portions of Squeak are covered by the following license
+
+
+ Copyright (c) Xerox Corp. 1981, 1982 All rights reserved.
+ Copyright (c) Apple Computer, Inc. 1985-1996 All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.'!
Item was removed:
- ----- Method: SqueakLicenseHelp classSide>>officalLicense (in category 'pages') -----
- officalLicense
- ^HelpTopic
- title: 'Offical License - pre 4.0'
- contents: 'Apple Computer, Inc. Software License
-
- PLEASE READ THIS SOFTWARE LICENSE AGREEMENT "LICENSE" CAREFULLY BEFORE DOWNLOADING THIS SOFTWARE. BY DOWNLOADING THIS SOFTWARE YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS LICENSE. IF YOU DO NOT AGREE TO THE TERMS OF THIS LICENSE, DO NOT DOWNLOAD.
-
- 1. License. The software, documentation and any fonts which you will receive by downloading this software (the "Apple Software") are licensed, not sold, to you by Apple Computer, Inc. or its local subsidiary, if any. Apple and/or Apple''s licensor(s) retain title to the Apple Software, and the Apple Software and any copies which this License authorizes you to make are subject to this License. This License grants no right or license under any trademarks, service marks, or tradenames of Apple.
-
- 2. Permitted Uses and Restrictions. This License allows you to copy, install and use the Apple Software on an unlimited number of computers under your direct control. You may modify and create derivative works of the Apple Software ("Modified Software"), however, you may not modify or create derivative works of the fonts provided by Apple ("Fonts"). You may distribute and sublicense such Modified Software only under the terms of a valid, binding license that makes no representations or warranties on behalf of Apple, and is no less protective of Apple and Apple''s rights than this License. You may distribute and sublicense the Fonts only as a part of and for use with Modified Software, and not as a part of or for use with Modified Software that is distributed or sublicensed for a fee or for other valuable consideration. If the Modified Software contains modifications, overwrites, replacements, deletions, additions, or ports to new platforms of: (1) the methods of existing class objects or their existing relationships, or (2) any part of the virtual machine, then for so long as the Modified Software is distributed or sublicensed to others, such modified, overwritten, replaced, deleted, added and ported portions of the Modified Software must be made publicly available, preferably by means of download from a website, at no charge under the terms set forth in Exhibit A below. You may transfer your rights under this License provided you transfer this License and a copy of the Apple Software to a party who agrees to accept the terms of this License and destroy any other copies of the Apple Software in your possession. Your rights under this License will terminate automatically without notice from Apple if you fail to comply with any term(s) of this License.
-
- 3. Disclaimer Of Warranty. The Apple Software is pre-release, and untested, or not fully tested. The Apple Software may contain errors that could cause failures or loss of data, and may be incomplete or contain inaccuracies. You expressly acknowledge and agree that use of the Apple Software is at your sole risk. You acknowledge that Apple has not publicly announced, nor promised or guaranteed to you, that Apple will release a final, commercial or any future pre-release version of the Apple Software to you or anyone in the future, and that Apple has no express or implied obligation to announce or introduce a final, commercial or any future pre-release version of the Apple Software or any similar or compatible product, or to continue to offer or support the Apple Software in the future. The Apple Software is provided "AS-IS" and without warranty of any kind and Apple and Apple''s licensor(s) (for the purposes of Sections 3 and 4, Apple and Apple''s licensor(s) shall be collectively referred to as "Apple") EXPRESSLY DISCLAIM ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY OR SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. APPLE DOES NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE APPLE SOFTWARE WILL MEET YOUR REQUIREMENTS, OR THAT THE OPERATION OF THE APPLE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT DEFECTS IN THE APPLE SOFTWARE WILL BE CORRECTED. FURTHERMORE, APPLE DOES NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE USE OR THE RESULTS OF THE USE OF THE APPLE SOFTWARE OR RELATED DOCUMENTATION IN TERMS OF THEIR CORRECTNESS, ACCURACY, RELIABILITY, OR OTHERWISE. NO ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE SHALL CREATE A WARRANTY OR IN ANY WAY INCREASE THE SCOPE OF THIS WARRANTY. SHOULD THE APPLE SOFTWARE PROVE DEFECTIVE, YOU (AND NOT APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE) ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO YOU. THE TERMS OF THIS DISCLAIMER DO NOT AFFECT OR PREJUDICE THE STATUTORY RIGHTS OF A CONSUMER ACQUIRING APPLE PRODUCTS OTHERWISE THAN IN THE COURSE OF A BUSINESS, NEITHER DO THEY LIMIT OR EXCLUDE ANY LIABILITY FOR DEATH OR PERSONAL INJURY CAUSED BY APPLE''S NEGLIGENCE.
-
- 4. Limitation of Liability. UNDER NO CIRCUMSTANCES, INCLUDING NEGLIGENCE, SHALL APPLE BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES SO THIS LIMITATION MAY NOT APPLY TO YOU. In no event shall Apple''s total liability to you for all damages exceed the amount of fifty dollars ($50.00).
-
- 5. Indemnification. You agree to indemnify and hold Apple harmless from any and all damages, liabilities, costs and expenses (including but not limited to attorneys'' fees and costs of suit) incurred by Apple as a result of any claim, proceeding, and/or judgment to the extent it arises out of or is connected in any manner with the operation, use, distribution or modification of Modified Software, or the combination of Apple Software or Modified Software with other programs; provided that Apple notifies Licensee of any such claim or proceeding in writing, tenders to Licensee the opportunity to defend or settle such claim or proceeding at Licensee''s expense, and cooperates with Licensee in defending or settling such claim or proceeding.
-
- 6. Export Law Assurances. You may not use or otherwise export or reexport the Apple Software except as authorized by United States law and the laws of the jurisdiction in which the Apple Software was obtained. In particular, but without limitation, the Apple Software may not be exported or reexported (i) into (or to a national or resident of) any U.S. embargoed country or (ii) to anyone on the U.S. Treasury Department''s list of Specially Designated Nationals or the U.S. Department of Commerce''s Table of Denial Orders. By using the Apple Software, you represent and warrant that you are not located in, under control of, or a national or resident of any such country or on any such list.
-
- 7. Government End Users. If the Apple Software is supplied to the United States Government, the Apple Software is classified as "restricted computer software" as defined in clause 52.227-19 of the FAR. The United States Government''s rights to the Apple Software are as provided in clause 52.227-19 of the FAR.
-
- 8. Controlling Law and Severability. If there is a local subsidiary of Apple in the country in which the Apple Software License was obtained, then the local law in which the subsidiary sits shall govern this License. Otherwise, this License shall be governed by the laws of the United States and the State of California. If for any reason a court of competent jurisdiction finds any provision, or portion thereof, to be unenforceable, the remainder of this License shall continue in full force and effect.
-
- 9. Complete Agreement. This License constitutes the entire agreement between the parties with respect to the use of the Apple Software and supersedes all prior or contemporaneous understandings regarding such subject matter. No amendment to or modification of this License will be binding unless in writing and signed by Apple.
-
- Where the Licensee is located in the province of Quebec, Canada, the following clause applies: The parties hereto confirm that they have requested that this Agreement and all related documents be drafted in English. Les parties ont exigª que le prªsent contrat et tous les documents connexes soient rªdigªs en anglais.
-
- EXHIBIT A
-
- License. You may copy, install, use, modify and create derivative works of the (Modified Software) "Changed Software" (but you may not modify or create derivative works of the (Fonts)) and distribute and sublicense such Changed Software, provided however, that if the Changed Software contains modifications, overwrites, replacements, deletions, additions, or ports to new platforms of: (1) the methods of existing classes objects or their existing relationships, or (2) any part of the virtual machine, then for so long as the Changed Software is distributed or sublicensed to others, such modified, overwritten, replaced, deleted, added and ported portions of the Changed Software must be made publicly available, preferably by means of download from a website, at no charge under the terms of a license that makes no representations or warranties on behalf of any third party, is no less protective of (the licensors of the Modified Software) and its licensors, and contains the terms set forth in Exhibit A below (which should contain the terms of this Exhibit A). You may distribute and sublicense the (Fonts) only as a part of and for use with Changed Software, and not as a part of or for use with Changed Software that is distributed or sublicensed for a fee or for other valuable consideration.'!
Smalltalkers are welcome ;-)
======================================================================================
CALL FOR PAPERS
1st International Workshop on Domain-Specific Languages and models for
ROBotic systems (DSLRob’10)
October 2010, Tapei, Taiwan
Web site : http://www.doesnotunderstand.org/wikka.php?wakka=DSLRob10
======================================================================================
This workshop will take place in October 2010 in Taipei (台北) Taiwan,
during the 2010 IEEE/RSJ International Conference on Intelligent
Robots and Systems (IROS'10) : http://www.iros2010.org.tw/
Description
A domain-specific language (DSL) is a programming language dedicated
to a particular problem domain that offers specific notations and
abstractions that increase programmer productivity within that domain.
Models offer a high-level way for domain users to specify the
functionality of their system at the right level of abstraction. DSLs
and models have historically been used for programming complex
systems. However recently they have garnered interest as a separate
field of study. Robotic systems blend hardware and software in a
holistic way that intrinsically raises many crosscutting concerns
(concurrency, uncertainty, time constraints, ...), for which reason,
traditional general-purpose languages often lead to a poor fit between
the language features and the implementation requirements. DSLs and
models offer a powerful, systematic way to overcome this problem,
enabling the programmer to quickly and precisely implement novel
software solutions to complex problems within the robotics domain.
The main objective of this workshop is a cross-pollination of ideas
between robotics researchers in DSLs and models from different
domains. DSLs and models are key elements in many robotic systems
presented at leading conferences such as IROS and ICRA, but the
domain-centric structure of the typical robotics conference does not
offer a natural venue for exchange of ideas regarding DSLs and models.
This workshop will bring together robotics researchers from different
parts of the robotics community, thus forming a base for future
collaboration.
This workshop will focus on the use of Domain-Specific Languages and
Models for Robotic Systems. Topics that are of special interest
include:
- domain-specific languages to express reactive behaviors, variability
in robotic systems,
- domain-specific languages to express uncertainty, modelling of
physical system, real-time constraints,
- domain-specific languages to describe cooperative robotics and
modular robotics systems,
- languages to teach robotics, visual languages for robotics,
- tools support and frameworks for describing and manipulating DSLs
for robotic systems,
- model-driven engineering approaches for robotic systems,
- code generation and code transformation for robotics systems,
- frameworks to combine DSLs in an uniform manner,
- benchmarks to compare use of DSL vs general-purpose programming,
- programming languages in the context of robotic systems.
Type of workshop: half-day
The intended audience is those robotics researchers throughout the
entire robotics community who use DSLs and models as a key component
of their robotics software infrastructure. In addition, robotics
researchers with an interest in modern approaches to solving complex
software-related issues will find the workshop inspirational.
Important dates
- Due date for full workshop papers submission: July 1st, 2010
- Final acceptance: July 23rd, 2010
- Camera-ready paper due: August 6th, 2010
- Workshop date: October, 2010 (half day workshop) during IROS'10
Submission guidelines
All submitted papers will be reviewed on the basis of technical
quality, relevance, significance, and clarity. At least two reviews
for each paper will be conducted. All workshop papers should be
submitted electronically in PDF format through the Easychair website
and should use the IEEE US letter format. We are looking for
submission of full research papers and experiences reports (up to 6
pages) and work in progress submissions (up to 4 pages).
Please create your account on Easychair website as soon as possible if
you intend to submit a paper:
http://www.easychair.org/conferences/?conf=dslrob10
Organizers
- Ulrik P. Schultz, University of Southern Denmark, Denmark
- Serge Stinckwich, UMI UMMISCO IRD/UPMC/MSI-IFI, Vietnam
- Mikal Ziane, LIP6, France
Program committee
- Jean-Christophe Baillie, GOSTAI
- Alexandre Bergel, University of Chile, Chile
- Mirko Bordignon, University of Southern Denmark, Denmark
- Sébastien Gerard, CEA LIST, France
- Henrik Nilsson, University of Nottingham, UK
- Ulrik P. Schultz, University of Southern Denmark, Denmark
- Serge Stinckwich, UMMISCO (IRD/UPMC/MSI), Vietnam
- Mikal Ziane, LIP6, France
- Tewfik Ziadi, LIP6, France
--
Serge Stinckwich
UMI UMMISCO 209 (IRD/UPMC), Hanoi, Vietnam
Every DSL ends up being Smalltalk
http://doesnotunderstand.org/
A new version of Squeak-Project-Help was added to project The Inbox:
http://source.squeak.org/inbox/Squeak-Project-Help-mha.5.mcz
==================== Summary ====================
Name: Squeak-Project-Help-mha.5
Author: mha
Time: 2 May 2010, 3:47:54.487 pm
UUID: 1982219f-ca0f-4715-9e7e-e3f964fe5f94
Ancestors: Squeak-Project-Help-hjh.4
installable package for trunk
==================== Snapshot ====================
SystemOrganization addCategory: #'Squeak-Project-Help'!
CustomHelp subclass: #SqueakHelp
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Squeak-Project-Help'!
----- Method: SqueakHelp classSide>>bookName (in category 'accessing') -----
bookName
^'Squeak'!
----- Method: SqueakHelp classSide>>icon (in category 'accessing') -----
icon
(self name = #SqueakHelp) ifTrue: [^HelpIcons iconNamed: #squeakIcon].
^nil!
SqueakHelp subclass: #SqueakProjectHelp
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Squeak-Project-Help'!
SqueakProjectHelp subclass: #SqueakLicenseHelp
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Squeak-Project-Help'!
----- Method: SqueakLicenseHelp classSide>>bookName (in category 'accessing') -----
bookName
^'License'!
----- Method: SqueakLicenseHelp classSide>>licenseChange (in category 'pages') -----
licenseChange
^HelpTopic
title: 'License has changed with 4.0'
contents: 'On 23 September 1996, Apple Computer Inc. released Squeak V1.1 under the "Squeak License" (SqL).
On May 8, 2006 Apple agreed to relicense original Squeak V1.1 under the Apple Public Source License.
On October 12, 2006 Apple granted permission to relicense under Apache license 2.0.
In 2006, VPRI began to collect "Distribution Agreements" for all contributors to Squeak since V1.1 up to V3.8, asking them to relicense their contributions, which were originally licensed under SqL, to the MIT license. This was a great effort on behalf of many and VPRI has 100s of signed documents agreeing to this.
Do you want to contribute source to Squeak?All new contributions since 4.0 must be under the MIT license. When you make your code available, please state explicitly in some form such as the description on a web site or email announcement that your contribution is under the MIT license. (It doesn''t have to be exclusive; you can release it under difference licenses at the same time.)
Have you contributed source to Squeak? If you believe you have, but have not sent in an agreement to allow your submission(s) to be licensed under the MIT license then please see http://netjam.org/squeak/contributors. There you can find a list of known contributors and a PDF of the agreement with instructions. The snail mail address is found in the agreement PDF file.
Also there are a few people for which we are lacking full contact information. If you think you can help please also visit the link above and see if you can identify any of the unknown developer initials or any of the developers for whom we do not have a current email address.' !
----- Method: SqueakLicenseHelp classSide>>officalLicense (in category 'pages') -----
officalLicense
^HelpTopic
title: 'Offical License - pre 4.0'
contents: 'Apple Computer, Inc. Software License
PLEASE READ THIS SOFTWARE LICENSE AGREEMENT "LICENSE" CAREFULLY BEFORE DOWNLOADING THIS SOFTWARE. BY DOWNLOADING THIS SOFTWARE YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS LICENSE. IF YOU DO NOT AGREE TO THE TERMS OF THIS LICENSE, DO NOT DOWNLOAD.
1. License. The software, documentation and any fonts which you will receive by downloading this software (the "Apple Software") are licensed, not sold, to you by Apple Computer, Inc. or its local subsidiary, if any. Apple and/or Apple''s licensor(s) retain title to the Apple Software, and the Apple Software and any copies which this License authorizes you to make are subject to this License. This License grants no right or license under any trademarks, service marks, or tradenames of Apple.
2. Permitted Uses and Restrictions. This License allows you to copy, install and use the Apple Software on an unlimited number of computers under your direct control. You may modify and create derivative works of the Apple Software ("Modified Software"), however, you may not modify or create derivative works of the fonts provided by Apple ("Fonts"). You may distribute and sublicense such Modified Software only under the terms of a valid, binding license that makes no representations or warranties on behalf of Apple, and is no less protective of Apple and Apple''s rights than this License. You may distribute and sublicense the Fonts only as a part of and for use with Modified Software, and not as a part of or for use with Modified Software that is distributed or sublicensed for a fee or for other valuable consideration. If the Modified Software contains modifications, overwrites, replacements, deletions, additions, or ports to new platforms of: (1) the methods of existing class objects or their existing relationships, or (2) any part of the virtual machine, then for so long as the Modified Software is distributed or sublicensed to others, such modified, overwritten, replaced, deleted, added and ported portions of the Modified Software must be made publicly available, preferably by means of download from a website, at no charge under the terms set forth in Exhibit A below. You may transfer your rights under this License provided you transfer this License and a copy of the Apple Software to a party who agrees to accept the terms of this License and destroy any other copies of the Apple Software in your possession. Your rights under this License will terminate automatically without notice from Apple if you fail to comply with any term(s) of this License.
3. Disclaimer Of Warranty. The Apple Software is pre-release, and untested, or not fully tested. The Apple Software may contain errors that could cause failures or loss of data, and may be incomplete or contain inaccuracies. You expressly acknowledge and agree that use of the Apple Software is at your sole risk. You acknowledge that Apple has not publicly announced, nor promised or guaranteed to you, that Apple will release a final, commercial or any future pre-release version of the Apple Software to you or anyone in the future, and that Apple has no express or implied obligation to announce or introduce a final, commercial or any future pre-release version of the Apple Software or any similar or compatible product, or to continue to offer or support the Apple Software in the future. The Apple Software is provided "AS-IS" and without warranty of any kind and Apple and Apple''s licensor(s) (for the purposes of Sections 3 and 4, Apple and Apple''s licensor(s) shall be collectively referred to as "Apple") EXPRESSLY DISCLAIM ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY OR SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. APPLE DOES NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE APPLE SOFTWARE WILL MEET YOUR REQUIREMENTS, OR THAT THE OPERATION OF THE APPLE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT DEFECTS IN THE APPLE SOFTWARE WILL BE CORRECTED. FURTHERMORE, APPLE DOES NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE USE OR THE RESULTS OF THE USE OF THE APPLE SOFTWARE OR RELATED DOCUMENTATION IN TERMS OF THEIR CORRECTNESS, ACCURACY, RELIABILITY, OR OTHERWISE. NO ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE SHALL CREATE A WARRANTY OR IN ANY WAY INCREASE THE SCOPE OF THIS WARRANTY. SHOULD THE APPLE SOFTWARE PROVE DEFECTIVE, YOU (AND NOT APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE) ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO YOU. THE TERMS OF THIS DISCLAIMER DO NOT AFFECT OR PREJUDICE THE STATUTORY RIGHTS OF A CONSUMER ACQUIRING APPLE PRODUCTS OTHERWISE THAN IN THE COURSE OF A BUSINESS, NEITHER DO THEY LIMIT OR EXCLUDE ANY LIABILITY FOR DEATH OR PERSONAL INJURY CAUSED BY APPLE''S NEGLIGENCE.
4. Limitation of Liability. UNDER NO CIRCUMSTANCES, INCLUDING NEGLIGENCE, SHALL APPLE BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES SO THIS LIMITATION MAY NOT APPLY TO YOU. In no event shall Apple''s total liability to you for all damages exceed the amount of fifty dollars ($50.00).
5. Indemnification. You agree to indemnify and hold Apple harmless from any and all damages, liabilities, costs and expenses (including but not limited to attorneys'' fees and costs of suit) incurred by Apple as a result of any claim, proceeding, and/or judgment to the extent it arises out of or is connected in any manner with the operation, use, distribution or modification of Modified Software, or the combination of Apple Software or Modified Software with other programs; provided that Apple notifies Licensee of any such claim or proceeding in writing, tenders to Licensee the opportunity to defend or settle such claim or proceeding at Licensee''s expense, and cooperates with Licensee in defending or settling such claim or proceeding.
6. Export Law Assurances. You may not use or otherwise export or reexport the Apple Software except as authorized by United States law and the laws of the jurisdiction in which the Apple Software was obtained. In particular, but without limitation, the Apple Software may not be exported or reexported (i) into (or to a national or resident of) any U.S. embargoed country or (ii) to anyone on the U.S. Treasury Department''s list of Specially Designated Nationals or the U.S. Department of Commerce''s Table of Denial Orders. By using the Apple Software, you represent and warrant that you are not located in, under control of, or a national or resident of any such country or on any such list.
7. Government End Users. If the Apple Software is supplied to the United States Government, the Apple Software is classified as "restricted computer software" as defined in clause 52.227-19 of the FAR. The United States Government''s rights to the Apple Software are as provided in clause 52.227-19 of the FAR.
8. Controlling Law and Severability. If there is a local subsidiary of Apple in the country in which the Apple Software License was obtained, then the local law in which the subsidiary sits shall govern this License. Otherwise, this License shall be governed by the laws of the United States and the State of California. If for any reason a court of competent jurisdiction finds any provision, or portion thereof, to be unenforceable, the remainder of this License shall continue in full force and effect.
9. Complete Agreement. This License constitutes the entire agreement between the parties with respect to the use of the Apple Software and supersedes all prior or contemporaneous understandings regarding such subject matter. No amendment to or modification of this License will be binding unless in writing and signed by Apple.
Where the Licensee is located in the province of Quebec, Canada, the following clause applies: The parties hereto confirm that they have requested that this Agreement and all related documents be drafted in English. Les parties ont exigª que le prªsent contrat et tous les documents connexes soient rªdigªs en anglais.
EXHIBIT A
License. You may copy, install, use, modify and create derivative works of the (Modified Software) "Changed Software" (but you may not modify or create derivative works of the (Fonts)) and distribute and sublicense such Changed Software, provided however, that if the Changed Software contains modifications, overwrites, replacements, deletions, additions, or ports to new platforms of: (1) the methods of existing classes objects or their existing relationships, or (2) any part of the virtual machine, then for so long as the Changed Software is distributed or sublicensed to others, such modified, overwritten, replaced, deleted, added and ported portions of the Changed Software must be made publicly available, preferably by means of download from a website, at no charge under the terms of a license that makes no representations or warranties on behalf of any third party, is no less protective of (the licensors of the Modified Software) and its licensors, and contains the terms set forth in Exhibit A below (which should contain the terms of this Exhibit A). You may distribute and sublicense the (Fonts) only as a part of and for use with Changed Software, and not as a part of or for use with Changed Software that is distributed or sublicensed for a fee or for other valuable consideration.'!
----- Method: SqueakLicenseHelp classSide>>pages (in category 'accessing') -----
pages
^#(licenseChange officalLicense)!
----- Method: SqueakProjectHelp classSide>>bookName (in category 'accessing') -----
bookName
^'Squeak Project'!
----- Method: SqueakProjectHelp classSide>>introduction (in category 'pages') -----
introduction
^HelpTopic
title: 'Welcome'
icon: (HelpIcons iconNamed: #squeakIcon)
contents:
'WELCOME
Squeak is a modern, open source, full-featured implementation of the powerful Smalltalk programming language and environment. Squeak is highly-portable - even its virtual machine is written entirely in Smalltalk making it easy to debug, analyze, and change. Squeak is the vehicle for a wide range of projects from multimedia applications, educational platforms to commercial web application development.'!
----- Method: SqueakProjectHelp classSide>>pages (in category 'accessing') -----
pages
^#(introduction )!
----- Method: HelpIcons classSide>>squeakIcon (in category '*squeak-project-help') -----
squeakIcon
^(Form
extent: 12@12
depth: 32
fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75398782 26843545 0 0 1159996452 1378823983 338044454 0 0 0 0 455682345 1295266868 1126376227 0 0 1040582150 0 1328097577 0 0 0 23488102 1277502757 0 1076834095 0 0 1075781407 0 287647013 472854319 0 0 471472666 204089898 0 1092756002 0 0 1041963803 36909875 0 1880232466 454761243 287515427 1342572038 0 104939841 974460181 0 0 270080281 354690084 86846765 3674539269 1394219546 1611599631 3557427722 86123042 388244516 204287277 0 26843545 605558808 1025055001 1008014613 1159141143 522264865 739710743 1159141143 571083274 570820102 188891714 0 942550574 1411391520 1143021857 1312241463 1428563494 3205040393 3708159494 1663576104 1511067921 1579887403 1629758500 958472481 656679972 439563059 1294608938 839913488 739644950 172246084 221459251 840900383 1075978786 1209933342 724512559 707077413 0 0 0 0 0 0 0 0 0 0 38488907 0 0 0 0 0 0 0 0 0 0 0 0 0)
offset: 0@0)!